mis-crystal-design-system 18.2.13 → 18.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +1 -0
  2. package/daterangepicker_v2/daterangepicker-constants.d.ts +4 -0
  3. package/daterangepicker_v2/daterangepicker.module.d.ts +9 -8
  4. package/daterangepicker_v2/models/drp-config.model.d.ts +14 -0
  5. package/daterangepicker_v2/public_api.d.ts +3 -1
  6. package/daterangepicker_v2/tz-daterangepicker.directive.d.ts +2 -1
  7. package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +24 -1
  8. package/daterangepicker_v2/tz-drp-mobile-container/tz-drp-mobile-container.component.d.ts +13 -0
  9. package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +49 -33
  10. package/esm2022/daterangepicker_v2/daterangepicker-constants.mjs +12 -1
  11. package/esm2022/daterangepicker_v2/daterangepicker.module.mjs +5 -4
  12. package/esm2022/daterangepicker_v2/models/drp-config.model.mjs +1 -1
  13. package/esm2022/daterangepicker_v2/public_api.mjs +3 -1
  14. package/esm2022/daterangepicker_v2/tz-daterangepicker.directive.mjs +8 -3
  15. package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +177 -50
  16. package/esm2022/daterangepicker_v2/tz-drp-mobile-container/tz-drp-mobile-container.component.mjs +267 -0
  17. package/esm2022/specificdatepicker/models/sdp-config.model.mjs +1 -1
  18. package/esm2022/specificdatepicker/specificdatepicker.module.mjs +4 -5
  19. package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +277 -225
  20. package/esm2022/specificdatepicker/tz-specificdatepicker.directive.mjs +33 -31
  21. package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +48 -32
  22. package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  23. package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +464 -61
  24. package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  25. package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +311 -257
  26. package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  27. package/package.json +13 -13
  28. package/specificdatepicker/models/sdp-config.model.d.ts +1 -0
  29. package/specificdatepicker/specificdatepicker.module.d.ts +2 -3
  30. package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +10 -9
  31. package/specificdatepicker/tz-specificdatepicker.directive.d.ts +5 -3
@@ -1,7 +1,7 @@
1
1
  import { Component, HostListener, Inject, signal, computed } from "@angular/core";
2
2
  import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
3
3
  import { timer } from "rxjs";
4
- import { CALENDAR_ARROW_KEY, COLUMN_NAV_DIRECTION, CONTAINER_DATA, DATE_FORMAT, ISO_DATE_FORMAT, DATE_RANGE_PANE, MONTH_NAV_DIRECTION, SELECTION_MODE, } from "../daterangepicker-constants";
4
+ import { CALENDAR_ARROW_KEY, COLUMN_NAV_DIRECTION, CONTAINER_DATA, DATE_FORMAT, ISO_DATE_FORMAT, DATE_RANGE_PANE, DEFAULT_DAY_OPTIONS, DEFAULT_DAY_SELECTION_LABEL, MONTH_NAV_DIRECTION, SELECTION_MODE, } from "../daterangepicker-constants";
5
5
  import { getMonth } from "../utils";
6
6
  import dayjs from 'dayjs';
7
7
  import timezone from 'dayjs/plugin/timezone';
@@ -20,9 +20,10 @@ const _c0 = a0 => ({ "disabled-month": a0 });
20
20
  const _c1 = () => [];
21
21
  const _c2 = a0 => ({ "active-range": a0 });
22
22
  const _c3 = (a0, a1, a2, a3, a4, a5, a6, a7, a8) => ({ "selected-same-day": a0, "selected-start-day": a1, "selected-end-day": a2, "disabled-day": a3, "in-range-day": a4, "is-valid-date": a5, "hover-week-row": a6, "hover-week-start": a7, "hover-week-end": a8 });
23
+ const _c4 = a0 => ({ "is-selected": a0 });
23
24
  function TzDrpContainerComponent_div_3_div_1_Template(rf, ctx) { if (rf & 1) {
24
25
  const _r2 = i0.ɵɵgetCurrentView();
25
- i0.ɵɵelementStart(0, "div")(1, "button", 23);
26
+ i0.ɵɵelementStart(0, "div")(1, "button", 24);
26
27
  i0.ɵɵlistener("click", function TzDrpContainerComponent_div_3_div_1_Template_button_click_1_listener() { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.selectRange(item_r3)); });
27
28
  i0.ɵɵtext(2);
28
29
  i0.ɵɵelementEnd()();
@@ -36,9 +37,9 @@ function TzDrpContainerComponent_div_3_div_1_Template(rf, ctx) { if (rf & 1) {
36
37
  } }
37
38
  function TzDrpContainerComponent_div_3_Template(rf, ctx) { if (rf & 1) {
38
39
  const _r1 = i0.ɵɵgetCurrentView();
39
- i0.ɵɵelementStart(0, "div", 21);
40
- i0.ɵɵtemplate(1, TzDrpContainerComponent_div_3_div_1_Template, 3, 4, "div", 22);
41
- i0.ɵɵelementStart(2, "div")(3, "button", 23);
40
+ i0.ɵɵelementStart(0, "div", 22);
41
+ i0.ɵɵtemplate(1, TzDrpContainerComponent_div_3_div_1_Template, 3, 4, "div", 23);
42
+ i0.ɵɵelementStart(2, "div")(3, "button", 24);
42
43
  i0.ɵɵlistener("click", function TzDrpContainerComponent_div_3_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.resetRange()); });
43
44
  i0.ɵɵtext(4, "Custom Range");
44
45
  i0.ɵɵelementEnd()()();
@@ -51,7 +52,7 @@ function TzDrpContainerComponent_div_3_Template(rf, ctx) { if (rf & 1) {
51
52
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c2, ctx_r3.selectedItemLabel() === "Custom Range"));
52
53
  } }
53
54
  function TzDrpContainerComponent_div_17_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelementStart(0, "div", 24)(1, "span");
55
+ i0.ɵɵelementStart(0, "div", 25)(1, "span");
55
56
  i0.ɵɵtext(2);
56
57
  i0.ɵɵelementEnd()();
57
58
  } if (rf & 2) {
@@ -61,7 +62,7 @@ function TzDrpContainerComponent_div_17_Template(rf, ctx) { if (rf & 1) {
61
62
  } }
62
63
  function TzDrpContainerComponent_For_20_span_1_Template(rf, ctx) { if (rf & 1) {
63
64
  const _r8 = i0.ɵɵgetCurrentView();
64
- i0.ɵɵelementStart(0, "span", 27);
65
+ i0.ɵɵelementStart(0, "span", 28);
65
66
  i0.ɵɵlistener("keydown", function TzDrpContainerComponent_For_20_span_1_Template_span_keydown_0_listener($event) { i0.ɵɵrestoreView(_r8); const $index_r9 = i0.ɵɵnextContext().$index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onDayCellKeydown($event, ctx_r3.DATE_RANGE_PANE.LEFT, $index_r9)); });
66
67
  i0.ɵɵtext(1);
67
68
  i0.ɵɵelementEnd();
@@ -77,9 +78,9 @@ function TzDrpContainerComponent_For_20_span_1_Template(rf, ctx) { if (rf & 1) {
77
78
  } }
78
79
  function TzDrpContainerComponent_For_20_Template(rf, ctx) { if (rf & 1) {
79
80
  const _r6 = i0.ɵɵgetCurrentView();
80
- i0.ɵɵelementStart(0, "div", 25);
81
+ i0.ɵɵelementStart(0, "div", 26);
81
82
  i0.ɵɵlistener("click", function TzDrpContainerComponent_For_20_Template_div_click_0_listener() { const day_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.selectDay(ctx_r3.DATE_RANGE_PANE.LEFT, day_r7)); })("keyup.enter", function TzDrpContainerComponent_For_20_Template_div_keyup_enter_0_listener() { const day_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.selectDay(ctx_r3.DATE_RANGE_PANE.LEFT, day_r7)); })("mouseenter", function TzDrpContainerComponent_For_20_Template_div_mouseenter_0_listener() { const day_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.setHoveredWeek(ctx_r3.DATE_RANGE_PANE.LEFT, day_r7)); })("mouseleave", function TzDrpContainerComponent_For_20_Template_div_mouseleave_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.clearHoveredWeek()); });
82
- i0.ɵɵtemplate(1, TzDrpContainerComponent_For_20_span_1_Template, 2, 5, "span", 26);
83
+ i0.ɵɵtemplate(1, TzDrpContainerComponent_For_20_span_1_Template, 2, 5, "span", 27);
83
84
  i0.ɵɵelementEnd();
84
85
  } if (rf & 2) {
85
86
  const day_r7 = ctx.$implicit;
@@ -90,7 +91,7 @@ function TzDrpContainerComponent_For_20_Template(rf, ctx) { if (rf & 1) {
90
91
  i0.ɵɵproperty("ngIf", day_r7.date > 0);
91
92
  } }
92
93
  function TzDrpContainerComponent_div_31_Template(rf, ctx) { if (rf & 1) {
93
- i0.ɵɵelementStart(0, "div", 24)(1, "span");
94
+ i0.ɵɵelementStart(0, "div", 25)(1, "span");
94
95
  i0.ɵɵtext(2);
95
96
  i0.ɵɵelementEnd()();
96
97
  } if (rf & 2) {
@@ -100,7 +101,7 @@ function TzDrpContainerComponent_div_31_Template(rf, ctx) { if (rf & 1) {
100
101
  } }
101
102
  function TzDrpContainerComponent_For_34_span_1_Template(rf, ctx) { if (rf & 1) {
102
103
  const _r14 = i0.ɵɵgetCurrentView();
103
- i0.ɵɵelementStart(0, "span", 27);
104
+ i0.ɵɵelementStart(0, "span", 28);
104
105
  i0.ɵɵlistener("keydown", function TzDrpContainerComponent_For_34_span_1_Template_span_keydown_0_listener($event) { i0.ɵɵrestoreView(_r14); const $index_r15 = i0.ɵɵnextContext().$index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onDayCellKeydown($event, ctx_r3.DATE_RANGE_PANE.RIGHT, $index_r15)); });
105
106
  i0.ɵɵtext(1);
106
107
  i0.ɵɵelementEnd();
@@ -116,9 +117,9 @@ function TzDrpContainerComponent_For_34_span_1_Template(rf, ctx) { if (rf & 1) {
116
117
  } }
117
118
  function TzDrpContainerComponent_For_34_Template(rf, ctx) { if (rf & 1) {
118
119
  const _r12 = i0.ɵɵgetCurrentView();
119
- i0.ɵɵelementStart(0, "div", 25);
120
+ i0.ɵɵelementStart(0, "div", 26);
120
121
  i0.ɵɵlistener("click", function TzDrpContainerComponent_For_34_Template_div_click_0_listener() { const day_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.selectDay(ctx_r3.DATE_RANGE_PANE.RIGHT, day_r13)); })("keyup.enter", function TzDrpContainerComponent_For_34_Template_div_keyup_enter_0_listener() { const day_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.selectDay(ctx_r3.DATE_RANGE_PANE.RIGHT, day_r13)); })("mouseenter", function TzDrpContainerComponent_For_34_Template_div_mouseenter_0_listener() { const day_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.setHoveredWeek(ctx_r3.DATE_RANGE_PANE.RIGHT, day_r13)); })("mouseleave", function TzDrpContainerComponent_For_34_Template_div_mouseleave_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.clearHoveredWeek()); });
121
- i0.ɵɵtemplate(1, TzDrpContainerComponent_For_34_span_1_Template, 2, 5, "span", 26);
122
+ i0.ɵɵtemplate(1, TzDrpContainerComponent_For_34_span_1_Template, 2, 5, "span", 27);
122
123
  i0.ɵɵelementEnd();
123
124
  } if (rf & 2) {
124
125
  const day_r13 = ctx.$implicit;
@@ -130,12 +131,12 @@ function TzDrpContainerComponent_For_34_Template(rf, ctx) { if (rf & 1) {
130
131
  } }
131
132
  function TzDrpContainerComponent_div_35_select_9_Template(rf, ctx) { if (rf & 1) {
132
133
  const _r18 = i0.ɵɵgetCurrentView();
133
- i0.ɵɵelementStart(0, "select", 35);
134
+ i0.ɵɵelementStart(0, "select", 36);
134
135
  i0.ɵɵlistener("ngModelChange", function TzDrpContainerComponent_div_35_select_9_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.startAmPmSignal.set($event)); });
135
- i0.ɵɵelementStart(1, "option", 36);
136
+ i0.ɵɵelementStart(1, "option", 37);
136
137
  i0.ɵɵtext(2, "AM");
137
138
  i0.ɵɵelementEnd();
138
- i0.ɵɵelementStart(3, "option", 37);
139
+ i0.ɵɵelementStart(3, "option", 38);
139
140
  i0.ɵɵtext(4, "PM");
140
141
  i0.ɵɵelementEnd()();
141
142
  } if (rf & 2) {
@@ -144,12 +145,12 @@ function TzDrpContainerComponent_div_35_select_9_Template(rf, ctx) { if (rf & 1)
144
145
  } }
145
146
  function TzDrpContainerComponent_div_35_select_18_Template(rf, ctx) { if (rf & 1) {
146
147
  const _r19 = i0.ɵɵgetCurrentView();
147
- i0.ɵɵelementStart(0, "select", 35);
148
+ i0.ɵɵelementStart(0, "select", 36);
148
149
  i0.ɵɵlistener("ngModelChange", function TzDrpContainerComponent_div_35_select_18_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.endAmPmSignal.set($event)); });
149
- i0.ɵɵelementStart(1, "option", 36);
150
+ i0.ɵɵelementStart(1, "option", 37);
150
151
  i0.ɵɵtext(2, "AM");
151
152
  i0.ɵɵelementEnd();
152
- i0.ɵɵelementStart(3, "option", 37);
153
+ i0.ɵɵelementStart(3, "option", 38);
153
154
  i0.ɵɵtext(4, "PM");
154
155
  i0.ɵɵelementEnd()();
155
156
  } if (rf & 2) {
@@ -158,33 +159,33 @@ function TzDrpContainerComponent_div_35_select_18_Template(rf, ctx) { if (rf & 1
158
159
  } }
159
160
  function TzDrpContainerComponent_div_35_Template(rf, ctx) { if (rf & 1) {
160
161
  const _r17 = i0.ɵɵgetCurrentView();
161
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 29)(2, "h4");
162
+ i0.ɵɵelementStart(0, "div", 29)(1, "div", 30)(2, "h4");
162
163
  i0.ɵɵtext(3, "From");
163
164
  i0.ɵɵelementEnd();
164
- i0.ɵɵelementStart(4, "div", 30)(5, "input", 31);
165
+ i0.ɵɵelementStart(4, "div", 31)(5, "input", 32);
165
166
  i0.ɵɵlistener("ngModelChange", function TzDrpContainerComponent_div_35_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r3 = i0.ɵɵnextContext(); ctx_r3.is12HourFormat() ? ctx_r3.startHourSignal.set($event) : ctx_r3.startHour24Signal.set($event); return i0.ɵɵresetView(ctx_r3.onStartHourInput()); });
166
167
  i0.ɵɵelementEnd();
167
- i0.ɵɵelementStart(6, "span", 32);
168
+ i0.ɵɵelementStart(6, "span", 33);
168
169
  i0.ɵɵtext(7, ":");
169
170
  i0.ɵɵelementEnd();
170
- i0.ɵɵelementStart(8, "input", 33);
171
+ i0.ɵɵelementStart(8, "input", 34);
171
172
  i0.ɵɵlistener("ngModelChange", function TzDrpContainerComponent_div_35_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.startMinuteSignal.set($event)); })("input", function TzDrpContainerComponent_div_35_Template_input_input_8_listener() { i0.ɵɵrestoreView(_r17); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onStartMinuteInput()); });
172
173
  i0.ɵɵelementEnd();
173
- i0.ɵɵtemplate(9, TzDrpContainerComponent_div_35_select_9_Template, 5, 1, "select", 34);
174
+ i0.ɵɵtemplate(9, TzDrpContainerComponent_div_35_select_9_Template, 5, 1, "select", 35);
174
175
  i0.ɵɵelementEnd()();
175
- i0.ɵɵelementStart(10, "div", 29)(11, "h4");
176
+ i0.ɵɵelementStart(10, "div", 30)(11, "h4");
176
177
  i0.ɵɵtext(12, "To");
177
178
  i0.ɵɵelementEnd();
178
- i0.ɵɵelementStart(13, "div", 30)(14, "input", 31);
179
+ i0.ɵɵelementStart(13, "div", 31)(14, "input", 32);
179
180
  i0.ɵɵlistener("ngModelChange", function TzDrpContainerComponent_div_35_Template_input_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r3 = i0.ɵɵnextContext(); ctx_r3.is12HourFormat() ? ctx_r3.endHourSignal.set($event) : ctx_r3.endHour24Signal.set($event); return i0.ɵɵresetView(ctx_r3.onEndHourInput()); });
180
181
  i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(15, "span", 32);
182
+ i0.ɵɵelementStart(15, "span", 33);
182
183
  i0.ɵɵtext(16, ":");
183
184
  i0.ɵɵelementEnd();
184
- i0.ɵɵelementStart(17, "input", 33);
185
+ i0.ɵɵelementStart(17, "input", 34);
185
186
  i0.ɵɵlistener("ngModelChange", function TzDrpContainerComponent_div_35_Template_input_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.endMinuteSignal.set($event)); })("input", function TzDrpContainerComponent_div_35_Template_input_input_17_listener() { i0.ɵɵrestoreView(_r17); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onEndMinuteInput()); });
186
187
  i0.ɵɵelementEnd();
187
- i0.ɵɵtemplate(18, TzDrpContainerComponent_div_35_select_18_Template, 5, 1, "select", 34);
188
+ i0.ɵɵtemplate(18, TzDrpContainerComponent_div_35_select_18_Template, 5, 1, "select", 35);
188
189
  i0.ɵɵelementEnd()()();
189
190
  } if (rf & 2) {
190
191
  const ctx_r3 = i0.ɵɵnextContext();
@@ -201,6 +202,45 @@ function TzDrpContainerComponent_div_35_Template(rf, ctx) { if (rf & 1) {
201
202
  i0.ɵɵadvance();
202
203
  i0.ɵɵproperty("ngIf", ctx_r3.is12HourFormat());
203
204
  } }
205
+ function TzDrpContainerComponent_div_36_button_4_Template(rf, ctx) { if (rf & 1) {
206
+ const _r20 = i0.ɵɵgetCurrentView();
207
+ i0.ɵɵelementStart(0, "button", 44);
208
+ i0.ɵɵlistener("click", function TzDrpContainerComponent_div_36_button_4_Template_button_click_0_listener() { const option_r21 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.toggleDay(option_r21)); });
209
+ i0.ɵɵtext(1);
210
+ i0.ɵɵelementEnd();
211
+ } if (rf & 2) {
212
+ const option_r21 = ctx.$implicit;
213
+ const ctx_r3 = i0.ɵɵnextContext(2);
214
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c4, ctx_r3.isDaySelected(option_r21)));
215
+ i0.ɵɵattribute("aria-pressed", ctx_r3.isDaySelected(option_r21))("aria-label", ctx_r3.dayChipAriaLabel(option_r21));
216
+ i0.ɵɵadvance();
217
+ i0.ɵɵtextInterpolate1(" ", option_r21.label, " ");
218
+ } }
219
+ function TzDrpContainerComponent_div_36_span_5_Template(rf, ctx) { if (rf & 1) {
220
+ i0.ɵɵelementStart(0, "span", 45);
221
+ i0.ɵɵtext(1, " Select at least one day ");
222
+ i0.ɵɵelementEnd();
223
+ } }
224
+ function TzDrpContainerComponent_div_36_Template(rf, ctx) { if (rf & 1) {
225
+ i0.ɵɵelementStart(0, "div", 39)(1, "span", 40);
226
+ i0.ɵɵtext(2);
227
+ i0.ɵɵelementEnd();
228
+ i0.ɵɵelementStart(3, "div", 41);
229
+ i0.ɵɵtemplate(4, TzDrpContainerComponent_div_36_button_4_Template, 2, 6, "button", 42);
230
+ i0.ɵɵelementEnd();
231
+ i0.ɵɵtemplate(5, TzDrpContainerComponent_div_36_span_5_Template, 2, 0, "span", 43);
232
+ i0.ɵɵelementEnd();
233
+ } if (rf & 2) {
234
+ const ctx_r3 = i0.ɵɵnextContext();
235
+ i0.ɵɵadvance(2);
236
+ i0.ɵɵtextInterpolate1(" ", ctx_r3.daySelectionLabel(), " ");
237
+ i0.ɵɵadvance();
238
+ i0.ɵɵattribute("aria-label", ctx_r3.daySelectionGroupAriaLabel());
239
+ i0.ɵɵadvance();
240
+ i0.ɵɵproperty("ngForOf", ctx_r3.dayOptions())("ngForTrackBy", ctx_r3.trackDayOption);
241
+ i0.ɵɵadvance();
242
+ i0.ɵɵproperty("ngIf", ctx_r3.showDaySelectionHint());
243
+ } }
204
244
  dayjs.extend(isBetween);
205
245
  dayjs.extend(utc);
206
246
  dayjs.extend(timezone);
@@ -269,6 +309,7 @@ export class TzDrpContainerComponent {
269
309
  this.SELECTION_MODE = SELECTION_MODE;
270
310
  this.CUSTOM_RANGE_LABEL = "Custom Range";
271
311
  this.data = signal(this.injectedData);
312
+ this.isMobile = computed(() => !!this.data().isMobileView);
272
313
  this.dayjsInstance = (...args) => {
273
314
  return dayjs(...args);
274
315
  };
@@ -290,6 +331,7 @@ export class TzDrpContainerComponent {
290
331
  this.isDatesValidSignal = signal(false);
291
332
  this.selectedItemLabelSignal = signal(this.CUSTOM_RANGE_LABEL);
292
333
  this.hoveredWeekStartSignal = signal(null);
334
+ this.selectedDaysSignal = signal([]);
293
335
  // Time selection signals
294
336
  this.startHourSignal = signal(12);
295
337
  this.startMinuteSignal = signal(0);
@@ -315,6 +357,35 @@ export class TzDrpContainerComponent {
315
357
  this.selectedItemLabel = computed(() => this.selectedItemLabelSignal());
316
358
  this.isWeeklyMode = computed(() => this.data().dpConfig?.selectionMode === SELECTION_MODE.WEEKLY);
317
359
  this.enableDateTabbing = computed(() => this.data().enableDateTabbing !== false);
360
+ /** Chips to render, normalised from dpConfig.dayOptions. */
361
+ this.dayOptions = computed(() => {
362
+ const configured = this.data().dpConfig?.dayOptions;
363
+ const source = Array.isArray(configured) && configured.length > 0 ? configured : DEFAULT_DAY_OPTIONS;
364
+ const normalised = [];
365
+ const seen = new Set();
366
+ for (const option of source) {
367
+ const value = Number(option?.value);
368
+ if (!Number.isFinite(value) || seen.has(value))
369
+ continue;
370
+ seen.add(value);
371
+ const label = `${option?.label ?? ""}`.trim();
372
+ normalised.push({ label: label || `${value}`, value });
373
+ }
374
+ return normalised;
375
+ });
376
+ /** Renders only when explicitly enabled and chips exist. */
377
+ this.showDaySelection = computed(() => this.data().dpConfig?.showDaySelection === true && this.dayOptions().length > 0);
378
+ this.daySelectionLabel = computed(() => `${this.data().dpConfig?.daySelectionLabel ?? ""}`.trim() || DEFAULT_DAY_SELECTION_LABEL);
379
+ this.isDaySelectionRequired = computed(() => this.showDaySelection() && this.data().dpConfig?.daySelectionRequired === true);
380
+ this.selectedDays = computed(() => this.selectedDaysSignal());
381
+ this.isDaySelectionValid = computed(() => !this.isDaySelectionRequired() || this.selectedDaysSignal().length > 0);
382
+ /** Apply needs a complete range and, when mandated, at least one day. */
383
+ this.canApply = computed(() => this.isDatesValid() && this.isDaySelectionValid());
384
+ this.showDaySelectionHint = computed(() => this.isDaySelectionRequired() && this.selectedDaysSignal().length === 0);
385
+ this.daySelectionGroupAriaLabel = computed(() => {
386
+ const base = this.daySelectionLabel().replace(/:\s*$/, "");
387
+ return this.isDaySelectionRequired() ? `${base}, required` : base;
388
+ });
318
389
  this.anchorIndexLeft = computed(() => {
319
390
  const dates = this.currentMonthDates();
320
391
  const startDate = this.localSelectedDatesSignal().startDate;
@@ -355,9 +426,19 @@ export class TzDrpContainerComponent {
355
426
  });
356
427
  this.applyButtonAriaLabel = computed(() => {
357
428
  const { startDate, endDate } = this.localSelectedDatesSignal();
358
- if (startDate && endDate)
359
- return `Apply, Selected date range from ${startDate} to ${endDate}`;
360
- return 'Apply';
429
+ let label = startDate && endDate ? `Apply, Selected date range from ${startDate} to ${endDate}` : 'Apply';
430
+ if (this.showDaySelection()) {
431
+ const selected = this.selectedDayLabels();
432
+ label += selected.length ? `, days ${selected.join(', ')}` : ', no days selected';
433
+ if (this.showDaySelectionHint()) {
434
+ label += ', select at least one day to continue';
435
+ }
436
+ }
437
+ return label;
438
+ });
439
+ this.selectedDayLabels = computed(() => {
440
+ const selected = new Set(this.selectedDaysSignal());
441
+ return this.dayOptions().filter(option => selected.has(option.value)).map(option => option.label);
361
442
  });
362
443
  this.currentMonthDates = computed(() => {
363
444
  // Dependencies: currentMonthNumberSignal, currentYearNumberSignal, localSelectedDatesSignal
@@ -386,6 +467,8 @@ export class TzDrpContainerComponent {
386
467
  if (this.data().selectedRangeLabel) {
387
468
  this.selectedItemLabelSignal.set(this.data().selectedRangeLabel);
388
469
  }
470
+ // Pre-select incoming days
471
+ this.selectedDaysSignal.set(this.sanitizeSelectedDays(this.data().dates?.selectedDays));
389
472
  // Initialize dayjsInstance with timezone handling
390
473
  if (this.data()?.dpConfig?.timezone) {
391
474
  this.dayjsInstance = (...args) => {
@@ -1067,7 +1150,48 @@ export class TzDrpContainerComponent {
1067
1150
  this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumber(), this.currentYearNumber()));
1068
1151
  this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumber(), this.nextYearNumber()));
1069
1152
  }
1153
+ /** Drops unknown values, de-duplicates and re-orders to match dayOptions. */
1154
+ sanitizeSelectedDays(days) {
1155
+ if (!Array.isArray(days))
1156
+ return [];
1157
+ const requested = new Set();
1158
+ for (const day of days) {
1159
+ const value = Number(day);
1160
+ if (Number.isFinite(value))
1161
+ requested.add(value);
1162
+ }
1163
+ return this.dayOptions().filter(option => requested.has(option.value)).map(option => option.value);
1164
+ }
1165
+ isDaySelected(option) {
1166
+ return this.selectedDaysSignal().includes(option.value);
1167
+ }
1168
+ toggleDay(option) {
1169
+ const selected = new Set(this.selectedDaysSignal());
1170
+ if (selected.has(option.value)) {
1171
+ selected.delete(option.value);
1172
+ }
1173
+ else {
1174
+ selected.add(option.value);
1175
+ }
1176
+ // Re-project so emitted order matches the chips
1177
+ this.selectedDaysSignal.set(this.dayOptions().filter(o => selected.has(o.value)).map(o => o.value));
1178
+ }
1179
+ trackDayOption(_index, option) {
1180
+ return option.value;
1181
+ }
1182
+ dayChipAriaLabel(option) {
1183
+ return `${option.label}, ${this.isDaySelected(option) ? "selected" : "not selected"}`;
1184
+ }
1185
+ /** Attaches selectedDays only when the strip is active. */
1186
+ buildApplyPayload(dates) {
1187
+ if (!this.showDaySelection())
1188
+ return dates;
1189
+ return { ...dates, selectedDays: [...this.selectedDaysSignal()] };
1190
+ }
1070
1191
  applyDates() {
1192
+ // Guard against activation while Apply is disabled
1193
+ if (!this.canApply())
1194
+ return;
1071
1195
  // If time is enabled, append time to the dates before applying
1072
1196
  if (this.data().dpConfig.enableTime === true) {
1073
1197
  let startTime;
@@ -1115,13 +1239,14 @@ export class TzDrpContainerComponent {
1115
1239
  }
1116
1240
  const startDateWithTime = startDateOnly + ' ' + startTime;
1117
1241
  const endDateWithTime = endDateOnly + ' ' + endTime;
1118
- this.data().dateChange({
1242
+ this.data().dateChange(this.buildApplyPayload({
1243
+ ...localDates,
1119
1244
  startDate: startDateWithTime,
1120
1245
  endDate: endDateWithTime
1121
- });
1246
+ }));
1122
1247
  }
1123
1248
  else {
1124
- this.data().dateChange(this.localSelectedDatesSignal());
1249
+ this.data().dateChange(this.buildApplyPayload(this.localSelectedDatesSignal()));
1125
1250
  }
1126
1251
  }
1127
1252
  cancelDatePicker() {
@@ -1387,7 +1512,7 @@ export class TzDrpContainerComponent {
1387
1512
  static { this.ɵfac = function TzDrpContainerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TzDrpContainerComponent)(i0.ɵɵdirectiveInject(CONTAINER_DATA), i0.ɵɵdirectiveInject(i1.ToastService), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.DestroyRef)); }; }
1388
1513
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TzDrpContainerComponent, selectors: [["mis-tz-drp"]], hostBindings: function TzDrpContainerComponent_HostBindings(rf, ctx) { if (rf & 1) {
1389
1514
  i0.ɵɵlistener("keydown.esc", function TzDrpContainerComponent_keydown_esc_HostBindingHandler() { return ctx.closeOnEsc(); });
1390
- } }, decls: 41, vars: 29, consts: [["aria-label", "date range picker", "cdkTrapFocus", "", 1, "daterangepicker-container", 3, "cdkTrapFocusAutoCapture"], [1, "daterangepicker-container__view"], ["tabindex", "-1", "cdkFocusInitial", ""], ["class", "daterangepicker-container__ranges", 4, "ngIf"], [1, "datepicker__left"], [1, "daterangepicker-container__header__prabu"], ["role", "button", 1, "daterangepicker-container__arrow__icon", 3, "click", "keyup.enter", "ngClass"], ["width", "20", "height", "16", "viewBox", "0 0 20 16", "fill", "none", "xmlns", "http://www.w3.org/2000/svg"], ["d", "M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z", "fill", "#181F33"], ["role", "button", 1, "daterangepicker-container__arrow__icon", "mobile_view", 3, "click", "keyup.enter", "ngClass"], [1, "daterangepicker-container__body"], [1, "daterangepicker-container__weekdays"], ["class", "daterangepicker-container__weekday", 4, "ngFor", "ngForOf"], [1, "daterangepicker-container__days"], ["role", "gridcell", 1, "daterangepicker-container__day", 3, "ngClass"], [1, "datepicker__right"], ["role", "button", 1, "daterangepicker-container__arrow__icon", "pc_view", 3, "click", "keyup.enter", "ngClass"], ["class", "daterangepicker-container__time", 4, "ngIf"], [1, "daterangepicker__footer"], ["mis-button", "", "type", "none", "id", "mis-drp-cancel-btn", "aria-label", "cancel", 3, "click"], ["mis-button", "", "type", "primary", "id", "mis-drp-apply-btn", 3, "click", "disabled"], [1, "daterangepicker-container__ranges"], [4, "ngFor", "ngForOf"], [1, "mis-btn", 3, "click", "ngClass"], [1, "daterangepicker-container__weekday"], ["role", "gridcell", 1, "daterangepicker-container__day", 3, "click", "keyup.enter", "mouseenter", "mouseleave", "ngClass"], ["role", "button", 3, "id", "tabindex", "keydown", 4, "ngIf"], ["role", "button", 3, "keydown", "id", "tabindex"], [1, "daterangepicker-container__time"], [1, "time-section"], [1, "time-inputs"], ["type", "number", "step", "1", "placeholder", "HH", 1, "time-input", "hour-input", 3, "ngModelChange", "ngModel", "min", "max"], [1, "time-separator"], ["type", "number", "min", "0", "max", "59", "step", "1", "placeholder", "MM", 1, "time-input", "minute-input", 3, "ngModelChange", "input", "ngModel"], ["class", "am-pm-selector", 3, "ngModel", "ngModelChange", 4, "ngIf"], [1, "am-pm-selector", 3, "ngModelChange", "ngModel"], ["value", "AM"], ["value", "PM"]], template: function TzDrpContainerComponent_Template(rf, ctx) { if (rf & 1) {
1515
+ } }, decls: 42, vars: 30, consts: [["aria-label", "date range picker", "cdkTrapFocus", "", 1, "daterangepicker-container", 3, "cdkTrapFocusAutoCapture"], [1, "daterangepicker-container__view"], ["tabindex", "-1", "cdkFocusInitial", ""], ["class", "daterangepicker-container__ranges", 4, "ngIf"], [1, "datepicker__left"], [1, "daterangepicker-container__header__prabu"], ["role", "button", 1, "daterangepicker-container__arrow__icon", 3, "click", "keyup.enter", "ngClass"], ["width", "20", "height", "16", "viewBox", "0 0 20 16", "fill", "none", "xmlns", "http://www.w3.org/2000/svg"], ["d", "M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z", "fill", "#181F33"], ["role", "button", 1, "daterangepicker-container__arrow__icon", "mobile_view", 3, "click", "keyup.enter", "ngClass"], [1, "daterangepicker-container__body"], [1, "daterangepicker-container__weekdays"], ["class", "daterangepicker-container__weekday", 4, "ngFor", "ngForOf"], [1, "daterangepicker-container__days"], ["role", "gridcell", 1, "daterangepicker-container__day", 3, "ngClass"], [1, "datepicker__right"], ["role", "button", 1, "daterangepicker-container__arrow__icon", "pc_view", 3, "click", "keyup.enter", "ngClass"], ["class", "daterangepicker-container__time", 4, "ngIf"], ["class", "daterangepicker-container__day-selection", 4, "ngIf"], [1, "daterangepicker__footer"], ["mis-button", "", "type", "none", "id", "mis-drp-cancel-btn", "aria-label", "cancel", 3, "click"], ["mis-button", "", "type", "primary", "id", "mis-drp-apply-btn", 3, "click", "disabled"], [1, "daterangepicker-container__ranges"], [4, "ngFor", "ngForOf"], [1, "mis-btn", 3, "click", "ngClass"], [1, "daterangepicker-container__weekday"], ["role", "gridcell", 1, "daterangepicker-container__day", 3, "click", "keyup.enter", "mouseenter", "mouseleave", "ngClass"], ["role", "button", 3, "id", "tabindex", "keydown", 4, "ngIf"], ["role", "button", 3, "keydown", "id", "tabindex"], [1, "daterangepicker-container__time"], [1, "time-section"], [1, "time-inputs"], ["type", "number", "step", "1", "placeholder", "HH", 1, "time-input", "hour-input", 3, "ngModelChange", "ngModel", "min", "max"], [1, "time-separator"], ["type", "number", "min", "0", "max", "59", "step", "1", "placeholder", "MM", 1, "time-input", "minute-input", 3, "ngModelChange", "input", "ngModel"], ["class", "am-pm-selector", 3, "ngModel", "ngModelChange", 4, "ngIf"], [1, "am-pm-selector", 3, "ngModelChange", "ngModel"], ["value", "AM"], ["value", "PM"], [1, "daterangepicker-container__day-selection"], ["id", "mis-drp-days-label", 1, "daterangepicker-container__day-selection__label"], ["role", "group", 1, "daterangepicker-container__day-selection__chips"], ["type", "button", "class", "daterangepicker-container__day-chip", 3, "ngClass", "click", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["class", "daterangepicker-container__day-selection__hint", "aria-live", "polite", 4, "ngIf"], ["type", "button", 1, "daterangepicker-container__day-chip", 3, "click", "ngClass"], ["aria-live", "polite", 1, "daterangepicker-container__day-selection__hint"]], template: function TzDrpContainerComponent_Template(rf, ctx) { if (rf & 1) {
1391
1516
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
1392
1517
  i0.ɵɵelement(2, "div", 2);
1393
1518
  i0.ɵɵtemplate(3, TzDrpContainerComponent_div_3_Template, 5, 5, "div", 3);
@@ -1433,14 +1558,14 @@ export class TzDrpContainerComponent {
1433
1558
  i0.ɵɵelementStart(32, "div", 13);
1434
1559
  i0.ɵɵrepeaterCreate(33, TzDrpContainerComponent_For_34_Template, 2, 13, "div", 14, i0.ɵɵrepeaterTrackByIndex);
1435
1560
  i0.ɵɵelementEnd()()()();
1436
- i0.ɵɵtemplate(35, TzDrpContainerComponent_div_35_Template, 19, 10, "div", 17);
1437
- i0.ɵɵelementStart(36, "div", 18)(37, "button", 19);
1438
- i0.ɵɵlistener("click", function TzDrpContainerComponent_Template_button_click_37_listener() { return ctx.cancelDatePicker(); });
1439
- i0.ɵɵtext(38, "Cancel");
1561
+ i0.ɵɵtemplate(35, TzDrpContainerComponent_div_35_Template, 19, 10, "div", 17)(36, TzDrpContainerComponent_div_36_Template, 6, 5, "div", 18);
1562
+ i0.ɵɵelementStart(37, "div", 19)(38, "button", 20);
1563
+ i0.ɵɵlistener("click", function TzDrpContainerComponent_Template_button_click_38_listener() { return ctx.cancelDatePicker(); });
1564
+ i0.ɵɵtext(39, "Cancel");
1440
1565
  i0.ɵɵelementEnd();
1441
- i0.ɵɵelementStart(39, "button", 20);
1442
- i0.ɵɵlistener("click", function TzDrpContainerComponent_Template_button_click_39_listener() { return ctx.applyDates(); });
1443
- i0.ɵɵtext(40, "Apply");
1566
+ i0.ɵɵelementStart(40, "button", 21);
1567
+ i0.ɵɵlistener("click", function TzDrpContainerComponent_Template_button_click_40_listener() { return ctx.applyDates(); });
1568
+ i0.ɵɵtext(41, "Apply");
1444
1569
  i0.ɵɵelementEnd()()();
1445
1570
  } if (rf & 2) {
1446
1571
  let tmp_1_0;
@@ -1448,12 +1573,12 @@ export class TzDrpContainerComponent {
1448
1573
  i0.ɵɵadvance(3);
1449
1574
  i0.ɵɵproperty("ngIf", ((tmp_1_0 = ctx.data()) == null ? null : tmp_1_0.dpConfig == null ? null : tmp_1_0.dpConfig.ranges == null ? null : tmp_1_0.dpConfig.ranges.length) > 0);
1450
1575
  i0.ɵɵadvance(3);
1451
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(23, _c0, ctx.isPreviousMonthDisabled()));
1576
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(24, _c0, ctx.isPreviousMonthDisabled()));
1452
1577
  i0.ɵɵattribute("tabindex", ctx.isPreviousMonthDisabled() ? -1 : 0)("aria-disabled", ctx.isPreviousMonthDisabled() ? "true" : null)("aria-label", ctx.prevMonthAriaLabel());
1453
1578
  i0.ɵɵadvance(4);
1454
1579
  i0.ɵɵtextInterpolate2(" ", ctx.currentMonth(), " ", ctx.currentYearNumber(), " ");
1455
1580
  i0.ɵɵadvance(2);
1456
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(25, _c0, ctx.isNextMonthDisabled()));
1581
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(26, _c0, ctx.isNextMonthDisabled()));
1457
1582
  i0.ɵɵattribute("tabindex", ctx.isNextMonthDisabled() ? -1 : 0)("aria-disabled", ctx.isNextMonthDisabled() ? "true" : null)("aria-label", ctx.nextMonthAriaLabel());
1458
1583
  i0.ɵɵadvance(5);
1459
1584
  i0.ɵɵproperty("ngForOf", ctx.weekDays());
@@ -1462,7 +1587,7 @@ export class TzDrpContainerComponent {
1462
1587
  i0.ɵɵadvance(6);
1463
1588
  i0.ɵɵtextInterpolate2(" ", ctx.nextMonth(), " ", ctx.nextYearNumber(), " ");
1464
1589
  i0.ɵɵadvance();
1465
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(27, _c0, ctx.isNextMonthDisabled()));
1590
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(28, _c0, ctx.isNextMonthDisabled()));
1466
1591
  i0.ɵɵattribute("tabindex", ctx.isNextMonthDisabled() ? -1 : 0)("aria-disabled", ctx.isNextMonthDisabled() ? "true" : null)("aria-label", ctx.nextMonthAriaLabel());
1467
1592
  i0.ɵɵadvance(5);
1468
1593
  i0.ɵɵproperty("ngForOf", ctx.weekDays());
@@ -1470,14 +1595,16 @@ export class TzDrpContainerComponent {
1470
1595
  i0.ɵɵrepeater(ctx.nextMonthDates());
1471
1596
  i0.ɵɵadvance(2);
1472
1597
  i0.ɵɵproperty("ngIf", ctx.data().dpConfig.enableTime === true);
1598
+ i0.ɵɵadvance();
1599
+ i0.ɵɵproperty("ngIf", ctx.showDaySelection());
1473
1600
  i0.ɵɵadvance(4);
1474
- i0.ɵɵproperty("disabled", !ctx.isDatesValid());
1601
+ i0.ɵɵproperty("disabled", !ctx.canApply());
1475
1602
  i0.ɵɵattribute("aria-label", ctx.applyButtonAriaLabel());
1476
- } }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i3.DefaultValueAccessor, i3.NumberValueAccessor, i3.SelectControlValueAccessor, i3.NgControlStatus, i3.MinValidator, i3.MaxValidator, i3.NgModel, i4.ButtonDirective, i5.CdkTrapFocus], styles: ["[_ngcontent-%COMP%]:root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-muted-secondary: #E5E5E5;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.daterangepicker-container[_ngcontent-%COMP%]{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;overflow:hidden;-webkit-user-select:none;user-select:none}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%]{max-width:100vw;border:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]{display:flex;gap:24px;padding:16px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__ranges[_ngcontent-%COMP%]{display:flex;flex-direction:column}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .mis-btn[_ngcontent-%COMP%]{background:none;outline:none;border:none;cursor:pointer;border-radius:4px;vertical-align:middle;text-align:center;box-sizing:border-box;display:flex;align-items:center;text-decoration:none;justify-content:center;padding:10px 16px;font-size:16px;line-height:24px;background-color:transparent;color:var(--brand-primary, #0937B2)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .active-range[_ngcontent-%COMP%]{background-color:var(--brand-primary-lightest, #CBDDFB)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]{flex-direction:column;align-items:center;position:fixed;bottom:0;left:0;background-color:#fff;width:100%;max-height:68vh;overflow-y:auto;border-radius:30px;gap:24px;padding:10% 0 30%;box-shadow:0 -4px 8px 10000px #0000001f;scrollbar-width:none;-ms-overflow-style:none}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__left[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__right[_ngcontent-%COMP%]{display:flex;flex-direction:column}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__left[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__right[_ngcontent-%COMP%]{width:90%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%]{display:flex;height:32px;justify-content:space-between;align-items:center;width:100%;padding-bottom:10%}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{margin:0 auto;font-size:4vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon.disabled-month[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]:not(.disabled-month):hover{cursor:pointer;background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]:nth-child(1){transform:rotate(180deg)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]{width:7%}}@media only screen and (min-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .mobile_view[_ngcontent-%COMP%]{display:none}}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .pc_view[_ngcontent-%COMP%]{display:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%]{height:100%;width:252px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%]{width:100%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%]{width:100%;display:flex;padding-bottom:10px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%]{width:36px;height:18px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%]{margin:0 auto}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:var(--text-secondary, #6A737D)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:3vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px;color:var(--text-primary, #181F33)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]{width:36px;height:36px;display:flex;align-items:center;justify-content:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]{flex:0 0 14.2857142857%;width:14.2857142857%;height:14.2857142857%;aspect-ratio:1}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]:not(.in-range-day):not(.selected-start-day):not(.selected-end-day):not(.hover-week-row){border-radius:4px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%]{cursor:default}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%]:hover{background-color:transparent}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-start-day):not(.selected-end-day) > span[_ngcontent-%COMP%]{color:var(--text-primary, #181F33)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-start-day):not(.selected-end-day):hover{background-color:var(--brand-primary-lightest, #CBDDFB);cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:var(--text-primary, #181F33)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:3.4vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.selected-day[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.disabled-day[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-same-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:50%!important}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-same-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-start-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:20px 4px 4px 20px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-start-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-end-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:0 20px 20px 0}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-end-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .in-range-day[_ngcontent-%COMP%]:not(.disabled-day){background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .hover-week-row[_ngcontent-%COMP%]:not(.selected-start-day):not(.selected-end-day):not(.in-range-day){background-color:var(--brand-primary-lightest, #CBDDFB);border-radius:0;cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .hover-week-row[_ngcontent-%COMP%]:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-start{border-radius:20px 0 0 20px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .hover-week-row[_ngcontent-%COMP%]:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-end{border-radius:0 20px 20px 0}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%]{border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;background-color:#f8f9fa;display:flex;gap:24px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%]{flex:1}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;font-weight:600;color:#333}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input[_ngcontent-%COMP%]{width:60px;padding:8px;border:1px solid #ddd;border-radius:4px;text-align:center;font-size:14px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--brand-primary, #0937B2);box-shadow:0 0 0 2px #0937b233}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input.hour-input[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input.minute-input[_ngcontent-%COMP%]{width:50px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-separator[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:#666}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .am-pm-selector[_ngcontent-%COMP%]{padding:7.1px 12px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .am-pm-selector[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--brand-primary, #0937B2)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;gap:24px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%]{justify-content:space-evenly;padding:2% 0;background-color:var(--bg-primary, #FFFFFF);position:fixed;bottom:0;left:0;width:100%;height:8vh;border-top:2px solid var(--text-disabled, #C8CDD3)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%] #mis-drp-apply-btn[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%] #mis-drp-cancel-btn[_ngcontent-%COMP%]{width:36%;font-size:3.8vw}}"] }); }
1603
+ } }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i3.DefaultValueAccessor, i3.NumberValueAccessor, i3.SelectControlValueAccessor, i3.NgControlStatus, i3.MinValidator, i3.MaxValidator, i3.NgModel, i4.ButtonDirective, i5.CdkTrapFocus], styles: ["[_ngcontent-%COMP%]:root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-muted-secondary: #E5E5E5;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.h1[_ngcontent-%COMP%]{font-size:40px;font-weight:400;letter-spacing:0px;line-height:48px}.h2[_ngcontent-%COMP%]{font-size:32px;font-weight:400;letter-spacing:0px;line-height:40px}.h3[_ngcontent-%COMP%]{font-size:28px;font-weight:400;letter-spacing:0px;line-height:36px}.h4[_ngcontent-%COMP%]{font-size:24px;font-weight:400;letter-spacing:0px;line-height:32px}.h5-b[_ngcontent-%COMP%]{font-size:20px;font-weight:700;letter-spacing:.25px;line-height:28px}.h5[_ngcontent-%COMP%]{font-size:20px;font-weight:400;letter-spacing:.15px;line-height:28px}.h6-b[_ngcontent-%COMP%]{font-size:16px;font-weight:700;letter-spacing:0px;line-height:24px}.h6[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.p[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:180%}.h7-b[_ngcontent-%COMP%]{font-size:14px;font-weight:700;letter-spacing:.25px;line-height:20px}.h7[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-chip[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-selection__label[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.2px;line-height:20px}.h8-b[_ngcontent-%COMP%]{font-size:12px;font-weight:700;letter-spacing:.25px;line-height:18px}.h8[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-selection__hint[_ngcontent-%COMP%]{font-size:12px;font-weight:400;letter-spacing:.2px;line-height:18px}.h9[_ngcontent-%COMP%]{font-size:10px;font-weight:400;letter-spacing:0px;line-height:15px}.btn-lg-b[_ngcontent-%COMP%]{font-size:16px;font-weight:700;letter-spacing:.5px;line-height:24px}.btn-lg[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:.2px;line-height:24px}.btn-sm[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.display-1[_ngcontent-%COMP%]{font-size:48px;font-weight:400;letter-spacing:0px;line-height:56px}.display-2[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.5px;line-height:20px}.daterangepicker-container[_ngcontent-%COMP%]{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;overflow:hidden;-webkit-user-select:none;user-select:none}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%]{max-width:100vw;border:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]{display:flex;gap:24px;padding:16px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__ranges[_ngcontent-%COMP%]{display:flex;flex-direction:column}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .mis-btn[_ngcontent-%COMP%]{background:none;outline:none;border:none;cursor:pointer;border-radius:4px;vertical-align:middle;text-align:center;box-sizing:border-box;display:flex;align-items:center;text-decoration:none;justify-content:center;padding:10px 16px;font-size:16px;line-height:24px;background-color:transparent;color:var(--brand-primary, #0937B2)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .active-range[_ngcontent-%COMP%]{background-color:var(--brand-primary-lightest, #CBDDFB)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]{flex-direction:column;align-items:center;position:fixed;bottom:0;left:0;background-color:#fff;width:100%;max-height:68vh;overflow-y:auto;border-radius:30px;gap:24px;padding:10% 0 30%;box-shadow:0 -4px 8px 10000px #0000001f;scrollbar-width:none;-ms-overflow-style:none}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__left[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__right[_ngcontent-%COMP%]{display:flex;flex-direction:column}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__left[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__right[_ngcontent-%COMP%]{width:90%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%]{display:flex;height:32px;justify-content:space-between;align-items:center;width:100%;padding-bottom:10%}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{margin:0 auto;font-size:4vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon.disabled-month[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]:not(.disabled-month):hover{cursor:pointer;background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]:nth-child(1){transform:rotate(180deg)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]{width:7%}}@media only screen and (min-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .mobile_view[_ngcontent-%COMP%]{display:none}}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .pc_view[_ngcontent-%COMP%]{display:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%]{height:100%;width:252px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%]{width:100%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%]{width:100%;display:flex;padding-bottom:10px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%]{width:36px;height:18px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%]{margin:0 auto}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:var(--text-secondary, #6A737D)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:3vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px;color:var(--text-primary, #181F33)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]{width:36px;height:36px;display:flex;align-items:center;justify-content:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]{flex:0 0 14.2857142857%;width:14.2857142857%;height:14.2857142857%;aspect-ratio:1}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]:not(.in-range-day):not(.selected-start-day):not(.selected-end-day):not(.hover-week-row){border-radius:4px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%]{cursor:default}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%]:hover{background-color:transparent}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-start-day):not(.selected-end-day) > span[_ngcontent-%COMP%]{color:var(--text-primary, #181F33)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-start-day):not(.selected-end-day):hover{background-color:var(--brand-primary-lightest, #CBDDFB);cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:var(--text-primary, #181F33)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:3.4vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.selected-day[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.disabled-day[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-same-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:50%!important}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-same-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-start-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:20px 4px 4px 20px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-start-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-end-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:0 20px 20px 0}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-end-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .in-range-day[_ngcontent-%COMP%]:not(.disabled-day){background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .hover-week-row[_ngcontent-%COMP%]:not(.selected-start-day):not(.selected-end-day):not(.in-range-day){background-color:var(--brand-primary-lightest, #CBDDFB);border-radius:0;cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .hover-week-row[_ngcontent-%COMP%]:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-start{border-radius:20px 0 0 20px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .hover-week-row[_ngcontent-%COMP%]:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-end{border-radius:0 20px 20px 0}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%]{border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;background-color:#f8f9fa;display:flex;gap:24px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%]{flex:1}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;font-weight:600;color:#333}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input[_ngcontent-%COMP%]{width:60px;padding:8px;border:1px solid #ddd;border-radius:4px;text-align:center;font-size:14px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--brand-primary, #0937B2);box-shadow:0 0 0 2px #0937b233}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input.hour-input[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input.minute-input[_ngcontent-%COMP%]{width:50px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-separator[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:#666}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .am-pm-selector[_ngcontent-%COMP%]{padding:7.1px 12px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .am-pm-selector[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--brand-primary, #0937B2)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:8px 16px;padding:12px 16px;border-top:1px solid var(--border-primary, #E0E0E0);background-color:var(--bg-secondary, #FAFAFA)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-selection__label[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D);white-space:nowrap}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-selection__chips[_ngcontent-%COMP%]{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:8px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-selection__hint[_ngcontent-%COMP%]{color:var(--brand-error, #B00020);flex-basis:100%}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-chip[_ngcontent-%COMP%]{font-family:inherit;text-align:center;min-width:56px;padding:6px 16px;border:none;border-radius:999px;cursor:pointer;box-sizing:border-box;background-color:var(--border-primary, #E0E0E0);color:var(--text-primary, #181F33);transition:background-color .15s ease-in-out,color .15s ease-in-out}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-chip[_ngcontent-%COMP%]:hover:not(.is-selected){background-color:var(--text-muted-secondary, #E5E5E5)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-chip[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--brand-primary, #0937B2);outline-offset:2px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-chip.is-selected[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-chip.is-selected[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-dark, #062A99)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%]{padding:12px 16px calc(12px + 8vh)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-selection__chips[_ngcontent-%COMP%]{flex:1 1 100%}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__day-selection[_ngcontent-%COMP%] .daterangepicker-container__day-chip[_ngcontent-%COMP%]{flex:1 1 auto;min-width:44px;padding:6px 12px}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;gap:24px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%]{justify-content:space-evenly;padding:2% 0;background-color:var(--bg-primary, #FFFFFF);position:fixed;bottom:0;left:0;width:100%;height:8vh;border-top:2px solid var(--text-disabled, #C8CDD3)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%] #mis-drp-apply-btn[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%] #mis-drp-cancel-btn[_ngcontent-%COMP%]{width:36%;font-size:3.8vw}}"] }); }
1477
1604
  }
1478
1605
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TzDrpContainerComponent, [{
1479
1606
  type: Component,
1480
- args: [{ selector: "mis-tz-drp", template: "<div class=\"daterangepicker-container\" aria-label=\"date range picker\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div class=\"daterangepicker-container__view\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div *ngIf=\"data()?.dpConfig?.ranges?.length > 0\" class=\"daterangepicker-container__ranges\">\n <div *ngFor=\"let item of data()?.dpConfig?.ranges ?? []\" >\n <button\n [ngClass]=\"{'active-range' : selectedItemLabel() === item.label}\"\n (click)=\"selectRange(item)\"\n class=\"mis-btn\"\n >\n {{ item.label }}\n </button>\n </div>\n <div> <button class=\"mis-btn\" [ngClass]=\"{'active-range' : selectedItemLabel() === 'Custom Range'}\" (click)=\"resetRange()\">Custom Range</button> </div>\n </div>\n <div class=\"datepicker__left\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div\n class=\"daterangepicker-container__arrow__icon\"\n [attr.tabindex]=\"isPreviousMonthDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isPreviousMonthDisabled() ? 'true' : null\"\n role=\"button\"\n (click)=\"!isPreviousMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.PREVIOUS)\"\n (keyup.enter)=\"!isPreviousMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.PREVIOUS)\"\n [attr.aria-label]=\"prevMonthAriaLabel()\"\n [ngClass]=\"{\n 'disabled-month': isPreviousMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n <span> {{ currentMonth() }} {{ currentYearNumber() }} </span>\n <div></div>\n <!-- Button visible in mobile view -->\n <div\n class=\"daterangepicker-container__arrow__icon mobile_view\"\n [attr.tabindex]=\"isNextMonthDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isNextMonthDisabled() ? 'true' : null\"\n role='button'\n (click)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n [attr.aria-label]=\"nextMonthAriaLabel()\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n @for (day of currentMonthDates(); track $index) {\n <div\n class=\"daterangepicker-container__day\"\n role=\"gridcell\"\n [attr.aria-hidden]=\"day.date <= 0 ? 'true' : null\"\n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay),\n 'hover-week-row': isInHoveredWeek(DATE_RANGE_PANE.LEFT, day),\n 'hover-week-start': isHoveredWeekStart(DATE_RANGE_PANE.LEFT, day),\n 'hover-week-end': isHoveredWeekEnd(DATE_RANGE_PANE.LEFT, day)\n }\"\n (click)=\"selectDay(DATE_RANGE_PANE.LEFT, day)\"\n (keyup.enter)=\"selectDay(DATE_RANGE_PANE.LEFT, day)\"\n (mouseenter)=\"setHoveredWeek(DATE_RANGE_PANE.LEFT, day)\"\n (mouseleave)=\"clearHoveredWeek()\"\n >\n <span *ngIf=\"day.date > 0\"\n role=\"button\"\n [id]=\"!day.isDisabledDay ? 'mis-drp-focusable-left-' + $index : null\"\n [tabindex]=\"enableDateTabbing() ? (day.isDisabledDay ? -1 : 0) : ($index === anchorIndexLeft() ? 0 : -1)\"\n [attr.aria-label]=\"retractDayMonth(day.date, currentMonth(), currentYearNumber(), day.isSelectedStartDay, day.isSelectedEndDay)\"\n [attr.aria-disabled]=\"day.isDisabledDay ? 'true' : null\"\n (keydown)=\"onDayCellKeydown($event, DATE_RANGE_PANE.LEFT, $index)\">\n {{ day.date }}\n </span>\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"datepicker__right\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div></div>\n <span> {{ nextMonth() }} {{ nextYearNumber() }} </span>\n <div\n class=\"daterangepicker-container__arrow__icon pc_view\"\n [attr.tabindex]=\"isNextMonthDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isNextMonthDisabled() ? 'true' : null\"\n role=\"button\"\n (click)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n [attr.aria-label]=\"nextMonthAriaLabel()\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n @for (day of nextMonthDates(); track $index) {\n <div\n class=\"daterangepicker-container__day\"\n role=\"gridcell\"\n [attr.aria-hidden]=\"day.date <= 0 ? 'true' : null\"\n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay),\n 'hover-week-row': isInHoveredWeek(DATE_RANGE_PANE.RIGHT, day),\n 'hover-week-start': isHoveredWeekStart(DATE_RANGE_PANE.RIGHT, day),\n 'hover-week-end': isHoveredWeekEnd(DATE_RANGE_PANE.RIGHT, day)\n }\"\n (click)=\"selectDay(DATE_RANGE_PANE.RIGHT, day)\"\n (keyup.enter)=\"selectDay(DATE_RANGE_PANE.RIGHT, day)\"\n (mouseenter)=\"setHoveredWeek(DATE_RANGE_PANE.RIGHT, day)\"\n (mouseleave)=\"clearHoveredWeek()\"\n >\n <span *ngIf=\"day.date > 0\"\n role=\"button\"\n [id]=\"!day.isDisabledDay ? 'mis-drp-focusable-right-' + $index : null\"\n [tabindex]=\"enableDateTabbing() ? (day.isDisabledDay ? -1 : 0) : ($index === anchorIndexRight() ? 0 : -1)\"\n [attr.aria-label]=\"retractDayMonth(day.date, nextMonth(), nextYearNumber(), day.isSelectedStartDay, day.isSelectedEndDay)\"\n [attr.aria-disabled]=\"day.isDisabledDay ? 'true' : null\"\n (keydown)=\"onDayCellKeydown($event, DATE_RANGE_PANE.RIGHT, $index)\">\n {{ day.date }}\n </span>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n \n <!-- Time Selection Section -->\n <div class=\"daterangepicker-container__time\" *ngIf=\"data().dpConfig.enableTime === true\">\n <div class=\"time-section\">\n <h4>From</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? startHour() : startHour24()\" \n (ngModelChange)=\"is12HourFormat() ? startHourSignal.set($event) : startHour24Signal.set($event); onStartHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"startMinute()\" (ngModelChange)=\"startMinuteSignal.set($event)\" \n (input)=\"onStartMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"startAmPm()\" (ngModelChange)=\"startAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n \n <div class=\"time-section\">\n <h4>To</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? endHour() : endHour24()\" \n (ngModelChange)=\"is12HourFormat() ? endHourSignal.set($event) : endHour24Signal.set($event); onEndHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"endMinute()\" (ngModelChange)=\"endMinuteSignal.set($event)\" \n (input)=\"onEndMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"endAmPm()\" (ngModelChange)=\"endAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n \n <div class=\"daterangepicker__footer\">\n <button mis-button type=\"none\" id=\"mis-drp-cancel-btn\" aria-label=\"cancel\" (click)=\"cancelDatePicker()\">Cancel</button>\n <button mis-button type=\"primary\" id=\"mis-drp-apply-btn\" [attr.aria-label]=\"applyButtonAriaLabel()\" (click)=\"applyDates()\" [disabled]=\"!isDatesValid()\">Apply</button>\n </div>\n</div>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-muted-secondary: #E5E5E5;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.daterangepicker-container{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;overflow:hidden;-webkit-user-select:none;user-select:none}@media only screen and (max-width: 900px){.daterangepicker-container{max-width:100vw;border:none}}.daterangepicker-container .daterangepicker-container__view{display:flex;gap:24px;padding:16px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__ranges{display:flex;flex-direction:column}.daterangepicker-container .daterangepicker-container__view .mis-btn{background:none;outline:none;border:none;cursor:pointer;border-radius:4px;vertical-align:middle;text-align:center;box-sizing:border-box;display:flex;align-items:center;text-decoration:none;justify-content:center;padding:10px 16px;font-size:16px;line-height:24px;background-color:transparent;color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker-container__view .active-range{background-color:var(--brand-primary-lightest, #CBDDFB)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view{flex-direction:column;align-items:center;position:fixed;bottom:0;left:0;background-color:#fff;width:100%;max-height:68vh;overflow-y:auto;border-radius:30px;gap:24px;padding:10% 0 30%;box-shadow:0 -4px 8px 10000px #0000001f;scrollbar-width:none;-ms-overflow-style:none}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__view::-webkit-scrollbar{display:none}}.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{display:flex;flex-direction:column}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{width:90%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu{display:flex;height:32px;justify-content:space-between;align-items:center;width:100%;padding-bottom:10%}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{margin:0 auto;font-size:4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon.disabled-month{opacity:.5;cursor:not-allowed}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:not(.disabled-month):hover{cursor:pointer;background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:nth-child(1){transform:rotate(180deg)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{width:7%}}@media only screen and (min-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .mobile_view{display:none}}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .pc_view{display:none}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{height:100%;width:252px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{width:100%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{width:100%;display:flex;padding-bottom:10px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{width:36px;height:18px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{margin:0 auto}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:var(--text-secondary, #6A737D)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:3vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span.current-day{font-weight:700;letter-spacing:.25px;color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-wrap:wrap}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{width:36px;height:36px;display:flex;align-items:center;justify-content:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{flex:0 0 14.2857142857%;width:14.2857142857%;height:14.2857142857%;aspect-ratio:1}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day:not(.in-range-day):not(.selected-start-day):not(.selected-end-day):not(.hover-week-row){border-radius:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day{cursor:default}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day:hover{background-color:transparent}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day>span{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day)>span{color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day):hover{background-color:var(--brand-primary-lightest, #CBDDFB);cursor:pointer}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:var(--text-primary, #181F33)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:3.4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.current-day{font-weight:700;letter-spacing:.25px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.selected-day{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.disabled-day{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day{background-color:var(--brand-primary, #0937B2);border-radius:50%!important}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day{background-color:var(--brand-primary, #0937B2);border-radius:20px 4px 4px 20px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day{background-color:var(--brand-primary, #0937B2);border-radius:0 20px 20px 0}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .in-range-day:not(.disabled-day){background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .hover-week-row:not(.selected-start-day):not(.selected-end-day):not(.in-range-day){background-color:var(--brand-primary-lightest, #CBDDFB);border-radius:0;cursor:pointer}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .hover-week-row:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-start{border-radius:20px 0 0 20px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .hover-week-row:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-end{border-radius:0 20px 20px 0}.daterangepicker-container .daterangepicker-container__time{border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;background-color:#f8f9fa;display:flex;gap:24px}.daterangepicker-container .daterangepicker-container__time .time-section{flex:1}.daterangepicker-container .daterangepicker-container__time .time-section h4{margin:0 0 8px;font-size:14px;font-weight:600;color:#333}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs{display:flex;align-items:center;gap:8px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input{width:60px;padding:8px;border:1px solid #ddd;border-radius:4px;text-align:center;font-size:14px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input:focus{outline:none;border-color:var(--brand-primary, #0937B2);box-shadow:0 0 0 2px #0937b233}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.hour-input,.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.minute-input{width:50px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-separator{font-size:16px;font-weight:600;color:#666}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector{padding:7.1px 12px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector:focus{outline:none;border-color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker__footer{display:flex;justify-content:flex-end;border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;gap:24px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker__footer{justify-content:space-evenly;padding:2% 0;background-color:var(--bg-primary, #FFFFFF);position:fixed;bottom:0;left:0;width:100%;height:8vh;border-top:2px solid var(--text-disabled, #C8CDD3)}.daterangepicker-container .daterangepicker__footer #mis-drp-apply-btn,.daterangepicker-container .daterangepicker__footer #mis-drp-cancel-btn{width:36%;font-size:3.8vw}}\n"] }]
1607
+ args: [{ selector: "mis-tz-drp", template: "<div class=\"daterangepicker-container\" aria-label=\"date range picker\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div class=\"daterangepicker-container__view\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div *ngIf=\"data()?.dpConfig?.ranges?.length > 0\" class=\"daterangepicker-container__ranges\">\n <div *ngFor=\"let item of data()?.dpConfig?.ranges ?? []\" >\n <button\n [ngClass]=\"{'active-range' : selectedItemLabel() === item.label}\"\n (click)=\"selectRange(item)\"\n class=\"mis-btn\"\n >\n {{ item.label }}\n </button>\n </div>\n <div> <button class=\"mis-btn\" [ngClass]=\"{'active-range' : selectedItemLabel() === 'Custom Range'}\" (click)=\"resetRange()\">Custom Range</button> </div>\n </div>\n <div class=\"datepicker__left\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div\n class=\"daterangepicker-container__arrow__icon\"\n [attr.tabindex]=\"isPreviousMonthDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isPreviousMonthDisabled() ? 'true' : null\"\n role=\"button\"\n (click)=\"!isPreviousMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.PREVIOUS)\"\n (keyup.enter)=\"!isPreviousMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.PREVIOUS)\"\n [attr.aria-label]=\"prevMonthAriaLabel()\"\n [ngClass]=\"{\n 'disabled-month': isPreviousMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n <span> {{ currentMonth() }} {{ currentYearNumber() }} </span>\n <div></div>\n <!-- Button visible in mobile view -->\n <div\n class=\"daterangepicker-container__arrow__icon mobile_view\"\n [attr.tabindex]=\"isNextMonthDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isNextMonthDisabled() ? 'true' : null\"\n role='button'\n (click)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n [attr.aria-label]=\"nextMonthAriaLabel()\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n @for (day of currentMonthDates(); track $index) {\n <div\n class=\"daterangepicker-container__day\"\n role=\"gridcell\"\n [attr.aria-hidden]=\"day.date <= 0 ? 'true' : null\"\n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay),\n 'hover-week-row': isInHoveredWeek(DATE_RANGE_PANE.LEFT, day),\n 'hover-week-start': isHoveredWeekStart(DATE_RANGE_PANE.LEFT, day),\n 'hover-week-end': isHoveredWeekEnd(DATE_RANGE_PANE.LEFT, day)\n }\"\n (click)=\"selectDay(DATE_RANGE_PANE.LEFT, day)\"\n (keyup.enter)=\"selectDay(DATE_RANGE_PANE.LEFT, day)\"\n (mouseenter)=\"setHoveredWeek(DATE_RANGE_PANE.LEFT, day)\"\n (mouseleave)=\"clearHoveredWeek()\"\n >\n <span *ngIf=\"day.date > 0\"\n role=\"button\"\n [id]=\"!day.isDisabledDay ? 'mis-drp-focusable-left-' + $index : null\"\n [tabindex]=\"enableDateTabbing() ? (day.isDisabledDay ? -1 : 0) : ($index === anchorIndexLeft() ? 0 : -1)\"\n [attr.aria-label]=\"retractDayMonth(day.date, currentMonth(), currentYearNumber(), day.isSelectedStartDay, day.isSelectedEndDay)\"\n [attr.aria-disabled]=\"day.isDisabledDay ? 'true' : null\"\n (keydown)=\"onDayCellKeydown($event, DATE_RANGE_PANE.LEFT, $index)\">\n {{ day.date }}\n </span>\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"datepicker__right\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div></div>\n <span> {{ nextMonth() }} {{ nextYearNumber() }} </span>\n <div\n class=\"daterangepicker-container__arrow__icon pc_view\"\n [attr.tabindex]=\"isNextMonthDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isNextMonthDisabled() ? 'true' : null\"\n role=\"button\"\n (click)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth(MONTH_NAV_DIRECTION.NEXT)\"\n [attr.aria-label]=\"nextMonthAriaLabel()\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n @for (day of nextMonthDates(); track $index) {\n <div\n class=\"daterangepicker-container__day\"\n role=\"gridcell\"\n [attr.aria-hidden]=\"day.date <= 0 ? 'true' : null\"\n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay),\n 'hover-week-row': isInHoveredWeek(DATE_RANGE_PANE.RIGHT, day),\n 'hover-week-start': isHoveredWeekStart(DATE_RANGE_PANE.RIGHT, day),\n 'hover-week-end': isHoveredWeekEnd(DATE_RANGE_PANE.RIGHT, day)\n }\"\n (click)=\"selectDay(DATE_RANGE_PANE.RIGHT, day)\"\n (keyup.enter)=\"selectDay(DATE_RANGE_PANE.RIGHT, day)\"\n (mouseenter)=\"setHoveredWeek(DATE_RANGE_PANE.RIGHT, day)\"\n (mouseleave)=\"clearHoveredWeek()\"\n >\n <span *ngIf=\"day.date > 0\"\n role=\"button\"\n [id]=\"!day.isDisabledDay ? 'mis-drp-focusable-right-' + $index : null\"\n [tabindex]=\"enableDateTabbing() ? (day.isDisabledDay ? -1 : 0) : ($index === anchorIndexRight() ? 0 : -1)\"\n [attr.aria-label]=\"retractDayMonth(day.date, nextMonth(), nextYearNumber(), day.isSelectedStartDay, day.isSelectedEndDay)\"\n [attr.aria-disabled]=\"day.isDisabledDay ? 'true' : null\"\n (keydown)=\"onDayCellKeydown($event, DATE_RANGE_PANE.RIGHT, $index)\">\n {{ day.date }}\n </span>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n \n <!-- Time Selection Section -->\n <div class=\"daterangepicker-container__time\" *ngIf=\"data().dpConfig.enableTime === true\">\n <div class=\"time-section\">\n <h4>From</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? startHour() : startHour24()\" \n (ngModelChange)=\"is12HourFormat() ? startHourSignal.set($event) : startHour24Signal.set($event); onStartHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"startMinute()\" (ngModelChange)=\"startMinuteSignal.set($event)\" \n (input)=\"onStartMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"startAmPm()\" (ngModelChange)=\"startAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n \n <div class=\"time-section\">\n <h4>To</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? endHour() : endHour24()\" \n (ngModelChange)=\"is12HourFormat() ? endHourSignal.set($event) : endHour24Signal.set($event); onEndHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"endMinute()\" (ngModelChange)=\"endMinuteSignal.set($event)\" \n (input)=\"onEndMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"endAmPm()\" (ngModelChange)=\"endAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n \n <!-- Weekday Selection Section -->\n <div class=\"daterangepicker-container__day-selection\" *ngIf=\"showDaySelection()\">\n <span class=\"daterangepicker-container__day-selection__label\" id=\"mis-drp-days-label\">\n {{ daySelectionLabel() }}\n </span>\n <div\n class=\"daterangepicker-container__day-selection__chips\"\n role=\"group\"\n [attr.aria-label]=\"daySelectionGroupAriaLabel()\"\n >\n <button\n *ngFor=\"let option of dayOptions(); trackBy: trackDayOption\"\n type=\"button\"\n class=\"daterangepicker-container__day-chip\"\n [ngClass]=\"{ 'is-selected': isDaySelected(option) }\"\n [attr.aria-pressed]=\"isDaySelected(option)\"\n [attr.aria-label]=\"dayChipAriaLabel(option)\"\n (click)=\"toggleDay(option)\"\n >\n {{ option.label }}\n </button>\n </div>\n <span\n class=\"daterangepicker-container__day-selection__hint\"\n *ngIf=\"showDaySelectionHint()\"\n aria-live=\"polite\"\n >\n Select at least one day\n </span>\n </div>\n\n <div class=\"daterangepicker__footer\">\n <button mis-button type=\"none\" id=\"mis-drp-cancel-btn\" aria-label=\"cancel\" (click)=\"cancelDatePicker()\">Cancel</button>\n <button mis-button type=\"primary\" id=\"mis-drp-apply-btn\" [attr.aria-label]=\"applyButtonAriaLabel()\" (click)=\"applyDates()\" [disabled]=\"!canApply()\">Apply</button>\n </div>\n</div>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-muted-secondary: #E5E5E5;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.h1{font-size:40px;font-weight:400;letter-spacing:0px;line-height:48px}.h2{font-size:32px;font-weight:400;letter-spacing:0px;line-height:40px}.h3{font-size:28px;font-weight:400;letter-spacing:0px;line-height:36px}.h4{font-size:24px;font-weight:400;letter-spacing:0px;line-height:32px}.h5-b{font-size:20px;font-weight:700;letter-spacing:.25px;line-height:28px}.h5{font-size:20px;font-weight:400;letter-spacing:.15px;line-height:28px}.h6-b{font-size:16px;font-weight:700;letter-spacing:0px;line-height:24px}.h6{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.p{font-size:16px;font-weight:400;letter-spacing:0px;line-height:180%}.h7-b{font-size:14px;font-weight:700;letter-spacing:.25px;line-height:20px}.h7,.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-chip,.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-selection__label{font-size:14px;font-weight:400;letter-spacing:.2px;line-height:20px}.h8-b{font-size:12px;font-weight:700;letter-spacing:.25px;line-height:18px}.h8,.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-selection__hint{font-size:12px;font-weight:400;letter-spacing:.2px;line-height:18px}.h9{font-size:10px;font-weight:400;letter-spacing:0px;line-height:15px}.btn-lg-b{font-size:16px;font-weight:700;letter-spacing:.5px;line-height:24px}.btn-lg{font-size:16px;font-weight:400;letter-spacing:.2px;line-height:24px}.btn-sm{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.display-1{font-size:48px;font-weight:400;letter-spacing:0px;line-height:56px}.display-2{font-size:14px;font-weight:400;letter-spacing:.5px;line-height:20px}.daterangepicker-container{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;overflow:hidden;-webkit-user-select:none;user-select:none}@media only screen and (max-width: 900px){.daterangepicker-container{max-width:100vw;border:none}}.daterangepicker-container .daterangepicker-container__view{display:flex;gap:24px;padding:16px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__ranges{display:flex;flex-direction:column}.daterangepicker-container .daterangepicker-container__view .mis-btn{background:none;outline:none;border:none;cursor:pointer;border-radius:4px;vertical-align:middle;text-align:center;box-sizing:border-box;display:flex;align-items:center;text-decoration:none;justify-content:center;padding:10px 16px;font-size:16px;line-height:24px;background-color:transparent;color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker-container__view .active-range{background-color:var(--brand-primary-lightest, #CBDDFB)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view{flex-direction:column;align-items:center;position:fixed;bottom:0;left:0;background-color:#fff;width:100%;max-height:68vh;overflow-y:auto;border-radius:30px;gap:24px;padding:10% 0 30%;box-shadow:0 -4px 8px 10000px #0000001f;scrollbar-width:none;-ms-overflow-style:none}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__view::-webkit-scrollbar{display:none}}.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{display:flex;flex-direction:column}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{width:90%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu{display:flex;height:32px;justify-content:space-between;align-items:center;width:100%;padding-bottom:10%}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{margin:0 auto;font-size:4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon.disabled-month{opacity:.5;cursor:not-allowed}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:not(.disabled-month):hover{cursor:pointer;background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:nth-child(1){transform:rotate(180deg)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{width:7%}}@media only screen and (min-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .mobile_view{display:none}}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .pc_view{display:none}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{height:100%;width:252px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{width:100%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{width:100%;display:flex;padding-bottom:10px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{width:36px;height:18px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{margin:0 auto}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:var(--text-secondary, #6A737D)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:3vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span.current-day{font-weight:700;letter-spacing:.25px;color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-wrap:wrap}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{width:36px;height:36px;display:flex;align-items:center;justify-content:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{flex:0 0 14.2857142857%;width:14.2857142857%;height:14.2857142857%;aspect-ratio:1}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day:not(.in-range-day):not(.selected-start-day):not(.selected-end-day):not(.hover-week-row){border-radius:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day{cursor:default}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day:hover{background-color:transparent}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day>span{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day)>span{color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day):hover{background-color:var(--brand-primary-lightest, #CBDDFB);cursor:pointer}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:var(--text-primary, #181F33)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:3.4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.current-day{font-weight:700;letter-spacing:.25px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.selected-day{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.disabled-day{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day{background-color:var(--brand-primary, #0937B2);border-radius:50%!important}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day{background-color:var(--brand-primary, #0937B2);border-radius:20px 4px 4px 20px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day{background-color:var(--brand-primary, #0937B2);border-radius:0 20px 20px 0}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .in-range-day:not(.disabled-day){background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .hover-week-row:not(.selected-start-day):not(.selected-end-day):not(.in-range-day){background-color:var(--brand-primary-lightest, #CBDDFB);border-radius:0;cursor:pointer}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .hover-week-row:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-start{border-radius:20px 0 0 20px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .hover-week-row:not(.selected-start-day):not(.selected-end-day):not(.in-range-day).hover-week-end{border-radius:0 20px 20px 0}.daterangepicker-container .daterangepicker-container__time{border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;background-color:#f8f9fa;display:flex;gap:24px}.daterangepicker-container .daterangepicker-container__time .time-section{flex:1}.daterangepicker-container .daterangepicker-container__time .time-section h4{margin:0 0 8px;font-size:14px;font-weight:600;color:#333}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs{display:flex;align-items:center;gap:8px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input{width:60px;padding:8px;border:1px solid #ddd;border-radius:4px;text-align:center;font-size:14px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input:focus{outline:none;border-color:var(--brand-primary, #0937B2);box-shadow:0 0 0 2px #0937b233}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.hour-input,.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.minute-input{width:50px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-separator{font-size:16px;font-weight:600;color:#666}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector{padding:7.1px 12px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector:focus{outline:none;border-color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker-container__day-selection{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:8px 16px;padding:12px 16px;border-top:1px solid var(--border-primary, #E0E0E0);background-color:var(--bg-secondary, #FAFAFA)}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-selection__label{color:var(--text-secondary, #6A737D);white-space:nowrap}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-selection__chips{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:8px}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-selection__hint{color:var(--brand-error, #B00020);flex-basis:100%}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-chip{font-family:inherit;text-align:center;min-width:56px;padding:6px 16px;border:none;border-radius:999px;cursor:pointer;box-sizing:border-box;background-color:var(--border-primary, #E0E0E0);color:var(--text-primary, #181F33);transition:background-color .15s ease-in-out,color .15s ease-in-out}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-chip:hover:not(.is-selected){background-color:var(--text-muted-secondary, #E5E5E5)}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-chip:focus-visible{outline:2px solid var(--brand-primary, #0937B2);outline-offset:2px}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-chip.is-selected{background-color:var(--brand-primary, #0937B2);color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-chip.is-selected:hover{background-color:var(--brand-primary-dark, #062A99)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__day-selection{padding:12px 16px calc(12px + 8vh)}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-selection__chips{flex:1 1 100%}.daterangepicker-container .daterangepicker-container__day-selection .daterangepicker-container__day-chip{flex:1 1 auto;min-width:44px;padding:6px 12px}}.daterangepicker-container .daterangepicker__footer{display:flex;justify-content:flex-end;border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;gap:24px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker__footer{justify-content:space-evenly;padding:2% 0;background-color:var(--bg-primary, #FFFFFF);position:fixed;bottom:0;left:0;width:100%;height:8vh;border-top:2px solid var(--text-disabled, #C8CDD3)}.daterangepicker-container .daterangepicker__footer #mis-drp-apply-btn,.daterangepicker-container .daterangepicker__footer #mis-drp-cancel-btn{width:36%;font-size:3.8vw}}\n"] }]
1481
1608
  }], () => [{ type: undefined, decorators: [{
1482
1609
  type: Inject,
1483
1610
  args: [CONTAINER_DATA]
@@ -1486,4 +1613,4 @@ export class TzDrpContainerComponent {
1486
1613
  args: ["keydown.esc"]
1487
1614
  }] }); })();
1488
1615
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TzDrpContainerComponent, { className: "TzDrpContainerComponent" }); })();
1489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixjQUFjLEdBS2YsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR3BDLE9BQU8sS0FBZ0IsTUFBTSxPQUFPLENBQUM7QUFDckMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ3RCdkMs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QztZQVM5QyxjQUVFO1lBRkYsZ0ZBRUU7O1lBWWtFLGVBQWE7WUFBYix3Q0FBYTtZQUtqRixlQStCQztZQS9CRCxjQUFBLG9CQUFnQixDQStCZjtZQU9xQyxlQUF5QztZQUF6Qyw4REFBeUM7WUFvRXNDLGVBQTRCO1lBQTVCLDhDQUE0Qjs7OztpRkR0TTlJLHVCQUF1QjtjQUxuQyxTQUFTOzJCQUNFLFlBQVk7O3NCQXlMbkIsTUFBTTt1QkFBQyxjQUFjO2lHQXNFeEIsVUFBVTtrQkFEVCxZQUFZO21CQUFDLGFBQWE7O2tGQTFQaEIsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0LCBzaWduYWwsIGNvbXB1dGVkLCBSZW5kZXJlcjIsIERlc3Ryb3lSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCI7XG5pbXBvcnQgeyB0aW1lciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICBDQUxFTkRBUl9BUlJPV19LRVksXG4gIENPTFVNTl9OQVZfRElSRUNUSU9OLFxuICBDT05UQUlORVJfREFUQSxcbiAgREFURV9GT1JNQVQsXG4gIElTT19EQVRFX0ZPUk1BVCxcbiAgREFURV9SQU5HRV9QQU5FLFxuICBNT05USF9OQVZfRElSRUNUSU9OLFxuICBTRUxFQ1RJT05fTU9ERSxcbiAgdHlwZSBDYWxlbmRhckFycm93S2V5LFxuICB0eXBlIENvbHVtbk5hdkRpcmVjdGlvbixcbiAgdHlwZSBEYXRlUmFuZ2VQYW5lLFxuICB0eXBlIE1vbnRoTmF2RGlyZWN0aW9uLFxufSBmcm9tIFwiLi4vZGF0ZXJhbmdlcGlja2VyLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgSUN1cnJlbnRNb250aCwgSUN1cnJlbnRNb250aERhdGVzLCBJRGF0ZVBpY2tlckRhdGEsIElXZWVrRGF5LCBJU2VsZWN0ZWREYXRlc0NvbmZpZywgUmFuZ2VJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9kcnAtY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb250aCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9hc3RcIjtcblxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXInO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZSc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuJztcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xuZGF5anMuZXh0ZW5kKHV0Yyk7XG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IERBVEVfUkFOR0VfUEFORSA9IERBVEVfUkFOR0VfUEFORTtcbiAgcmVhZG9ubHkgTU9OVEhfTkFWX0RJUkVDVElPTiA9IE1PTlRIX05BVl9ESVJFQ1RJT047XG4gIHJlYWRvbmx5IFNFTEVDVElPTl9NT0RFID0gU0VMRUNUSU9OX01PREU7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NX1JBTkdFX0xBQkVMID0gXCJDdXN0b20gUmFuZ2VcIjtcbiAgcmVhZG9ubHkgZGF0YSA9IHNpZ25hbDxJRGF0ZVBpY2tlckRhdGE+KHRoaXMuaW5qZWN0ZWREYXRhKTtcbiAgcHJpdmF0ZSBkYXlqc0luc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gZGF5anMoLi4uYXJncyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIGRhdGUgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0IHdpdGggZmFsbGJhY2tcbiAgICovXG4gIHByaXZhdGUgcGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBkYXlqcy5EYXlqcyB7XG4gICAgaWYgKCFkYXRlU3RyaW5nIHx8IGRhdGVTdHJpbmcgPT09ICdJbnZhbGlkIERhdGUnIHx8IGRhdGVTdHJpbmcgPT09ICd1bmRlZmluZWQnIHx8IGRhdGVTdHJpbmcgPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuIGRheWpzKCdpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QgdHJ5IHRoZSBjb25maWd1cmVkIGZvcm1hdFxuICAgIGNvbnN0IGNvbmZpZ3VyZWRGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZz8uZm9ybWF0O1xuICAgIGlmIChjb25maWd1cmVkRm9ybWF0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBkYXlqcyhkYXRlU3RyaW5nLCBjb25maWd1cmVkRm9ybWF0KTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDb250aW51ZSB0byBmYWxsYmFjayBmb3JtYXRzXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gY29tbW9uIGZvcm1hdHMgaWYgY29uZmlndXJlZCBmb3JtYXQgZmFpbHNcbiAgICBjb25zdCBmYWxsYmFja0Zvcm1hdHMgPSBbXG4gICAgICAnREQvTU1NL1lZWVknLFxuICAgICAgJ0REL01NL1lZWVknLFxuICAgICAgJ0RELU1NTS1ZWVlZJyxcbiAgICAgICdERC1NTS1ZWVlZJyxcbiAgICAgIElTT19EQVRFX0ZPUk1BVFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmYWxsYmFja0Zvcm1hdHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IGRheWpzKGRhdGVTdHJpbmcsIGZvcm1hdCk7XG4gICAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBmb3JtYXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgZm9ybWF0cyBmYWlsLCB0cnkgcGFyc2luZyB3aXRob3V0IGZvcm1hdCAobGV0IGRheWpzIGd1ZXNzKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBkYXlqcyhkYXRlU3RyaW5nKTtcbiAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIGRhdGUgd2l0aCBhbnkgZm9ybWF0OicsIGRhdGVTdHJpbmcsIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5anMoJ2ludmFsaWQnKTtcbiAgfVxuICBwcml2YXRlIHJhd1dlZWtEYXlzOiBzdHJpbmdbXSA9IFtcIlNVTlwiLCBcIk1PTlwiLCBcIlRVRVwiLCBcIldFRFwiLCBcIlRIVVwiLCBcIkZSSVwiLCBcIlNBVFwiXTtcbiAgXG4gIC8vIFNpZ25hbC1iYXNlZCBzdGF0ZSBtYW5hZ2VtZW50XG4gIHByaXZhdGUgcmVhZG9ubHkgd2Vla0RheXNTaWduYWwgPSBzaWduYWw8SVdlZWtEYXlbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aE51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aFNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoPihcIkphbnVhcnlcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFllYXJOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhEYXRlc1NpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXNbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRNb250aE51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRNb250aFNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoPihcIkphbnVhcnlcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV4dFllYXJOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXh0TW9udGhEYXRlc1NpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXNbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc05leHRNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3Rpb25TdGFydGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwgPSBzaWduYWw8SVNlbGVjdGVkRGF0ZXNDb25maWc+KHsgc3RhcnREYXRlOiBudWxsLCBlbmREYXRlOiBudWxsIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzRGF0ZXNWYWxpZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwgPSBzaWduYWw8c3RyaW5nPih0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG92ZXJlZFdlZWtTdGFydFNpZ25hbCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBUaW1lIHNlbGVjdGlvbiBzaWduYWxzXG4gIHJlYWRvbmx5IHN0YXJ0SG91clNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDEyKTtcbiAgcmVhZG9ubHkgc3RhcnRNaW51dGVTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgc3RhcnRBbVBtU2lnbmFsID0gc2lnbmFsPHN0cmluZz4oJ0FNJyk7XG4gIHJlYWRvbmx5IGVuZEhvdXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigxMik7XG4gIHJlYWRvbmx5IGVuZE1pbnV0ZVNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBlbmRBbVBtU2lnbmFsID0gc2lnbmFsPHN0cmluZz4oJ0FNJyk7XG4gIHJlYWRvbmx5IHN0YXJ0SG91cjI0U2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMTIpO1xuICByZWFkb25seSBlbmRIb3VyMjRTaWduYWwgPSBzaWduYWw8bnVtYmVyPigxMik7XG4gIFxuICAvLyBDb21wdXRlZCBwcm9wZXJ0aWVzIGZvciB0ZW1wbGF0ZSBhY2Nlc3NcbiAgd2Vla0RheXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLndlZWtEYXlzU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGhOdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgY3VycmVudE1vbnRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50TW9udGhTaWduYWwoKSk7XG4gIGN1cnJlbnRZZWFyTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKTtcbiAgbmV4dE1vbnRoTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gIG5leHRNb250aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubmV4dE1vbnRoU2lnbmFsKCkpO1xuICBuZXh0WWVhck51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgaXNOZXh0TW9udGhEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgc2VsZWN0aW9uU3RhcnRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbCgpKTtcbiAgbG9jYWxTZWxlY3RlZERhdGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKSk7XG4gIGlzRGF0ZXNWYWxpZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsKCkpO1xuICBzZWxlY3RlZEl0ZW1MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwoKSk7XG4gIGlzV2Vla2x5TW9kZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YSgpLmRwQ29uZmlnPy5zZWxlY3Rpb25Nb2RlID09PSBTRUxFQ1RJT05fTU9ERS5XRUVLTFkpO1xuICBlbmFibGVEYXRlVGFiYmluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YSgpLmVuYWJsZURhdGVUYWJiaW5nICE9PSBmYWxzZSk7XG5cbiAgcmVhZG9ubHkgYW5jaG9ySW5kZXhMZWZ0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGVzID0gdGhpcy5jdXJyZW50TW9udGhEYXRlcygpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlO1xuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGUpO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJzZWQuaXNWYWxpZCgpICYmXG4gICAgICAgIHBhcnNlZC55ZWFyKCkgPT09IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSAmJlxuICAgICAgICBwYXJzZWQubW9udGgoKSA9PT0gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGRhdGVzLmZpbmRJbmRleChkID0+IGQuZGF0ZSA9PT0gcGFyc2VkLmRhdGUoKSAmJiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRlcy5maW5kSW5kZXgoZCA9PiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICB9KTtcblxuICByZWFkb25seSBhbmNob3JJbmRleFJpZ2h0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGVzID0gdGhpcy5uZXh0TW9udGhEYXRlcygpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlO1xuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGUpO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJzZWQuaXNWYWxpZCgpICYmXG4gICAgICAgIHBhcnNlZC55ZWFyKCkgPT09IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSAmJlxuICAgICAgICBwYXJzZWQubW9udGgoKSA9PT0gdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGRhdGVzLmZpbmRJbmRleChkID0+IGQuZGF0ZSA9PT0gcGFyc2VkLmRhdGUoKSAmJiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRlcy5maW5kSW5kZXgoZCA9PiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICB9KTtcblxuICByZWFkb25seSBwcmV2TW9udGhBcmlhTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcHJldiA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpLnN1YnRyYWN0KDEsICdtb250aCcpO1xuICAgIHJldHVybiBgUHJldmlvdXMgbW9udGgsIENsaWNrIHRvIFNlbGVjdCAke2dldE1vbnRoKHByZXYubW9udGgoKSl9ICR7cHJldi55ZWFyKCl9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbmV4dE1vbnRoQXJpYUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkYXlqcygpLnllYXIodGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKS5tb250aCh0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKS5hZGQoMSwgJ21vbnRoJyk7XG4gICAgcmV0dXJuIGBOZXh0IG1vbnRoLCBDbGljayB0byBTZWxlY3QgJHtnZXRNb250aChuZXh0Lm1vbnRoKCkpfSAke25leHQueWVhcigpfWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFwcGx5QnV0dG9uQXJpYUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhcnREYXRlLCBlbmREYXRlIH0gPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpO1xuICAgIGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkgcmV0dXJuIGBBcHBseSwgU2VsZWN0ZWQgZGF0ZSByYW5nZSBmcm9tICR7c3RhcnREYXRlfSB0byAke2VuZERhdGV9YDtcbiAgICByZXR1cm4gJ0FwcGx5JztcbiAgfSk7XG5cbiAgY3VycmVudE1vbnRoRGF0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gRGVwZW5kZW5jaWVzOiBjdXJyZW50TW9udGhOdW1iZXJTaWduYWwsIGN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLCBsb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWxcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIH0pO1xuICBuZXh0TW9udGhEYXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIC8vIERlcGVuZGVuY2llczogbmV4dE1vbnRoTnVtYmVyU2lnbmFsLCBuZXh0WWVhck51bWJlclNpZ25hbCwgbG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIH0pO1xuXG5cbiAgLy8gVGltZSBmdW5jdGlvbmFsaXR5IGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgc3RhcnRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGFydEhvdXJTaWduYWwoKSk7XG4gIHN0YXJ0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGFydE1pbnV0ZVNpZ25hbCgpKTtcbiAgc3RhcnRBbVBtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGFydEFtUG1TaWduYWwoKSk7XG4gIGVuZEhvdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVuZEhvdXJTaWduYWwoKSk7XG4gIGVuZE1pbnV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZW5kTWludXRlU2lnbmFsKCkpO1xuICBlbmRBbVBtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lbmRBbVBtU2lnbmFsKCkpO1xuICBzdGFydEhvdXIyNCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRIb3VyMjRTaWduYWwoKSk7XG4gIGVuZEhvdXIyNCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZW5kSG91cjI0U2lnbmFsKCkpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ09OVEFJTkVSX0RBVEEpIHByaXZhdGUgaW5qZWN0ZWREYXRhOiBJRGF0ZVBpY2tlckRhdGEsXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWZcbiAgKSB7XG4gICAgdGhpcy5kYXRhID0gc2lnbmFsPElEYXRlUGlja2VyRGF0YT4odGhpcy5pbmplY3RlZERhdGEpOyBcbiAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQodGhpcy5kYXRhKCkuZGF0ZXMpO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldChmYWxzZSk7XG4gICAgaWYgKHRoaXMuZGF0YSgpLmRhdGVzLnN0YXJ0RGF0ZSAmJiB0aGlzLmRhdGEoKS5kYXRlcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLmlzRGF0ZXNWYWxpZFNpZ25hbC5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0ZWRJdGVtTGFiZWwgZnJvbSBkYXRhLnNlbGVjdGVkUmFuZ2VMYWJlbCBpZiBhdmFpbGFibGVcbiAgICBpZiAodGhpcy5kYXRhKCkuc2VsZWN0ZWRSYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhYmVsU2lnbmFsLnNldCh0aGlzLmRhdGEoKS5zZWxlY3RlZFJhbmdlTGFiZWwpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGRheWpzSW5zdGFuY2Ugd2l0aCB0aW1lem9uZSBoYW5kbGluZ1xuICAgIGlmICh0aGlzLmRhdGEoKT8uZHBDb25maWc/LnRpbWV6b25lKSB7XG4gICAgICB0aGlzLmRheWpzSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBkYXlqcy50eihhcmdzWzBdLCBhcmdzWzFdIHx8ICdERC9NTS9ZWVlZJywgdGhpcy5kYXRhKCkuZHBDb25maWcudGltZXpvbmUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgcGFyc2luZyBkYXRlIHdpdGggdGltZXpvbmU6JywgZXJyb3IsICdhcmdzOicsIGFyZ3MpO1xuICAgICAgICAgIHJldHVybiBkYXlqcyhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgc2FmZWx5IHVzaW5nIHNpZ25hbHNcbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5kYXlqc0luc3RhbmNlKCkubW9udGgoKSk7XG4gICAgdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXMuZGF5anNJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmRheWpzSW5zdGFuY2UoKS55ZWFyKCkpO1xuICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuZGF5anNJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLnllYXIoKSk7XG4gICAgdGhpcy53ZWVrRGF5c1NpZ25hbC5zZXQodGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5kYXlqc0luc3RhbmNlKCkuZGF5KCkgPT09IGluZGV4XG4gICAgfSkpKTtcbiAgICBcbiAgICBpZiAoIXRoaXMuZGF0YSgpPy5kcENvbmZpZz8uZm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGEoKS5kcENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhKCkuZHBDb25maWcsXG4gICAgICAgIGZvcm1hdDogREFURV9GT1JNQVRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNhbGVuZGFyIGZyb20gaW5pdGlhbCBzZWxlY3RlZCBkYXRlc1xuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJGcm9tU2VsZWN0ZWREYXRlcygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplVGltZVZhbHVlcygpO1xuXG4gICAgaWYodGhpcy5kYXRhKCk/LnNob3dQcmV2TW9udGggJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpe1xuICAgICAgdGhpcy5uYXZpZ2F0ZU1vbnRoKE1PTlRIX05BVl9ESVJFQ1RJT04uUFJFVklPVVMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55LCBpc1N0YXJ0PzogYm9vbGVhbiwgaXNFbmQ/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgbGFiZWwgPSBgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn1gO1xuICAgIGlmIChpc1N0YXJ0ICYmIGlzRW5kKSBsYWJlbCArPSAnLCBzZWxlY3RlZCBkYXRlJztcbiAgICBlbHNlIGlmIChpc1N0YXJ0KSBsYWJlbCArPSAnLCBzZWxlY3RlZCBzdGFydCBkYXRlJztcbiAgICBlbHNlIGlmIChpc0VuZCkgbGFiZWwgKz0gJywgc2VsZWN0ZWQgZW5kIGRhdGUnO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgb25EYXlDZWxsS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgcGFuZTogRGF0ZVJhbmdlUGFuZSwgZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXkgYXMgQ2FsZW5kYXJBcnJvd0tleTtcblxuICAgIGNvbnN0IGFsbG93ZWRLZXlzOiBDYWxlbmRhckFycm93S2V5W10gPSBbQ0FMRU5EQVJfQVJST1dfS0VZLkxFRlQsIENBTEVOREFSX0FSUk9XX0tFWS5SSUdIVCwgQ0FMRU5EQVJfQVJST1dfS0VZLlVQLCBDQUxFTkRBUl9BUlJPV19LRVkuRE9XTl07XG4gICAgaWYgKCFhbGxvd2VkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IGxlZnREYXRlcyA9IHRoaXMuY3VycmVudE1vbnRoRGF0ZXMoKTtcbiAgICBjb25zdCByaWdodERhdGVzID0gdGhpcy5uZXh0TW9udGhEYXRlcygpO1xuXG4gICAgaWYgKGtleSA9PT0gQ0FMRU5EQVJfQVJST1dfS0VZLkRPV04gJiYgcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgJiYgdGhpcy5pc0xhc3RSb3coZnJvbUluZGV4LCBsZWZ0RGF0ZXMpKSB7XG4gICAgICBjb25zdCBjb2wgPSBmcm9tSW5kZXggJSA3O1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5maW5kU2VsZWN0YWJsZUluQ29sdW1uKHJpZ2h0RGF0ZXMsIGNvbCwgQ09MVU1OX05BVl9ESVJFQ1RJT04uRk9SV0FSRCk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLlJJR0hULCBpZHgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IENBTEVOREFSX0FSUk9XX0tFWS5VUCAmJiBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuUklHSFQgJiYgdGhpcy5pc0ZpcnN0Um93KGZyb21JbmRleCkpIHtcbiAgICAgIGNvbnN0IGNvbCA9IGZyb21JbmRleCAlIDc7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmZpbmRTZWxlY3RhYmxlSW5Db2x1bW4obGVmdERhdGVzLCBjb2wsIENPTFVNTl9OQVZfRElSRUNUSU9OLkJBQ0tXQVJEKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICB0aGlzLmZvY3VzRHJwQ2VsbChEQVRFX1JBTkdFX1BBTkUuTEVGVCwgaWR4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlcyA9IHBhbmUgPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gbGVmdERhdGVzIDogcmlnaHREYXRlcztcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5maW5kTmV4dEZvY3VzYWJsZURheUluZGV4KGZyb21JbmRleCwga2V5LCBkYXRlcyk7XG4gICAgaWYgKG5leHQgPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c0RycENlbGwocGFuZSwgbmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTmV4dEZvY3VzYWJsZURheUluZGV4KGZyb21JbmRleDogbnVtYmVyLCBrZXk6IENhbGVuZGFyQXJyb3dLZXksIGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSk6IG51bWJlciB7XG4gICAgbGV0IHN0ZXA6IG51bWJlcjtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSBDQUxFTkRBUl9BUlJPV19LRVkuTEVGVDpcbiAgICAgICAgc3RlcCA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ0FMRU5EQVJfQVJST1dfS0VZLlJJR0hUOlxuICAgICAgICBzdGVwID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENBTEVOREFSX0FSUk9XX0tFWS5VUDpcbiAgICAgICAgc3RlcCA9IC03O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ0FMRU5EQVJfQVJST1dfS0VZLkRPV046XG4gICAgICAgIHN0ZXAgPSA3O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgaSA9IGZyb21JbmRleCArIHN0ZXA7XG4gICAgd2hpbGUgKGkgPj0gMCAmJiBpIDwgZGF0ZXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5pc0ZvY3VzYWJsZShkYXRlc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgICBpICs9IHN0ZXA7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEcnBDZWxsKHBhbmU6IERhdGVSYW5nZVBhbmUsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9XG4gICAgICBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVFxuICAgICAgICA/IGBtaXMtZHJwLWZvY3VzYWJsZS1sZWZ0LSR7aW5kZXh9YFxuICAgICAgICA6IGBtaXMtZHJwLWZvY3VzYWJsZS1yaWdodC0ke2luZGV4fWA7XG4gICAgdGhpcy5mb2N1c0VsZW1lbnRCeUlkKGlkKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBmb2N1c0VsZW1lbnRCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KGAjJHtDU1MuZXNjYXBlKGlkKX1gLCB0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlc3RvcmVGb2N1c1RvQ2FsZW5kYXJEYXkodGFyZ2V0OiBEYXlqcyk6IHZvaWQge1xuICAgIGlmICghdGFyZ2V0Py5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGltZXIoMClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXN0b3JlRm9jdXNUb0NhbGVuZGFyRGF5KHRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlRm9jdXNBcHBseUJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aW1lcigwKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnRCeUlkKFwibWlzLWRycC1hcHBseS1idG5cIik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZUZvY3VzVG9DYWxlbmRhckRheSh0YXJnZXQ6IERheWpzKTogdm9pZCB7XG4gICAgY29uc3QgeSA9IHRhcmdldC55ZWFyKCk7XG4gICAgY29uc3QgbSA9IHRhcmdldC5tb250aCgpO1xuICAgIGNvbnN0IGQgPSB0YXJnZXQuZGF0ZSgpO1xuXG4gICAgY29uc3QgbGVmdFkgPSB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCk7XG4gICAgY29uc3QgbGVmdE0gPSB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpO1xuICAgIGNvbnN0IHJpZ2h0WSA9IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKTtcbiAgICBjb25zdCByaWdodE0gPSB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpO1xuXG4gICAgaWYgKGxlZnRZID09PSB5ICYmIGxlZnRNID09PSBtKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmZpbmREYXlJbmRleEluTW9udGhHcmlkKHRoaXMuY3VycmVudE1vbnRoRGF0ZXMoKSwgZCk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLkxFRlQsIGlkeCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyaWdodFkgPT09IHkgJiYgcmlnaHRNID09PSBtKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmZpbmREYXlJbmRleEluTW9udGhHcmlkKHRoaXMubmV4dE1vbnRoRGF0ZXMoKSwgZCk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLlJJR0hULCBpZHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZERheUluZGV4SW5Nb250aEdyaWQoZGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdLCBkYXlPZk1vbnRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChkYXRlc1tpXS5kYXRlID09PSBkYXlPZk1vbnRoICYmIGRhdGVzW2ldLmRhdGUgPiAwKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBwcml2YXRlIGlzRm9jdXNhYmxlKGQ6IElDdXJyZW50TW9udGhEYXRlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXk7XG4gIH1cblxuICBwcml2YXRlIGlzRmlyc3RSb3coaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBNYXRoLmZsb29yKGluZGV4IC8gNykgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzTGFzdFJvdyhpbmRleDogbnVtYmVyLCBkYXRlczogSUN1cnJlbnRNb250aERhdGVzW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihpbmRleCAvIDcpID09PSBNYXRoLmZsb29yKChkYXRlcy5sZW5ndGggLSAxKSAvIDcpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU2VsZWN0YWJsZUluQ29sdW1uKFxuICAgIGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSxcbiAgICBjb2w6IG51bWJlcixcbiAgICBkaXJlY3Rpb246IENvbHVtbk5hdkRpcmVjdGlvblxuICApOiBudW1iZXIge1xuICAgIGlmIChkaXJlY3Rpb24gPT09IENPTFVNTl9OQVZfRElSRUNUSU9OLkZPUldBUkQpIHtcbiAgICAgIGZvciAobGV0IGkgPSBjb2w7IGkgPCBkYXRlcy5sZW5ndGg7IGkgKz0gNykge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzYWJsZShkYXRlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gZGF0ZXMubGVuZ3RoIC0gNyArIGNvbDsgaSA+PSAwOyBpIC09IDcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2FibGUoZGF0ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNaW5NYXhEYXlzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGlmIChtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbC5zZXQobWluRGF0ZS5pc1NhbWVPckFmdGVyKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKSk7XG4gICAgfVxuICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhKCkuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwuc2V0KG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogTW9udGhOYXZEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgdGhpc01vbnRoOiBEYXlqcyA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVCkge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uUFJFVklPVVMpIHtcbiAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgubW9udGgoKSk7XG4gICAgdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXNNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICBpZiAodGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSA9PT0gMCAmJiBkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uUFJFVklPVVMpIHtcbiAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIC0gMSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVCkge1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgICB9ZWxzZSBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA9PT0gMCAmJiBkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVCkge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkgPT09IDExICYmIGRpcmVjdGlvbiA9PT0gTU9OVEhfTkFWX0RJUkVDVElPTi5QUkVWSU9VUykge1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkgLSAxKTtcbiAgICB9ZWxzZXtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcblxuICAgIC8vIE1vdmUgZm9jdXMgaW50byB0aGUgbmV3bHkgcmV2ZWFsZWQgcGFuZWwgc28gdGhlIGJ1dHRvbidzIHVwZGF0ZWQgYXJpYS1sYWJlbCBpc24ndCByZS1hbm5vdW5jZWRcbiAgICBpZiAoZGlyZWN0aW9uID09PSBNT05USF9OQVZfRElSRUNUSU9OLlBSRVZJT1VTKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRNb250aERhdGVzKCkuZmluZEluZGV4KGQgPT4gdGhpcy5pc0ZvY3VzYWJsZShkKSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLkxFRlQsIGlkeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMubmV4dE1vbnRoRGF0ZXMoKS5maW5kSW5kZXgoZCA9PiB0aGlzLmlzRm9jdXNhYmxlKGQpKTtcbiAgICAgICAgaWYgKGZhbGxiYWNrID49IDApIHRoaXMuZm9jdXNEcnBDZWxsKERBVEVfUkFOR0VfUEFORS5SSUdIVCwgZmFsbGJhY2spO1xuICAgICAgICBlbHNlIHRoaXMuZm9jdXNFbGVtZW50QnlJZCgnbWlzLWRycC1jYW5jZWwtYnRuJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMubmV4dE1vbnRoRGF0ZXMoKS5maW5kSW5kZXgoZCA9PiB0aGlzLmlzRm9jdXNhYmxlKGQpKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICB0aGlzLmZvY3VzRHJwQ2VsbChEQVRFX1JBTkdFX1BBTkUuUklHSFQsIGlkeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuY3VycmVudE1vbnRoRGF0ZXMoKS5maW5kSW5kZXgoZCA9PiB0aGlzLmlzRm9jdXNhYmxlKGQpKTtcbiAgICAgICAgaWYgKGZhbGxiYWNrID49IDApIHRoaXMuZm9jdXNEcnBDZWxsKERBVEVfUkFOR0VfUEFORS5MRUZULCBmYWxsYmFjayk7XG4gICAgICAgIGVsc2UgdGhpcy5mb2N1c0VsZW1lbnRCeUlkKCdtaXMtZHJwLWNhbmNlbC1idG4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNhbGVuZGFyIG1vbnRoL3llYXIgYmFzZWQgb24gc2VsZWN0ZWQgZGF0ZXNcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCBjaGFuZ2VzIHRvIGtlZXAgY2FsZW5kYXIgaW4gc3luY1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhckZyb21TZWxlY3RlZERhdGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxvY2FsU2VsZWN0ZWREYXRlcyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk7XG4gICAgbGV0IHNlbGVjdGVkU3RhcnREYXRlOiBEYXlqcztcblxuICAgIGlmIChsb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSkge1xuICAgICAgICBzZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhsb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFN0YXJ0RGF0ZSA9IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkU3RhcnREYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCkpO1xuICAgICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZFN0YXJ0RGF0ZS5hZGQoMSwgXCJtb250aFwiKS55ZWFyKCkpO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUuZ2V0KFwibW9udGhcIikpO1xuICAgICAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikubW9udGgoKSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzZWxlY3RlZEVuZERhdGUgPSBsb2NhbFNlbGVjdGVkRGF0ZXM/LmVuZERhdGUgPyB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMobG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUpIDogbnVsbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChzZWxlY3RlZEVuZERhdGUgJiYgc2VsZWN0ZWRFbmREYXRlLmlzVmFsaWQoKSAmJiBzZWxlY3RlZEVuZERhdGUuaXNBZnRlcihzZWxlY3RlZFN0YXJ0RGF0ZSwgJ21vbnRoJykpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZEVuZERhdGUubW9udGgoKSk7XG4gICAgICAgICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZEVuZERhdGUueWVhcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBtb250aCBsYWJlbHNcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICAgICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcblxuICAgICAgICAvLyBVcGRhdGUgY2FsZW5kYXIgZGF0ZXMgdG8gcmVmbGVjdCB0aGUgc2VsZWN0ZWQgZGF0ZXNcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgICAgICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZURhdGVzKG1vbnRoOiBudW1iZXIsIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXIpOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSB7XG4gICAgbGV0IGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gZGF5anMoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF5c0luTW9udGgoKTtcbiAgICBmb3IgKGxldCBjdXJyZW50RGF0ZSA9IDE7IGN1cnJlbnREYXRlIDw9IGRheXNJbk1vbnRoOyBjdXJyZW50RGF0ZSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gZGF5anMoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSk7XG4gICAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhKCkuZGF0ZXNEaXNhYmxlZC5zb21lKGQgPT4gZCA9PT0gZGF0ZVN0cmluZyk7XG4gICAgICAvLyBQYXJzZSBtaW4vbWF4IGRhdGVzIHNhZmVseSAtIHRyeSBkYXRlLW9ubHkgZm9ybWF0IGZpcnN0LCB0aGVuIGZ1bGwgZm9ybWF0XG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWluRGF0ZVN0ciA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICBtaW5EYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKG1pbkRhdGVTdHIpO1xuICAgICAgICAgIGlmICghbWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG1pbkRhdGUgPSBkYXlqcyh0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHBhcnNpbmcgbWluIGRhdGU6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWF4RGF0ZVN0ciA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGUuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICBtYXhEYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKG1heERhdGVTdHIpO1xuICAgICAgICAgIGlmICghbWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG1heERhdGUgPSBkYXlqcyh0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHBhcnNpbmcgbWF4IGRhdGU6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtaW5EYXRlICYmIG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1pbkRhdGUuaXNBZnRlcihkYXRlLCBcImRheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtYXhEYXRlICYmIG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1heERhdGUuaXNCZWZvcmUoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kYXRhKCk/LmRwQ29uZmlnPy5tYXhBbGxvd2VkUmFuZ2UgPiAwICYmXG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5zdGFydERhdGUgPz8gZmFsc2UpICYmICghKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSA/PyBmYWxzZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk/LnN0YXJ0RGF0ZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgIGNvbnN0IG1heEVuZERhdGUgPSBzdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5kYXRhKCkuZHBDb25maWcubWF4QWxsb3dlZFJhbmdlIC0gMSwgJ2RheXMnKTtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IGRhdGUuaXNBZnRlcihtYXhFbmREYXRlLCAnZGF5JykgXG4gICAgICB9XG4gICAgICBjb25zdCBpc0N1cnJlbnREYXkgPVxuICAgICAgICB0aGlzLmRheWpzSW5zdGFuY2UoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSkuZm9ybWF0KHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgPT09XG4gICAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggZGF0ZS1vbmx5IGFuZCBkYXRldGltZSBmb3JtYXRzKVxuICAgICAgbGV0IHN0YXJ0RGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk/LnN0YXJ0RGF0ZTtcbiAgICAgIGxldCBlbmREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKT8uZW5kRGF0ZTtcbiAgICAgIFxuICAgICAgLy8gT25seSBleHRyYWN0IGRhdGUgcGFydCBpZiB0aGUgZm9ybWF0IGNvbnRhaW5zIHRpbWUgY29tcG9uZW50c1xuICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnSEgnKSB8fCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ21tJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgLy8gRm9yIGRhdGV0aW1lIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXh0cmFjdCBqdXN0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBmdWxsIHN0cmluZyBhbmQgdGhlbiBmb3JtYXQgaXQgYXMgZGF0ZS1vbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgIGlmIChzdGFydERhdGVTdHJpbmcpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRTdGFydCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpO1xuICAgICAgICAgIGlmIChwYXJzZWRTdGFydC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZVN0cmluZyA9IHBhcnNlZFN0YXJ0LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmREYXRlU3RyaW5nKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkRW5kID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGVuZERhdGVTdHJpbmcpO1xuICAgICAgICAgIGlmIChwYXJzZWRFbmQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBieSBmaW5kaW5nIHRoZSB0aW1lIGJvdW5kYXJ5IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICBlbmREYXRlU3RyaW5nID0gcGFyc2VkRW5kLmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFBhcnNlIHRoZSBzZWxlY3RlZCBkYXRlcyB0byBnZXQgcHJvcGVyIGRheWpzIGluc3RhbmNlcyBmb3IgY29tcGFyaXNvblxuICAgICAgY29uc3Qgc3RhcnREYXRlUGFyc2VkID0gc3RhcnREYXRlU3RyaW5nID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHN0YXJ0RGF0ZVN0cmluZykgOiBudWxsO1xuICAgICAgY29uc3QgZW5kRGF0ZVBhcnNlZCA9IGVuZERhdGVTdHJpbmcgPyB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoZW5kRGF0ZVN0cmluZykgOiBudWxsO1xuICAgICAgXG4gICAgICBjb25zdCBpc1NlbGVjdGVkU3RhcnREYXkgPVxuICAgICAgICAhaXNEaXNhYmxlZERheSAmJlxuICAgICAgICBzdGFydERhdGVQYXJzZWQgJiZcbiAgICAgICAgc3RhcnREYXRlUGFyc2VkLmlzVmFsaWQoKSAmJlxuICAgICAgICBkYXRlLmlzU2FtZShzdGFydERhdGVQYXJzZWQsICdkYXknKTtcbiAgICAgICAgXG4gICAgICBjb25zdCBpc1NlbGVjdGVkRW5kRGF5ID1cbiAgICAgICAgIWlzRGlzYWJsZWREYXkgJiZcbiAgICAgICAgZW5kRGF0ZVBhcnNlZCAmJlxuICAgICAgICBlbmREYXRlUGFyc2VkLmlzVmFsaWQoKSAmJlxuICAgICAgICBkYXRlLmlzU2FtZShlbmREYXRlUGFyc2VkLCAnZGF5Jyk7XG4gICAgICAgIFxuICAgICAgLy8gRm9yIHJhbmdlIGNhbGN1bGF0aW9uLCB1c2UgdGhlIGFscmVhZHkgcGFyc2VkIGRhdGVzXG4gICAgICBjb25zdCBpc0FmdGVyU2VsZWN0ZWRTdGFydERhdGUgPSBzdGFydERhdGVQYXJzZWQgPyB0aGlzLmRheWpzSW5zdGFuY2UoZGF0ZSkuaXNBZnRlcihzdGFydERhdGVQYXJzZWQsIFwiZGF5XCIpIDogZmFsc2U7XG4gICAgICBjb25zdCBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZSA9IGVuZERhdGVQYXJzZWQgPyB0aGlzLmRheWpzSW5zdGFuY2UoZGF0ZSkuaXNCZWZvcmUoZW5kRGF0ZVBhcnNlZCwgXCJkYXlcIikgOiBmYWxzZTtcbiAgICAgIFxuICAgICAgY29uc3QgaW5SYW5nZURheSA9XG4gICAgICAgIHN0YXJ0RGF0ZVBhcnNlZCAmJiBlbmREYXRlUGFyc2VkICYmXG4gICAgICAgIHN0YXJ0RGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiYgZW5kRGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgaXNBZnRlclNlbGVjdGVkU3RhcnREYXRlICYmXG4gICAgICAgIGlzQmVmb3JlU2VsZWN0ZWRFbmREYXRlO1xuICAgICAgZGF0ZXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICB3ZWVrRGF5OiBkYXRlLmRheSgpLFxuICAgICAgICBpc0N1cnJlbnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgaW5SYW5nZURheSxcbiAgICAgICAgdG9hc3RNZXNzYWdlOiB0aGlzLmRhdGEoKS5tZXNzYWdlcy5maW5kKHEgPT4gZGF0ZS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KSA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICBpc0Rpc2FibGVkRGF5XG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGRhdGVzWzBdLndlZWtEYXk7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGRhdGVzLnVuc2hpZnQoeyBkYXRlOiAwLCB3ZWVrRGF5OiBpIC0gMSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbnNldEhvdmVyZWRXZWVrKHBhbmU6IERhdGVSYW5nZVBhbmUsIGRheTogSUN1cnJlbnRNb250aERhdGVzKTogdm9pZCB7XG4gIGlmICghdGhpcy5pc1dlZWtseU1vZGUoKSB8fCBkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gIGNvbnN0IHllYXIgPSBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVCA/IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKTtcbiAgY29uc3QgbW9udGggPSBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVCA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpO1xuICBjb25zdCBkYXRlID0gZGF5anMoKS55ZWFyKHllYXIpLm1vbnRoKG1vbnRoKS5kYXRlKGRheS5kYXRlKTtcbiAgY29uc3QgbW9uZGF5ID0gZGF0ZS5zdWJ0cmFjdCgoZGF0ZS5kYXkoKSArIDYpICUgNywgJ2RheScpO1xuICB0aGlzLmhvdmVyZWRXZWVrU3RhcnRTaWduYWwuc2V0KG1vbmRheS5mb3JtYXQoSVNPX0RBVEVfRk9STUFUKSk7XG59XG5cbmNsZWFySG92ZXJlZFdlZWsoKTogdm9pZCB7XG4gIHRoaXMuaG92ZXJlZFdlZWtTdGFydFNpZ25hbC5zZXQobnVsbCk7XG59XG5cbmlzSW5Ib3ZlcmVkV2VlayhwYW5lOiBEYXRlUmFuZ2VQYW5lLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcyk6IGJvb2xlYW4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLmhvdmVyZWRXZWVrU3RhcnRTaWduYWwoKTtcbiAgaWYgKCF3ZWVrU3RhcnQgfHwgZGF5LmRhdGUgPD0gMCB8fCBkYXkuaXNEaXNhYmxlZERheSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB5ZWFyID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCk7XG4gIGNvbnN0IG1vbnRoID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKTtcbiAgY29uc3QgZGF0ZSA9IGRheWpzKCkueWVhcih5ZWFyKS5tb250aChtb250aCkuZGF0ZShkYXkuZGF0ZSk7XG4gIGNvbnN0IG1vbmRheSA9IGRheWpzKHdlZWtTdGFydCwgSVNPX0RBVEVfRk9STUFUKTtcbiAgY29uc3Qgc3VuZGF5ID0gbW9uZGF5LmFkZCg2LCAnZGF5Jyk7XG4gIHJldHVybiAhZGF0ZS5pc0JlZm9yZShtb25kYXksICdkYXknKSAmJiAhZGF0ZS5pc0FmdGVyKHN1bmRheSwgJ2RheScpO1xufVxuXG5pc0hvdmVyZWRXZWVrU3RhcnQocGFuZTogRGF0ZVJhbmdlUGFuZSwgZGF5OiBJQ3VycmVudE1vbnRoRGF0ZXMpOiBib29sZWFuIHtcbiAgY29uc3Qgd2Vla1N0YXJ0ID0gdGhpcy5ob3ZlcmVkV2Vla1N0YXJ0U2lnbmFsKCk7XG4gIGlmICghd2Vla1N0YXJ0IHx8IGRheS5kYXRlIDw9IDAgfHwgZGF5LmlzRGlzYWJsZWREYXkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgeWVhciA9IHBhbmUgPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpO1xuICBjb25zdCBtb250aCA9IHBhbmUgPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCk7XG4gIHJldHVybiBkYXlqcygpLnllYXIoeWVhcikubW9udGgobW9udGgpLmRhdGUoZGF5LmRhdGUpLmlzU2FtZShkYXlqcyh3ZWVrU3RhcnQsIElTT19EQVRFX0ZPUk1BVCksICdkYXknKTtcbn1cblxuaXNIb3ZlcmVkV2Vla0VuZChwYW5lOiBEYXRlUmFuZ2VQYW5lLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcyk6IGJvb2xlYW4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLmhvdmVyZWRXZWVrU3RhcnRTaWduYWwoKTtcbiAgaWYgKCF3ZWVrU3RhcnQgfHwgZGF5LmRhdGUgPD0gMCB8fCBkYXkuaXNEaXNhYmxlZERheSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB5ZWFyID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCk7XG4gIGNvbnN0IG1vbnRoID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKTtcbiAgcmV0dXJuIGRheWpzKCkueWVhcih5ZWFyKS5tb250aChtb250aCkuZGF0ZShkYXkuZGF0ZSkuaXNTYW1lKGRheWpzKHdlZWtTdGFydCwgSVNPX0RBVEVfRk9STUFUKS5hZGQoNiwgJ2RheScpLCAnZGF5Jyk7XG59XG5cbnByaXZhdGUgc2VsZWN0V2VlayhjbGlja2VkRGF0ZTogRGF5anMpOiB2b2lkIHtcbiAgY29uc3QgZGF5T2ZXZWVrID0gY2xpY2tlZERhdGUuZGF5KCk7IC8vIDA9U3VuIOKApiA2PVNhdFxuICBjb25zdCBkYXlzRnJvbU1vbmRheSA9IChkYXlPZldlZWsgKyA2KSAlIDc7IC8vIE1vbuKGkjAsIOKApiwgU3Vu4oaSNlxuICBsZXQgd2Vla1N0YXJ0ID0gY2xpY2tlZERhdGUuc3VidHJhY3QoZGF5c0Zyb21Nb25kYXksIFwiZGF5XCIpO1xuICBsZXQgd2Vla0VuZCA9IHdlZWtTdGFydC5hZGQoNiwgXCJkYXlcIik7XG5cbiAgY29uc3QgbWluRGF0ZSA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGVcbiAgICA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlKVxuICAgIDogbnVsbDtcbiAgY29uc3QgbWF4RGF0ZSA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGVcbiAgICA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlKVxuICAgIDogbnVsbDtcblxuICBpZiAobWluRGF0ZT8uaXNWYWxpZCgpICYmIHdlZWtTdGFydC5pc0JlZm9yZShtaW5EYXRlLCBcImRheVwiKSkge1xuICAgIHdlZWtTdGFydCA9IG1pbkRhdGU7XG4gIH1cbiAgaWYgKG1heERhdGU/LmlzVmFsaWQoKSAmJiB3ZWVrRW5kLmlzQWZ0ZXIobWF4RGF0ZSwgXCJkYXlcIikpIHtcbiAgICB3ZWVrRW5kID0gbWF4RGF0ZTtcbiAgfVxuXG4gIHRoaXMuc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwuc2V0KHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMKTtcbiAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwuc2V0KHtcbiAgICBzdGFydERhdGU6IHdlZWtTdGFydC5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KSxcbiAgICBlbmREYXRlOiB3ZWVrRW5kLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpLFxuICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUwsXG4gIH0pO1xuICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWRTaWduYWwuc2V0KGZhbHNlKTtcbiAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KHRydWUpO1xuICB0aGlzLnVwZGF0ZUNhbGVuZGFyRnJvbVNlbGVjdGVkRGF0ZXMoKTtcbiAgdGhpcy5zY2hlZHVsZUZvY3VzQXBwbHlCdXR0b24oKTtcbn1cblxuc2VsZWN0RGF5KGZyb206IERhdGVSYW5nZVBhbmUsIGRheTogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gIGlmICghZGF5LmlzRGlzYWJsZWREYXkpIHtcbiAgICBjb25zdCBjbGlja2VkQ2FsZW5kYXJEYXRlID0gZGF5anMoKVxuICAgICAgLnllYXIoZnJvbSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAubW9udGgoZnJvbSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSlcbiAgICAgIC5kYXRlKGRheS5kYXRlKTtcblxuICAgIGlmICh0aGlzLmlzV2Vla2x5TW9kZSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdFdlZWsoY2xpY2tlZENhbGVuZGFyRGF0ZSk7XG4gICAgICBpZiAoZGF5LnRvYXN0TWVzc2FnZSkge1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQodGhpcy5DVVNUT01fUkFOR0VfTEFCRUwpO1xuICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXJ0ZWRTaWduYWwoKSkge1xuICAgICAgY29uc3QgZGF5anNEYXkgPSBjbGlja2VkQ2FsZW5kYXJEYXRlO1xuXG4gICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmcm9tIGV4aXN0aW5nIHN0YXJ0IGRhdGUgZm9yIGNvbXBhcmlzb25cbiAgICAgIGxldCBzdGFydERhdGVTdHJpbmcgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZTtcbiAgICAgIFxuICAgICAgLy8gT25seSBleHRyYWN0IGRhdGUgcGFydCBpZiB0aGUgZm9ybWF0IGNvbnRhaW5zIHRpbWUgY29tcG9uZW50c1xuICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnSEgnKSB8fCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ21tJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgLy8gRm9yIGRhdGV0aW1lIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXh0cmFjdCBqdXN0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBmdWxsIHN0cmluZyBhbmQgdGhlbiBmb3JtYXQgaXQgYXMgZGF0ZS1vbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgIGlmIChzdGFydERhdGVTdHJpbmcpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRTdGFydCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpO1xuICAgICAgICAgIGlmIChwYXJzZWRTdGFydC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZVN0cmluZyA9IHBhcnNlZFN0YXJ0LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZVN0cmluZyA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIFxuICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLCBtYWtlIGl0IHRoZSBuZXcgc3RhcnQgZGF0ZVxuICAgICAgaWYgKHN0YXJ0RGF0ZSAmJiBkYXlqc0RheS5pc0JlZm9yZShzdGFydERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBub3cgPSBkYXlqcygpO1xuICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcGF0dGVybiB3aGVyZSB0aW1lIHN0YXJ0cyAoSEgsIG1tLCBzcywgQSwgYSlcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5tYXRjaCgvKFxccyspKEhIfG1tfHNzfEF8YSkvKTtcbiAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZyh0aW1lU3RhcnRJbmRleCArIHRpbWVTdGFydE1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXlqc0RheS5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZyA9IG5vdy5mb3JtYXQodGltZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGRhdGVTdHJpbmcgKyB0aW1lU3RhcnRNYXRjaFsxXSArIHRpbWVTdHJpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIG5vIHRpbWUgcGF0dGVybiBmb3VuZFxuICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwuc2V0KHtcbiAgICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyRnJvbVNlbGVjdGVkRGF0ZXMoKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVJlc3RvcmVGb2N1c1RvQ2FsZW5kYXJEYXkoY2xpY2tlZENhbGVuZGFyRGF0ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgXG4gICAgICBsZXQgZm9ybWF0dGVkRW5kRGF0ZSA9IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgLy8gTG9vayBmb3IgdGhlIHBhdHRlcm4gd2hlcmUgdGltZSBzdGFydHMgKEhILCBtbSwgc3MsIEEsIGEpXG4gICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZyh0aW1lU3RhcnRJbmRleCArIHRpbWVTdGFydE1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRheWpzRGF5LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgY29uc3QgdGltZVN0cmluZyA9IG5vdy5mb3JtYXQodGltZU9ubHlGb3JtYXQpO1xuICAgICAgICAgIGZvcm1hdHRlZEVuZERhdGUgPSBkYXRlU3RyaW5nICsgdGltZVN0YXJ0TWF0Y2hbMV0gKyB0aW1lU3RyaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIG5vIHRpbWUgcGF0dGVybiBmb3VuZFxuICAgICAgICAgIGZvcm1hdHRlZEVuZERhdGUgPSBkYXlqc0RheS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICAuLi50aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLFxuICAgICAgICBlbmREYXRlOiBmb3JtYXR0ZWRFbmREYXRlLFxuICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJGcm9tU2VsZWN0ZWREYXRlcygpO1xuICAgICAgdGhpcy5zY2hlZHVsZUZvY3VzQXBwbHlCdXR0b24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydGVkU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgIFxuICAgICAgbGV0IGZvcm1hdHRlZFN0YXJ0RGF0ZSA9IGRheWpzKClcbiAgICAgICAgLnllYXIoZnJvbSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgIC5tb250aChmcm9tID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVCA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgLy8gTG9vayBmb3IgdGhlIHBhdHRlcm4gd2hlcmUgdGltZSBzdGFydHMgKEhILCBtbSwgc3MsIEEsIGEpXG4gICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZyh0aW1lU3RhcnRJbmRleCArIHRpbWVTdGFydE1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRheWpzKClcbiAgICAgICAgICAgIC55ZWFyKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgICAgIC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBub3cuZm9ybWF0KHRpbWVPbmx5Rm9ybWF0KTtcbiAgICAgICAgICBmb3JtYXR0ZWRTdGFydERhdGUgPSBkYXRlU3RyaW5nICsgdGltZVN0YXJ0TWF0Y2hbMV0gKyB0aW1lU3RyaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIG5vIHRpbWUgcGF0dGVybiBmb3VuZFxuICAgICAgICAgIGZvcm1hdHRlZFN0YXJ0RGF0ZSA9IGRheWpzKClcbiAgICAgICAgICAgIC55ZWFyKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgICAgIC5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZFN0YXJ0RGF0ZSxcbiAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyRnJvbVNlbGVjdGVkRGF0ZXMoKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZXN0b3JlRm9jdXNUb0NhbGVuZGFyRGF5KGNsaWNrZWRDYWxlbmRhckRhdGUpO1xuICAgIH1cbiAgICB0aGlzLmlzRGF0ZXNWYWxpZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUpIHtcbiAgICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKGRheS50b2FzdE1lc3NhZ2UpIHtcbiAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gIH1cbn1cbnNlbGVjdFJhbmdlKGl0ZW06IFJhbmdlSXRlbSkge1xuICBpZiAoIWl0ZW0pIHJldHVybjtcblxuICBsZXQgc3RhcnREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMF0pOyAgXG4gIGxldCBlbmREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMV0pOyAgXG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnREYXRlLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICBjb25zdCBlbmREYXRlU3RyID0gZW5kRGF0ZS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcblxuICBjb25zdCBpc0FueURhdGVEaXNhYmxlZCA9IHRoaXMuZGF0YSgpLmRhdGVzRGlzYWJsZWQuc29tZSgoZGF0ZSkgPT5cbiAgICB0aGlzLmRheWpzSW5zdGFuY2UoZGF0ZSAsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkuaXNCZXR3ZWVuKHN0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0ciwgbnVsbCwgJ1tdJylcbiAgKTtcblxuICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICBjb25zdCBtYXhEYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuXG4gIGNvbnN0IGlzV2l0aGluTGltaXRzID1cbiAgICAoIW1pbkRhdGUuaXNWYWxpZCgpIHx8ICFzdGFydERhdGUuaXNCZWZvcmUobWluRGF0ZSwgXCJkYXlcIikpICYmXG4gICAgKCFtYXhEYXRlLmlzVmFsaWQoKSB8fCAhZW5kRGF0ZS5pc0FmdGVyKG1heERhdGUsIFwiZGF5XCIpKTtcblxuICBpZiAoIWlzV2l0aGluTGltaXRzIHx8IGlzQW55RGF0ZURpc2FibGVkKSB7XG4gICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKFwiU2VsZWN0ZWQgcmFuZ2UgY29udGFpbnMgZGlzYWJsZWQgZGF0ZXMgb3IgaXMgb3V0IG9mIGJvdW5kcy5cIiwgNDAwMCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQoaXRlbS5sYWJlbCk7XG4gIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldChzdGFydERhdGUubW9udGgoKSk7XG4gIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHN0YXJ0RGF0ZS55ZWFyKCkpO1xuXG4gIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAxMSkge1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldCgwKTtcbiAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSArIDEpO1xuICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIH1cblxuICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoeyBcbiAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZVN0ciwgXG4gICAgZW5kRGF0ZTogZW5kRGF0ZVN0cixcbiAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IGl0ZW0ubGFiZWxcbiAgfSk7XG5cbiAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKSk7XG5cbiAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KCEhKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSkpO1xufVxuXG4gIHJlc2V0UmFuZ2UoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQodGhpcy5DVVNUT01fUkFOR0VfTEFCRUwpO1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsLnNldCh7XG4gICAgICBzdGFydERhdGU6IG51bGwsXG4gICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgfVxuXG4gIFxuICBhcHBseURhdGVzKCkge1xuICAgIC8vIElmIHRpbWUgaXMgZW5hYmxlZCwgYXBwZW5kIHRpbWUgdG8gdGhlIGRhdGVzIGJlZm9yZSBhcHBseWluZ1xuICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICBsZXQgc3RhcnRUaW1lOiBzdHJpbmc7XG4gICAgICBsZXQgZW5kVGltZTogc3RyaW5nO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLnN0YXJ0SG91cigpLCB0aGlzLnN0YXJ0TWludXRlKCksIHRoaXMuc3RhcnRBbVBtKCkpO1xuICAgICAgICBlbmRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuZW5kSG91cigpLCB0aGlzLmVuZE1pbnV0ZSgpLCB0aGlzLmVuZEFtUG0oKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5zdGFydEhvdXIyNCgpLCB0aGlzLnN0YXJ0TWludXRlKCksICcnKTtcbiAgICAgICAgZW5kVGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLmVuZEhvdXIyNCgpLCB0aGlzLmVuZE1pbnV0ZSgpLCAnJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3Qgb25seSB0aGUgZGF0ZSBwYXJ0IChiZWZvcmUgYW55IGV4aXN0aW5nIHRpbWUpIGFuZCBhcHBlbmQgdGhlIHNlbGVjdGVkIHRpbWVcbiAgICAgIGNvbnN0IGxvY2FsRGF0ZXMgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpO1xuICAgICAgbGV0IHN0YXJ0RGF0ZU9ubHkgPSBsb2NhbERhdGVzLnN0YXJ0RGF0ZTtcbiAgICAgIGxldCBlbmREYXRlT25seSA9IGxvY2FsRGF0ZXMuZW5kRGF0ZTtcbiAgICAgIFxuICAgICAgLy8gT25seSBleHRyYWN0IGRhdGUgcGFydCBpZiB0aGUgZm9ybWF0IGNvbnRhaW5zIHRpbWUgY29tcG9uZW50c1xuICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnSEgnKSB8fCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ21tJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgLy8gRm9yIGRhdGV0aW1lIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXh0cmFjdCBqdXN0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBmdWxsIHN0cmluZyBhbmQgdGhlbiBmb3JtYXQgaXQgYXMgZGF0ZS1vbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgIGlmIChzdGFydERhdGVPbmx5KSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU3RhcnQgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlT25seSk7XG4gICAgICAgICAgaWYgKHBhcnNlZFN0YXJ0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgYnkgZmluZGluZyB0aGUgdGltZSBib3VuZGFyeSAtIGhhbmRsZSBzcGFjZXMgaW4gZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5tYXRjaCgvKFxccyspKEhIfG1tfHNzfEF8YSkvKTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RhcnRNYXRjaCkge1xuICAgICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgICAgc3RhcnREYXRlT25seSA9IHBhcnNlZFN0YXJ0LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmREYXRlT25seSkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEVuZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhlbmREYXRlT25seSk7XG4gICAgICAgICAgaWYgKHBhcnNlZEVuZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIGVuZERhdGVPbmx5ID0gcGFyc2VkRW5kLmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVdpdGhUaW1lID0gc3RhcnREYXRlT25seSArICcgJyArIHN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IGVuZERhdGVXaXRoVGltZSA9IGVuZERhdGVPbmx5ICsgJyAnICsgZW5kVGltZTtcbiAgICAgIFxuICAgICAgdGhpcy5kYXRhKCkuZGF0ZUNoYW5nZSh7XG4gICAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlV2l0aFRpbWUsXG4gICAgICAgIGVuZERhdGU6IGVuZERhdGVXaXRoVGltZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YSgpLmRhdGVDaGFuZ2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKSk7XG4gICAgfVxuICB9XG5cbiAgXG4gIGNhbmNlbERhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRhKCkuY2xvc2UoKTtcbiAgfVxuICBcbiAgLy8gVGltZS1yZWxhdGVkIG1ldGhvZHNcbiAgb25TdGFydEhvdXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZUhvdXJJbnB1dCh0aGlzLnN0YXJ0SG91cigpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVIb3VySW5wdXQyNCh0aGlzLnN0YXJ0SG91cjI0KCkpKTtcbiAgICB9XG4gIH1cbiAgXG4gIG9uU3RhcnRNaW51dGVJbnB1dCgpIHtcbiAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldCh0aGlzLnZhbGlkYXRlTWludXRlSW5wdXQodGhpcy5zdGFydE1pbnV0ZSgpKSk7XG4gIH1cbiAgXG4gIG9uRW5kSG91cklucHV0KCkge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZUhvdXJJbnB1dCh0aGlzLmVuZEhvdXIoKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZEhvdXIyNFNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZUhvdXJJbnB1dDI0KHRoaXMuZW5kSG91cjI0KCkpKTtcbiAgICB9XG4gIH1cbiAgXG4gIG9uRW5kTWludXRlSW5wdXQoKSB7XG4gICAgdGhpcy5lbmRNaW51dGVTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVNaW51dGVJbnB1dCh0aGlzLmVuZE1pbnV0ZSgpKSk7XG4gIH1cbiAgXG4gIHZhbGlkYXRlSG91cklucHV0KGhvdXI6IG51bWJlcikge1xuICAgIC8vIEFwcGx5IGJvdW5kcyBiYXNlZCBvbiBmb3JtYXRcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyAxMi1ob3VyIGZvcm1hdDogMS0xMlxuICAgICAgaWYgKGhvdXIgPCAxKSBob3VyID0gMTtcbiAgICAgIGlmIChob3VyID4gMTIpIGhvdXIgPSAxMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMjQtaG91ciBmb3JtYXQ6IDAtMjNcbiAgICAgIGlmIChob3VyIDwgMCkgaG91ciA9IDA7XG4gICAgICBpZiAoaG91ciA+IDIzKSBob3VyID0gMjM7XG4gICAgfVxuICAgIHJldHVybiBob3VyO1xuICB9XG4gIFxuICAvLyBTcGVjaWFsIHZhbGlkYXRpb24gZm9yIDI0LWhvdXIgZm9ybWF0XG4gIHZhbGlkYXRlSG91cklucHV0MjQoaG91cjogbnVtYmVyKSB7XG4gICAgaWYgKGhvdXIgPCAwKSBob3VyID0gMDtcbiAgICBpZiAoaG91ciA+IDIzKSBob3VyID0gMjM7XG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cbiAgXG4gIHZhbGlkYXRlTWludXRlSW5wdXQobWludXRlOiBudW1iZXIpIHtcbiAgICBpZiAobWludXRlIDwgMCkgbWludXRlID0gMDtcbiAgICBpZiAobWludXRlID4gNTkpIG1pbnV0ZSA9IDU5O1xuICAgIHJldHVybiBtaW51dGU7XG4gIH1cbiAgXG4gIHB1YmxpYyBpczEySG91ckZvcm1hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdhJyk7XG4gIH1cbiAgXG4gIHByaXZhdGUgZm9ybWF0VGltZShob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBhbVBtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIHJldHVybiBgJHtob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke2FtUG19YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIDI0LWhvdXIgZm9ybWF0LCBqdXN0IHJldHVybiB0aGUgaG91ciBhbmQgbWludXRlXG4gICAgICByZXR1cm4gYCR7aG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRpbWVWYWx1ZXMoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aW1lIHZhbHVlcyBmcm9tIGV4aXN0aW5nIHNlbGVjdGVkIGRhdGVzIGlmIHRoZXkgY29udGFpbiB0aW1lXG4gICAgbGV0IHN0YXJ0VGltZUluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgbGV0IGVuZFRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIFxuICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlICYmIHR5cGVvZiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVBhcnRzID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGUuc3BsaXQoJyAnKTtcbiAgICAgIGlmIChzdGFydERhdGVQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3RhcnREYXRlUGFydHMuc2xpY2UoMSkuam9pbignICcpOyAvLyBIYW5kbGUgbXVsdGlwbGUgc3BhY2VzXG4gICAgICAgIHRoaXMucGFyc2VUaW1lU3RyaW5nKHRpbWVQYXJ0LCB0cnVlKTtcbiAgICAgICAgc3RhcnRUaW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcuZW5hYmxlVGltZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUgJiYgdHlwZW9mIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGVuZERhdGVQYXJ0cyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZS5zcGxpdCgnICcpO1xuICAgICAgaWYgKGVuZERhdGVQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZW5kRGF0ZVBhcnRzLnNsaWNlKDEpLmpvaW4oJyAnKTsgLy8gSGFuZGxlIG11bHRpcGxlIHNwYWNlc1xuICAgICAgICB0aGlzLnBhcnNlVGltZVN0cmluZyh0aW1lUGFydCwgZmFsc2UpO1xuICAgICAgICBlbmRUaW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiBubyBleGlzdGluZyB0aW1lIGZvdW5kLCBzZXQgY3VycmVudCB0aW1lIGFzIGRlZmF1bHRcbiAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgaWYgKCFzdGFydFRpbWVJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRUaW1lQXNEZWZhdWx0KHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFlbmRUaW1lSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VGltZUFzRGVmYXVsdChmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJyZW50VGltZUFzRGVmYXVsdChpc1N0YXJ0OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICBjb25zdCBjdXJyZW50SG91ciA9IG5vdy5ob3VyKCk7XG4gICAgY29uc3QgY3VycmVudE1pbnV0ZSA9IG5vdy5taW51dGUoKTtcbiAgICBcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyBDb252ZXJ0IGN1cnJlbnQgdGltZSB0byAxMi1ob3VyIGZvcm1hdFxuICAgICAgbGV0IGhvdXIxMiA9IGN1cnJlbnRIb3VyO1xuICAgICAgbGV0IGFtUG0gPSAnQU0nO1xuICAgICAgXG4gICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IGN1cnJlbnRIb3VyIC0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW1QbSA9ICdBTSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChob3VyMTIpO1xuICAgICAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KGFtUG0pO1xuICAgICAgICB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGhvdXIxMik7XG4gICAgICAgIHRoaXMuZW5kTWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldChhbVBtKTtcbiAgICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIGN1cnJlbnQgdGltZSBkaXJlY3RseSBmb3IgMjQtaG91ciBmb3JtYXRcbiAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgICAgdGhpcy5zdGFydE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KGN1cnJlbnRIb3VyIC0gMTIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgICAgdGhpcy5lbmRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnRNaW51dGUpO1xuICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID4gMTIpIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGN1cnJlbnRIb3VyIC0gMTIpO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUaW1lU3RyaW5nKHRpbWVTdHJpbmc6IHN0cmluZywgaXNTdGFydDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIC8vIFBhcnNlIDEyLWhvdXIgZm9ybWF0OiBcIjEwOjAwIFBNXCJcbiAgICAgIGNvbnN0IG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCgvKFxcZCspOihcXGQrKVxccyooQU18UE0pL2kpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBwYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgICAgY29uc3QgYW1QbSA9IG1hdGNoWzNdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChob3VyKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldChtaW51dGUpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldChhbVBtKTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAyNC1ob3VyIHZhbHVlIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KGhvdXIgPT09IDEyID8gKGFtUG0gPT09ICdQTScgPyAxMiA6IDApIDogKGFtUG0gPT09ICdQTScgPyBob3VyICsgMTIgOiBob3VyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChob3VyKTtcbiAgICAgICAgICB0aGlzLmVuZE1pbnV0ZVNpZ25hbC5zZXQobWludXRlKTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KGFtUG0pO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDI0LWhvdXIgdmFsdWUgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KGhvdXIgPT09IDEyID8gKGFtUG0gPT09ICdQTScgPyAxMiA6IDApIDogKGFtUG0gPT09ICdQTScgPyBob3VyICsgMTIgOiBob3VyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFyc2UgMjQtaG91ciBmb3JtYXQ6IFwiMjI6MDBcIlxuICAgICAgY29uc3QgbWF0Y2ggPSB0aW1lU3RyaW5nLm1hdGNoKC8oXFxkKyk6KFxcZCspLyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaG91cjI0ID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChtYXRjaFsyXSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgIC8vIFN0b3JlIGRpcmVjdGx5IGluIDI0LWhvdXIgZm9ybWF0XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIyNFNpZ25hbC5zZXQoaG91cjI0KTtcbiAgICAgICAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldChtaW51dGUpO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeSAodGhvdWdoIG5vdCB1c2VkIGluIDI0LWhvdXIgbW9kZSlcbiAgICAgICAgICBpZiAoaG91cjI0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID09PSAxMikge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoaG91cjI0IC0gMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoaG91cjI0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RvcmUgZGlyZWN0bHkgaW4gMjQtaG91ciBmb3JtYXRcbiAgICAgICAgICB0aGlzLmVuZEhvdXIyNFNpZ25hbC5zZXQoaG91cjI0KTtcbiAgICAgICAgICB0aGlzLmVuZE1pbnV0ZVNpZ25hbC5zZXQobWludXRlKTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3kgKHRob3VnaCBub3QgdXNlZCBpbiAyNC1ob3VyIG1vZGUpXG4gICAgICAgICAgaWYgKGhvdXIyNCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID09PSAxMikge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoaG91cjI0IC0gMTIpO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChob3VyMjQpO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyXCIgYXJpYS1sYWJlbD1cImRhdGUgcmFuZ2UgcGlja2VyXCIgY2RrVHJhcEZvY3VzIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX192aWV3XCI+XG4gICAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJkYXRhKCk/LmRwQ29uZmlnPy5yYW5nZXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3Jhbmdlc1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhKCk/LmRwQ29uZmlnPy5yYW5nZXMgPz8gW11cIiA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtcmFuZ2UnIDogc2VsZWN0ZWRJdGVtTGFiZWwoKSA9PT0gaXRlbS5sYWJlbH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSYW5nZShpdGVtKVwiXG4gICAgICAgICAgY2xhc3M9XCJtaXMtYnRuXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+IDxidXR0b24gY2xhc3M9XCJtaXMtYnRuXCIgW25nQ2xhc3NdPVwieydhY3RpdmUtcmFuZ2UnIDogc2VsZWN0ZWRJdGVtTGFiZWwoKSA9PT0gJ0N1c3RvbSBSYW5nZSd9XCIgKGNsaWNrKT1cInJlc2V0UmFuZ2UoKVwiPkN1c3RvbSBSYW5nZTwvYnV0dG9uPiA8L2Rpdj5cbiAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJfX2xlZnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19oZWFkZXJfX3ByYWJ1XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCgpID8gLTEgOiAwXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzUHJldmlvdXNNb250aERpc2FibGVkKCkgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzUHJldmlvdXNNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aChNT05USF9OQVZfRElSRUNUSU9OLlBSRVZJT1VTKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoTU9OVEhfTkFWX0RJUkVDVElPTi5QUkVWSU9VUylcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldk1vbnRoQXJpYUxhYmVsKClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzUHJldmlvdXNNb250aERpc2FibGVkKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuPiB7eyBjdXJyZW50TW9udGgoKSB9fSB7eyBjdXJyZW50WWVhck51bWJlcigpIH19IDwvc3Bhbj5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgPCEtLSBCdXR0b24gdmlzaWJsZSBpbiBtb2JpbGUgdmlldyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYXJyb3dfX2ljb24gbW9iaWxlX3ZpZXdcIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlzTmV4dE1vbnRoRGlzYWJsZWQoKSA/IC0xIDogMFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc05leHRNb250aERpc2FibGVkKCkgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICByb2xlPSdidXR0b24nXG4gICAgICAgICAgKGNsaWNrKT1cIiFpc05leHRNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aChNT05USF9OQVZfRElSRUNUSU9OLk5FWFQpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQoKSAmJiBuYXZpZ2F0ZU1vbnRoKE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dE1vbnRoQXJpYUxhYmVsKClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWQoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2JvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5cygpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheXNcIj5cbiAgICAgICAgICBAZm9yIChkYXkgb2YgY3VycmVudE1vbnRoRGF0ZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlcIlxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cImRheS5kYXRlIDw9IDAgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXNhbWUtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXN0YXJ0LWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1lbmQtZGF5JzogZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAgICAgJ2luLXJhbmdlLWRheSc6IGRheS5pblJhbmdlRGF5LFxuICAgICAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhKGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXkpLFxuICAgICAgICAgICAgICAnaG92ZXItd2Vlay1yb3cnOiBpc0luSG92ZXJlZFdlZWsoREFURV9SQU5HRV9QQU5FLkxFRlQsIGRheSksXG4gICAgICAgICAgICAgICdob3Zlci13ZWVrLXN0YXJ0JzogaXNIb3ZlcmVkV2Vla1N0YXJ0KERBVEVfUkFOR0VfUEFORS5MRUZULCBkYXkpLFxuICAgICAgICAgICAgICAnaG92ZXItd2Vlay1lbmQnOiBpc0hvdmVyZWRXZWVrRW5kKERBVEVfUkFOR0VfUEFORS5MRUZULCBkYXkpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoREFURV9SQU5HRV9QQU5FLkxFRlQsIGRheSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheShEQVRFX1JBTkdFX1BBTkUuTEVGVCwgZGF5KVwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZXRIb3ZlcmVkV2VlayhEQVRFX1JBTkdFX1BBTkUuTEVGVCwgZGF5KVwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbGVhckhvdmVyZWRXZWVrKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5LmRhdGUgPiAwXCJcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtpZF09XCIhZGF5LmlzRGlzYWJsZWREYXkgPyAnbWlzLWRycC1mb2N1c2FibGUtbGVmdC0nICsgJGluZGV4IDogbnVsbFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJlbmFibGVEYXRlVGFiYmluZygpID8gKGRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwKSA6ICgkaW5kZXggPT09IGFuY2hvckluZGV4TGVmdCgpID8gMCA6IC0xKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmV0cmFjdERheU1vbnRoKGRheS5kYXRlLCBjdXJyZW50TW9udGgoKSwgY3VycmVudFllYXJOdW1iZXIoKSwgZGF5LmlzU2VsZWN0ZWRTdGFydERheSwgZGF5LmlzU2VsZWN0ZWRFbmREYXkpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXkuaXNEaXNhYmxlZERheSA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkRheUNlbGxLZXlkb3duKCRldmVudCwgREFURV9SQU5HRV9QQU5FLkxFRlQsICRpbmRleClcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJfX3JpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9faGVhZGVyX19wcmFidVwiPlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICA8c3Bhbj4ge3sgbmV4dE1vbnRoKCkgfX0ge3sgbmV4dFllYXJOdW1iZXIoKSB9fSA8L3NwYW4+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uIHBjX3ZpZXdcIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlzTmV4dE1vbnRoRGlzYWJsZWQoKSA/IC0xIDogMFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc05leHRNb250aERpc2FibGVkKCkgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQoKSAmJiBuYXZpZ2F0ZU1vbnRoKE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoTU9OVEhfTkFWX0RJUkVDVElPTi5ORVhUKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJuZXh0TW9udGhBcmlhTGFiZWwoKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZCgpXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzKClcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRheSBvZiBuZXh0TW9udGhEYXRlcygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheVwiXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiZGF5LmRhdGUgPD0gMCA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc2FtZS1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc3RhcnQtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLWVuZC1kYXknOiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICAgICAnaW4tcmFuZ2UtZGF5JzogZGF5LmluUmFuZ2VEYXksXG4gICAgICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICEoZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSksXG4gICAgICAgICAgICAgICdob3Zlci13ZWVrLXJvdyc6IGlzSW5Ib3ZlcmVkV2VlayhEQVRFX1JBTkdFX1BBTkUuUklHSFQsIGRheSksXG4gICAgICAgICAgICAgICdob3Zlci13ZWVrLXN0YXJ0JzogaXNIb3ZlcmVkV2Vla1N0YXJ0KERBVEVfUkFOR0VfUEFORS5SSUdIVCwgZGF5KSxcbiAgICAgICAgICAgICAgJ2hvdmVyLXdlZWstZW5kJzogaXNIb3ZlcmVkV2Vla0VuZChEQVRFX1JBTkdFX1BBTkUuUklHSFQsIGRheSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheShEQVRFX1JBTkdFX1BBTkUuUklHSFQsIGRheSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheShEQVRFX1JBTkdFX1BBTkUuUklHSFQsIGRheSlcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0SG92ZXJlZFdlZWsoREFURV9SQU5HRV9QQU5FLlJJR0hULCBkYXkpXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImNsZWFySG92ZXJlZFdlZWsoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXkuZGF0ZSA+IDBcIlxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2lkXT1cIiFkYXkuaXNEaXNhYmxlZERheSA/ICdtaXMtZHJwLWZvY3VzYWJsZS1yaWdodC0nICsgJGluZGV4IDogbnVsbFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJlbmFibGVEYXRlVGFiYmluZygpID8gKGRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwKSA6ICgkaW5kZXggPT09IGFuY2hvckluZGV4UmlnaHQoKSA/IDAgOiAtMSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJldHJhY3REYXlNb250aChkYXkuZGF0ZSwgbmV4dE1vbnRoKCksIG5leHRZZWFyTnVtYmVyKCksIGRheS5pc1NlbGVjdGVkU3RhcnREYXksIGRheS5pc1NlbGVjdGVkRW5kRGF5KVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF5LmlzRGlzYWJsZWREYXkgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25EYXlDZWxsS2V5ZG93bigkZXZlbnQsIERBVEVfUkFOR0VfUEFORS5SSUdIVCwgJGluZGV4KVwiPlxuICAgICAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIFxuICA8IS0tIFRpbWUgU2VsZWN0aW9uIFNlY3Rpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX190aW1lXCIgKm5nSWY9XCJkYXRhKCkuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlY3Rpb25cIj5cbiAgICAgIDxoND5Gcm9tPC9oND5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0c1wiPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFtuZ01vZGVsXT1cImlzMTJIb3VyRm9ybWF0KCkgPyBzdGFydEhvdXIoKSA6IHN0YXJ0SG91cjI0KClcIiBcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJpczEySG91ckZvcm1hdCgpID8gc3RhcnRIb3VyU2lnbmFsLnNldCgkZXZlbnQpIDogc3RhcnRIb3VyMjRTaWduYWwuc2V0KCRldmVudCk7IG9uU3RhcnRIb3VySW5wdXQoKVwiXG4gICAgICAgICAgW21pbl09XCJpczEySG91ckZvcm1hdCgpID8gMSA6IDBcIiBcbiAgICAgICAgICBbbWF4XT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxMiA6IDIzXCIgXG4gICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dCBob3VyLWlucHV0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1zZXBhcmF0b3JcIj46PC9zcGFuPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFtuZ01vZGVsXT1cInN0YXJ0TWludXRlKClcIiAobmdNb2RlbENoYW5nZSk9XCJzdGFydE1pbnV0ZVNpZ25hbC5zZXQoJGV2ZW50KVwiIFxuICAgICAgICAgIChpbnB1dCk9XCJvblN0YXJ0TWludXRlSW5wdXQoKVwiXG4gICAgICAgICAgbWluPVwiMFwiIFxuICAgICAgICAgIG1heD1cIjU5XCIgXG4gICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dCBtaW51dGUtaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTU1cIj5cbiAgICAgICAgPHNlbGVjdCBcbiAgICAgICAgICBbbmdNb2RlbF09XCJzdGFydEFtUG0oKVwiIChuZ01vZGVsQ2hhbmdlKT1cInN0YXJ0QW1QbVNpZ25hbC5zZXQoJGV2ZW50KVwiIFxuICAgICAgICAgIGNsYXNzPVwiYW0tcG0tc2VsZWN0b3JcIlxuICAgICAgICAgICpuZ0lmPVwiaXMxMkhvdXJGb3JtYXQoKVwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwidGltZS1zZWN0aW9uXCI+XG4gICAgICA8aDQ+VG88L2g0PlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXRzXCI+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgW25nTW9kZWxdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IGVuZEhvdXIoKSA6IGVuZEhvdXIyNCgpXCIgXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaXMxMkhvdXJGb3JtYXQoKSA/IGVuZEhvdXJTaWduYWwuc2V0KCRldmVudCkgOiBlbmRIb3VyMjRTaWduYWwuc2V0KCRldmVudCk7IG9uRW5kSG91cklucHV0KClcIlxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCIgXG4gICAgICAgICAgW21heF09XCJpczEySG91ckZvcm1hdCgpID8gMTIgOiAyM1wiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgaG91ci1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJISFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCI+Ojwvc3Bhbj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJlbmRNaW51dGUoKVwiIChuZ01vZGVsQ2hhbmdlKT1cImVuZE1pbnV0ZVNpZ25hbC5zZXQoJGV2ZW50KVwiIFxuICAgICAgICAgIChpbnB1dCk9XCJvbkVuZE1pbnV0ZUlucHV0KClcIlxuICAgICAgICAgIG1pbj1cIjBcIiBcbiAgICAgICAgICBtYXg9XCI1OVwiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgbWludXRlLWlucHV0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIk1NXCI+XG4gICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgW25nTW9kZWxdPVwiZW5kQW1QbSgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZW5kQW1QbVNpZ25hbC5zZXQoJGV2ZW50KVwiIFxuICAgICAgICAgIGNsYXNzPVwiYW0tcG0tc2VsZWN0b3JcIlxuICAgICAgICAgICpuZ0lmPVwiaXMxMkhvdXJGb3JtYXQoKVwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIFxuICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyX19mb290ZXJcIj5cbiAgICA8YnV0dG9uIG1pcy1idXR0b24gdHlwZT1cIm5vbmVcIiBpZD1cIm1pcy1kcnAtY2FuY2VsLWJ0blwiIGFyaWEtbGFiZWw9XCJjYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRGF0ZVBpY2tlcigpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgaWQ9XCJtaXMtZHJwLWFwcGx5LWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXBwbHlCdXR0b25BcmlhTGFiZWwoKVwiIChjbGljayk9XCJhcHBseURhdGVzKClcIiBbZGlzYWJsZWRdPVwiIWlzRGF0ZXNWYWxpZCgpXCI+QXBwbHk8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
1616
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxFQUNmLG1CQUFtQixFQUNuQiwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLGNBQWMsR0FLZixNQUFNLDhCQUE4QixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHcEMsT0FBTyxLQUFnQixNQUFNLE9BQU8sQ0FBQztBQUNyQyxPQUFPLFFBQVEsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUNuQyxPQUFPLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLGNBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFBO0FBQzlELE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7OztJQ3hCdkMsQUFERiwyQkFBMEQsaUJBS3ZEO0lBRkMsb05BQVMsMkJBQWlCLEtBQUM7SUFHM0IsWUFDRjtJQUNGLEFBREUsaUJBQVMsRUFDTDs7OztJQU5KLGNBQWlFO0lBQWpFLGtHQUFpRTtJQUkvRCxjQUNGO0lBREUsOENBQ0Y7Ozs7SUFSSiwrQkFBNEY7SUFDMUYsK0VBQTBEO0lBU3BELEFBQU4sMkJBQUssaUJBQXNIO0lBQXZCLG1MQUFTLG1CQUFZLEtBQUM7SUFBQyw0QkFBWTtJQUMzSSxBQURxSixBQUFWLGlCQUFTLEVBQU8sRUFDcko7Ozs7SUFWb0IsY0FBaUM7SUFBakMsbU5BQWlDO0lBU3pCLGVBQXFFO0lBQXJFLG1HQUFxRTs7O0lBaUQ3RixBQURGLCtCQUFtRixXQUMzRTtJQUFBLFlBQW1CO0lBQzNCLEFBRDJCLGlCQUFPLEVBQzVCOzs7SUFERSxlQUFtQjtJQUFuQixzQ0FBbUI7Ozs7SUF5QnpCLGdDQU1xRTtJQUFuRSxnUEFBVyx1RUFBc0QsS0FBQztJQUNsRSxZQUNGO0lBQUEsaUJBQU87Ozs7OztJQUxMLEFBREEseUZBQXFFLDBIQUNvQzs7SUFJekcsY0FDRjtJQURFLDRDQUNGOzs7O0lBNUJGLCtCQW1CQztJQURDLEFBREEsQUFEQSxBQURBLDBNQUFTLHFEQUFvQyxLQUFDLHlNQUMvQixxREFBb0MsS0FBQyx1TUFDdEMsMERBQXlDLEtBQUMsOEtBQzFDLHlCQUFrQixLQUFDO0lBRWpDLGtGQU1xRTtJQUd2RSxpQkFBTTs7OztJQXpCSixnZEFVRTs7SUFNSyxjQUFrQjtJQUFsQixzQ0FBa0I7OztJQXlDekIsQUFERiwrQkFBbUYsV0FDM0U7SUFBQSxZQUFtQjtJQUMzQixBQUQyQixpQkFBTyxFQUM1Qjs7O0lBREUsZUFBbUI7SUFBbkIsdUNBQW1COzs7O0lBeUJ6QixnQ0FNc0U7SUFBcEUsa1BBQVcseUVBQXVELEtBQUM7SUFDbkUsWUFDRjtJQUFBLGlCQUFPOzs7Ozs7SUFMTCxBQURBLDRGQUFzRSw2SEFDb0M7O0lBSTFHLGNBQ0Y7SUFERSw2Q0FDRjs7OztJQTVCRiwrQkFtQkM7SUFEQyxBQURBLEFBREEsQUFEQSw0TUFBUyx1REFBcUMsS0FBQywyTUFDaEMsdURBQXFDLEtBQUMseU1BQ3ZDLDREQUEwQyxLQUFDLCtLQUMzQyx5QkFBa0IsS0FBQztJQUVqQyxrRkFNc0U7SUFHeEUsaUJBQU07Ozs7SUF6QkosK2RBVUU7O0lBTUssY0FBa0I7SUFBbEIsdUNBQWtCOzs7O0lBd0M3QixrQ0FHMkI7SUFGRCxxTkFBaUIsa0NBQTJCLEtBQUM7SUFHckUsa0NBQW1CO0lBQUEsa0JBQUU7SUFBQSxpQkFBUztJQUM5QixrQ0FBbUI7SUFBQSxrQkFBRTtJQUN2QixBQUR1QixpQkFBUyxFQUN2Qjs7O0lBTFAsNENBQXVCOzs7O0lBK0J6QixrQ0FHMkI7SUFGSCxzTkFBaUIsZ0NBQXlCLEtBQUM7SUFHakUsa0NBQW1CO0lBQUEsa0JBQUU7SUFBQSxpQkFBUztJQUM5QixrQ0FBbUI7SUFBQSxrQkFBRTtJQUN2QixBQUR1QixpQkFBUyxFQUN2Qjs7O0lBTFAsMENBQXFCOzs7O0lBdER6QixBQURGLEFBREYsK0JBQXlGLGNBQzdELFNBQ3BCO0lBQUEsb0JBQUk7SUFBQSxpQkFBSztJQUVYLEFBREYsK0JBQXlCLGdCQVNKO0lBTGpCLG9MQUFpQix1QkFBZ0IsR0FBRyxrQ0FBMkIsR0FBRyxvQ0FBNkIsd0JBQUUseUJBQWtCLEtBQUM7SUFIdEgsaUJBUW1CO0lBQ25CLGdDQUE2QjtJQUFBLGlCQUFDO0lBQUEsaUJBQU87SUFDckMsaUNBUW1CO0lBTGpCLEFBRDBCLDBNQUFpQixvQ0FBNkIsS0FBQyx1S0FDaEUsMkJBQW9CLEtBQUM7SUFIaEMsaUJBUW1CO0lBQ25CLHNGQUcyQjtJQUsvQixBQURFLGlCQUFNLEVBQ0Y7SUFHSixBQURGLGdDQUEwQixVQUNwQjtJQUFBLG1CQUFFO0lBQUEsaUJBQUs7SUFFVCxBQURGLGdDQUF5QixpQkFTSjtJQUxqQixxTEFBaUIsdUJBQWdCLEdBQUcsZ0NBQXlCLEdBQUcsa0NBQTJCLHdCQUFFLHVCQUFnQixLQUFDO0lBSGhILGlCQVFtQjtJQUNuQixpQ0FBNkI7SUFBQSxrQkFBQztJQUFBLGlCQUFPO0lBQ3JDLGtDQVFtQjtJQUxqQixBQUR3QiwyTUFBaUIsa0NBQTJCLEtBQUMsd0tBQzVELHlCQUFrQixLQUFDO0lBSDlCLGlCQVFtQjtJQUNuQix3RkFHMkI7SUFNakMsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRjs7O0lBMURFLGVBQTBEO0lBRzFELEFBREEsQUFGQSw2RkFBMEQsd0NBRTFCLDBDQUNFO0lBT2xDLGVBQXlCO0lBQXpCLDhDQUF5QjtJQVV4QixjQUFzQjtJQUF0Qiw4Q0FBc0I7SUFZdkIsZUFBc0Q7SUFHdEQsQUFEQSxBQUZBLHlGQUFzRCx3Q0FFdEIsMENBQ0U7SUFPbEMsZUFBdUI7SUFBdkIsNENBQXVCO0lBVXRCLGNBQXNCO0lBQXRCLDhDQUFzQjs7OztJQWtCM0Isa0NBUUM7SUFEQyw0TkFBUyw0QkFBaUIsS0FBQztJQUUzQixZQUNGO0lBQUEsaUJBQVM7Ozs7SUFOUCxzRkFBb0Q7O0lBS3BELGNBQ0Y7SUFERSxpREFDRjs7O0lBRUYsZ0NBSUM7SUFDQyx5Q0FDRjtJQUFBLGlCQUFPOzs7SUExQlAsQUFERiwrQkFBaUYsZUFDTztJQUNwRixZQUNGO0lBQUEsaUJBQU87SUFDUCwrQkFJQztJQUNDLHNGQVFDO0lBR0gsaUJBQU07SUFDTixrRkFJQztJQUdILGlCQUFNOzs7SUExQkYsZUFDRjtJQURFLDJEQUNGO0lBSUUsY0FBZ0Q7O0lBRzNCLGNBQWlCO0lBQUEsQUFBakIsNkNBQWlCLHVDQUF1QjtJQWE1RCxjQUE0QjtJQUE1QixvREFBNEI7O0FEdE9uQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QixLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDaEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1QixLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBTzdCLE1BQU0sT0FBTyx1QkFBdUI7SUFXbEM7O09BRUc7SUFDSyw0QkFBNEIsQ0FBQyxVQUFrQjtRQUNyRCxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsS0FBSyxjQUFjLElBQUksVUFBVSxLQUFLLFdBQVcsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDeEcsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3RELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNyQixPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLCtCQUErQjtZQUNqQyxDQUFDO1FBQ0gsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLGVBQWUsR0FBRztZQUN0QixhQUFhO1lBQ2IsWUFBWTtZQUNaLGFBQWE7WUFDYixZQUFZO1lBQ1osZUFBZTtTQUNoQixDQUFDO1FBRUYsS0FBSyxNQUFNLE1BQU0sSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZiwwQkFBMEI7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFFRCxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBMktELFlBQ2tDLFlBQTZCLEVBQ3JELEtBQW1CLEVBQ1YsUUFBbUIsRUFDbkIsVUFBc0I7UUFIUCxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDckQsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNWLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTdPaEMsb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFDbEMsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsY0FBYyxDQUFDO1FBQzVDLFNBQUksR0FBRyxNQUFNLENBQWtCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkQsa0JBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUM7UUF1RE0sZ0JBQVcsR0FBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxGLGdDQUFnQztRQUNmLG1CQUFjLEdBQUcsTUFBTSxDQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLDZCQUF3QixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxNQUFNLENBQWdCLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELDRCQUF1QixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1Qyw0QkFBdUIsR0FBRyxNQUFNLENBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQzNELDBCQUFxQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxQyxvQkFBZSxHQUFHLE1BQU0sQ0FBZ0IsU0FBUyxDQUFDLENBQUM7UUFDbkQseUJBQW9CLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLHlCQUFvQixHQUFHLE1BQU0sQ0FBdUIsRUFBRSxDQUFDLENBQUM7UUFDeEQsa0NBQTZCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELDhCQUF5QixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuRCwyQkFBc0IsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEQsNkJBQXdCLEdBQUcsTUFBTSxDQUF1QixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDNUYsdUJBQWtCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVDLDRCQUF1QixHQUFHLE1BQU0sQ0FBUyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRSwyQkFBc0IsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3JELHVCQUFrQixHQUFHLE1BQU0sQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUUzRCx5QkFBeUI7UUFDaEIsb0JBQWUsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDckMsc0JBQWlCLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLG9CQUFlLEdBQUcsTUFBTSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLG9CQUFlLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLGtCQUFhLEdBQUcsTUFBTSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3JDLHNCQUFpQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUN2QyxvQkFBZSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUU5QywwQ0FBMEM7UUFDMUMsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNqRCx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNyRSxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDL0QsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzdELDRCQUF1QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLHdCQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDekQsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDbkUsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxhQUFhLEtBQUssY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLENBQUM7UUFFNUUsNERBQTREO1FBQ25ELGVBQVUsR0FBRyxRQUFRLENBQWUsR0FBRyxFQUFFO1lBQ2hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7WUFDckcsTUFBTSxVQUFVLEdBQWlCLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQy9CLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO29CQUFFLFNBQVM7Z0JBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sS0FBSyxHQUFHLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDOUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILDREQUE0RDtRQUNuRCxxQkFBZ0IsR0FBRyxRQUFRLENBQ2xDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN0RixDQUFDO1FBQ08sc0JBQWlCLEdBQUcsUUFBUSxDQUNuQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksMkJBQTJCLENBQy9GLENBQUM7UUFDTywyQkFBc0IsR0FBRyxRQUFRLENBQ3hDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLEtBQUssSUFBSSxDQUNyRixDQUFDO1FBQ08saUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUN6RCx3QkFBbUIsR0FBRyxRQUFRLENBQ3JDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDN0UsQ0FBQztRQUNGLHlFQUF5RTtRQUNoRSxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLHlCQUFvQixHQUFHLFFBQVEsQ0FDdEMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FDOUUsQ0FBQztRQUNPLCtCQUEwQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFTSxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzVELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RCxJQUNFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7b0JBQ2hELE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFDbEQsQ0FBQztvQkFDRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzdGLElBQUksR0FBRyxJQUFJLENBQUM7d0JBQUUsT0FBTyxHQUFHLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFTSxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDNUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVELElBQ0UsTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDaEIsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtvQkFDN0MsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUMvQyxDQUFDO29CQUNELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDN0YsSUFBSSxHQUFHLElBQUksQ0FBQzt3QkFBRSxPQUFPLEdBQUcsQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVNLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0SCxPQUFPLG1DQUFtQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFFTSx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0csT0FBTywrQkFBK0IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO1FBRU0seUJBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQy9ELElBQUksS0FBSyxHQUFHLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLG1DQUFtQyxTQUFTLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMxRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMxQyxLQUFLLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2dCQUNsRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7b0JBQ2hDLEtBQUssSUFBSSx1Q0FBdUMsQ0FBQztnQkFDbkQsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRWMsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNoQyw0RkFBNEY7WUFDNUYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQyxDQUFDLENBQUM7UUFDSCxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDM0Isc0ZBQXNGO1lBQ3RGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxDQUFDO1FBR0gseUNBQXlDO1FBQ3pDLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN2RCxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDL0MsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDdkQsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQVFqRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBa0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFFeEYsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDO29CQUNILE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuRixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN4RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDLENBQUM7UUFDSixDQUFDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RCxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMvQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEtBQUs7U0FDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEdBQUc7Z0JBQ3JCLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVE7Z0JBQ3ZCLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUM7UUFDSixDQUFDO1FBRUQsOENBQThDO1FBQzlDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFNUIsSUFBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRLEVBQUUsS0FBVSxFQUFFLElBQVMsRUFBRSxPQUFpQixFQUFFLEtBQWU7UUFDakYsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RDLElBQUksT0FBTyxJQUFJLEtBQUs7WUFBRSxLQUFLLElBQUksaUJBQWlCLENBQUM7YUFDNUMsSUFBSSxPQUFPO1lBQUUsS0FBSyxJQUFJLHVCQUF1QixDQUFDO2FBQzlDLElBQUksS0FBSztZQUFFLEtBQUssSUFBSSxxQkFBcUIsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQW9CLEVBQUUsSUFBbUIsRUFBRSxTQUFpQjtRQUMzRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBdUIsQ0FBQztRQUUxQyxNQUFNLFdBQVcsR0FBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1SSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBRUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFekMsSUFBSSxHQUFHLEtBQUssa0JBQWtCLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0csTUFBTSxHQUFHLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RixJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxHQUFHLEtBQUssa0JBQWtCLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxNQUFNLEdBQUcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkUsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLFNBQWlCLEVBQUUsR0FBcUIsRUFBRSxLQUEyQjtRQUNyRyxJQUFJLElBQVksQ0FBQztRQUNqQixRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ1osS0FBSyxrQkFBa0IsQ0FBQyxJQUFJO2dCQUMxQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsTUFBTTtZQUNSLEtBQUssa0JBQWtCLENBQUMsS0FBSztnQkFDM0IsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDVCxNQUFNO1lBQ1IsS0FBSyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ1YsTUFBTTtZQUNSLEtBQUssa0JBQWtCLENBQUMsSUFBSTtnQkFDMUIsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDVCxNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELENBQUMsSUFBSSxJQUFJLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBbUIsRUFBRSxLQUFhO1FBQ3JELE1BQU0sRUFBRSxHQUNOLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSTtZQUMzQixDQUFDLENBQUMsMEJBQTBCLEtBQUssRUFBRTtZQUNuQyxDQUFDLENBQUMsMkJBQTJCLEtBQUssRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsRUFBVTtRQUNqQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDO2dCQUNILE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFnQixDQUFDO2dCQUN0RixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixDQUFDO1lBQUMsTUFBTSxDQUFDO1lBQ1QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlDQUFpQyxDQUFDLE1BQWE7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxNQUFhO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXhCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTVDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkUsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQTJCLEVBQUUsVUFBa0I7UUFDN0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVPLFdBQVcsQ0FBQyxDQUFxQjtRQUN2QyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWE7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBMkI7UUFDMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLEtBQTJCLEVBQzNCLEdBQVcsRUFDWCxTQUE2QjtRQUU3QixJQUFJLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMvQixPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMvQixPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDekgsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsSixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsSixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUE0QjtRQUN4QyxJQUFJLFNBQVMsR0FBVSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUMzRyxJQUFJLFNBQVMsS0FBSyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLElBQUksU0FBUyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZELFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLEtBQUssRUFBRSxJQUFJLFNBQVMsS0FBSyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3RixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7YUFBSyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFFLElBQUksU0FBUyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFJLENBQUM7WUFDTCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLGlHQUFpRztRQUNqRyxJQUFJLFNBQVMsS0FBSyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLFFBQVEsSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzs7b0JBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlFLElBQUksUUFBUSxJQUFJLENBQUM7b0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDOztvQkFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssK0JBQStCO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDM0QsSUFBSSxpQkFBd0IsQ0FBQztRQUU3QixJQUFJLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLGlCQUFpQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RixDQUFDO2FBQU0sQ0FBQztZQUNKLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRTFFLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFM0gsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDdEcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWpFLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakgsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBYSxFQUFFLGlCQUF5QjtRQUM1RCxJQUFJLEtBQUssR0FBeUIsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvRSxLQUFLLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxXQUFXLElBQUksV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDcEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDMUUsNEVBQTRFO1lBQzVFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFHbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5RCxPQUFPLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7d0JBQ3ZCLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDN0UsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQztvQkFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlELE9BQU8sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3RSxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNqRCxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNqRCxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUVELElBQ0UsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxlQUFlLEdBQUcsQ0FBQztnQkFDMUMsQ0FBQyxhQUFhO2dCQUNkLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUM5RyxDQUFDO2dCQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9HLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMzRixhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDakQsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9HLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUzRCxnRkFBZ0Y7WUFDaEYsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsU0FBUyxDQUFDO1lBQ2pFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLE9BQU8sQ0FBQztZQUU3RCxnRUFBZ0U7WUFDaEUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxSSw4REFBOEQ7Z0JBQzlELDhFQUE4RTtnQkFDOUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUN2RSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO3dCQUMxQiw4RUFBOEU7d0JBQzlFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO3dCQUNoRixJQUFJLGNBQWMsRUFBRSxDQUFDOzRCQUNuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzlFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7NEJBQ2hGLGVBQWUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUN2RCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ25FLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7d0JBQ3hCLDhFQUE4RTt3QkFDOUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7d0JBQ2hGLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQzs0QkFDaEYsYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ25ELENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELHdFQUF3RTtZQUN4RSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3BHLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFOUYsTUFBTSxrQkFBa0IsR0FDdEIsQ0FBQyxhQUFhO2dCQUNkLGVBQWU7Z0JBQ2YsZUFBZSxDQUFDLE9BQU8sRUFBRTtnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFdEMsTUFBTSxnQkFBZ0IsR0FDcEIsQ0FBQyxhQUFhO2dCQUNkLGFBQWE7Z0JBQ2IsYUFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFcEMsc0RBQXNEO1lBQ3RELE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwSCxNQUFNLHVCQUF1QixHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFFaEgsTUFBTSxVQUFVLEdBQ2QsZUFBZSxJQUFJLGFBQWE7Z0JBQ2hDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFO2dCQUNwRCx3QkFBd0I7Z0JBQ3hCLHVCQUF1QixDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNuQixZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsZ0JBQWdCO2dCQUNoQixVQUFVO2dCQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxJQUFJLEVBQUU7Z0JBQ2hILGFBQWE7YUFDZCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVILGNBQWMsQ0FBQyxJQUFtQixFQUFFLEdBQXVCO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQUUsT0FBTztRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFHLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0csTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBbUIsRUFBRSxHQUF1QjtRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMxRyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdHLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFtQixFQUFFLEdBQXVCO1FBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLGFBQWE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFHLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0csT0FBTyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQW1CLEVBQUUsR0FBdUI7UUFDM0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsYUFBYTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDMUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3RyxPQUFPLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFFTyxVQUFVLENBQUMsV0FBa0I7UUFDbkMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0JBQWdCO1FBQ3JELE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUM5RCxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU87WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNqRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1lBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDakUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVULElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0QsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUM7WUFDaEMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDeEQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDcEQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUM1QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFtQixFQUFFLEdBQXVCO1FBQ3BELElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUFFO2lCQUNoQyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztpQkFDbEcsS0FBSyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7aUJBQ3JHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztnQkFDRCxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztnQkFFckMsNERBQTREO2dCQUM1RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBRWhFLGdFQUFnRTtnQkFDaEUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMxSSw4REFBOEQ7b0JBQzlELDhFQUE4RTtvQkFDOUUsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUN2RSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDOzRCQUMxQiw4RUFBOEU7NEJBQzlFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDOzRCQUNoRixJQUFJLGNBQWMsRUFBRSxDQUFDO2dDQUNuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQzlFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0NBQ2hGLGVBQWUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDOzRCQUN2RCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBRTlGLDRFQUE0RTtnQkFDNUUsSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsSUFBSSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUVqRSxzREFBc0Q7b0JBQ3RELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQzdDLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO3dCQUNwQiw0RUFBNEU7d0JBQzVFLDREQUE0RDt3QkFDNUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7d0JBQ2hGLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQzs0QkFDaEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBRXhHLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7NEJBQ25ELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7NEJBQzlDLGFBQWEsR0FBRyxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQzt3QkFDOUQsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLG9DQUFvQzs0QkFDcEMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDL0QsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUM7d0JBQ2hDLFNBQVMsRUFBRSxhQUFhO3dCQUN4QixPQUFPLEVBQUUsSUFBSTt3QkFDYixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO3FCQUM1QyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUM1RCxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkMsSUFBSSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRXBFLHNEQUFzRDtnQkFDdEQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7b0JBQ3BCLDRFQUE0RTtvQkFDNUUsNERBQTREO29CQUM1RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDbkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM5RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO3dCQUNoRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFFeEcsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDbkQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDOUMsZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQ2pFLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixvQ0FBb0M7d0JBQ3BDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEUsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUM7b0JBQ2hDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFO29CQUNsQyxPQUFPLEVBQUUsZ0JBQWdCO29CQUN6QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO2lCQUM1QyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2xDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV0QyxJQUFJLGtCQUFrQixHQUFHLEtBQUssRUFBRTtxQkFDN0IsSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7cUJBQ2xHLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3FCQUNyRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztxQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFdkMsc0RBQXNEO2dCQUN0RCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUM3QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztvQkFDcEIsNEVBQTRFO29CQUM1RSw0REFBNEQ7b0JBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUNoRixJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUNuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzlFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7d0JBQ2hGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUV4RyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUU7NkJBQ3ZCLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDOzZCQUNsRyxLQUFLLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs2QkFDckcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7NkJBQ2QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUMxQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUM5QyxrQkFBa0IsR0FBRyxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztvQkFDbkUsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLG9DQUFvQzt3QkFDcEMsa0JBQWtCLEdBQUcsS0FBSyxFQUFFOzZCQUN6QixJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzs2QkFDbEcsS0FBSyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7NkJBQ3JHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDOzZCQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztvQkFDaEMsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsT0FBTyxFQUFFLElBQUk7b0JBQ2Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtpQkFDNUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUNBQWlDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFDRCxXQUFXLENBQUMsSUFBZTtRQUN6QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ3ZHLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xKLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbEosTUFBTSxjQUFjLEdBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsY0FBYyxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsNkRBQTZELEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztZQUNoQyxTQUFTLEVBQUUsWUFBWTtZQUN2QixPQUFPLEVBQUUsVUFBVTtZQUNuQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSztTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBRUMsVUFBVTtRQUNSLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztZQUNoQyxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUM1QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELDZFQUE2RTtJQUNyRSxvQkFBb0IsQ0FBQyxJQUFhO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWtCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLE1BQWtCO1FBQy9DLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBa0I7UUFDakMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRUQsMkRBQTJEO0lBQ25ELGlCQUFpQixDQUFDLEtBQTJCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMzQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELFVBQVU7UUFDUixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBRTdCLCtEQUErRDtRQUMvRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksU0FBaUIsQ0FBQztZQUN0QixJQUFJLE9BQWUsQ0FBQztZQUVwQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO2dCQUMxQixTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxxRkFBcUY7WUFDckYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbkQsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUN6QyxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBRXJDLGdFQUFnRTtZQUNoRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFJLDhEQUE4RDtnQkFDOUQsOEVBQThFO2dCQUM5RSxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3JFLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7d0JBQzFCLDhFQUE4RTt3QkFDOUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7d0JBQ2hGLElBQUksY0FBYyxFQUFFLENBQUM7NEJBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQzs0QkFDaEYsYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3JELENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDakUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQzt3QkFDeEIsOEVBQThFO3dCQUM5RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQzt3QkFDaEYsSUFBSSxjQUFjLEVBQUUsQ0FBQzs0QkFDbkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUM5RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDOzRCQUNoRixXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDakQsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUMxRCxNQUFNLGVBQWUsR0FBRyxXQUFXLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztZQUVwRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDNUMsR0FBRyxVQUFVO2dCQUNiLFNBQVMsRUFBRSxpQkFBaUI7Z0JBQzVCLE9BQU8sRUFBRSxlQUFlO2FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFHRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVk7UUFDNUIsK0JBQStCO1FBQy9CLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDMUIsdUJBQXVCO1lBQ3ZCLElBQUksSUFBSSxHQUFHLENBQUM7Z0JBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLElBQUksR0FBRyxFQUFFO2dCQUFFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTix1QkFBdUI7WUFDdkIsSUFBSSxJQUFJLEdBQUcsQ0FBQztnQkFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksSUFBSSxHQUFHLEVBQUU7Z0JBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLG1CQUFtQixDQUFDLElBQVk7UUFDOUIsSUFBSSxJQUFJLEdBQUcsQ0FBQztZQUFFLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUFFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDO1lBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxFQUFFO1lBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUM3QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFFLElBQVk7UUFDM0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDN0YsQ0FBQzthQUFNLENBQUM7WUFDTixzREFBc0Q7WUFDdEQsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckYsQ0FBQztJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsMkVBQTJFO1FBQzNFLElBQUksb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxJQUFJLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xKLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtnQkFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxJQUFJLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEUsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtnQkFDM0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxPQUFnQjtRQUM5QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDMUIseUNBQXlDO1lBQ3pDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFFaEIsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxHQUFHLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxHQUFHLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksR0FBRyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLCtDQUErQztZQUMvQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFDLDBDQUEwQztnQkFDMUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEMsMENBQTBDO2dCQUMxQyxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixDQUFDO3FCQUFNLElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsVUFBa0IsRUFBRSxPQUFnQjtRQUMxRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLG1DQUFtQztZQUNuQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDekQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVwQyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IseUNBQXlDO29CQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMxRyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IseUNBQXlDO29CQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGdDQUFnQztZQUNoQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWxDLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osbUNBQW1DO29CQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQyw0RUFBNEU7b0JBQzVFLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLENBQUM7eUJBQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsQ0FBQzt5QkFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO3dCQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sbUNBQW1DO29CQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLDRFQUE0RTtvQkFDNUUsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsQ0FBQzt5QkFBTSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDO3lCQUFNLElBQUksTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7d0hBbDFDVSx1QkFBdUIsdUJBMk94QixjQUFjO29FQTNPYix1QkFBdUI7WUFBdkIsd0dBQUEsZ0JBQVksSUFBVzs7WUN6Q2xDLEFBREYsOEJBQW9ILGFBQ3JFO1lBQzNDLHlCQUF5QztZQUN6Qyx3RUFBNEY7WUFjeEYsQUFERixBQURGLDhCQUE4QixhQUMwQixhQVluRDtZQUxDLEFBREEsa0dBQVUsNkJBQXlCLElBQUksbURBQTJDLElBQUMsaUdBQ25FLDZCQUF5QixJQUFJLG1EQUEyQyxJQUFDOztZQU16Riw4QkFBK0Y7WUFDN0YsMEJBR1E7WUFFWixBQURFLGlCQUFNLEVBQ0Y7O1lBQ04sNEJBQU07WUFBQyxhQUErQztZQUFBLGlCQUFPO1lBQzdELHVCQUFXO1lBRVgsK0JBV0M7WUFMQyxBQURBLG1HQUFVLHlCQUFxQixJQUFJLCtDQUF1QyxJQUFDLGtHQUMzRCx5QkFBcUIsSUFBSSwrQ0FBdUMsSUFBQzs7WUFNakYsK0JBQStGO1lBQzdGLDJCQUdRO1lBR2QsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRjs7WUFFSixBQURGLGdDQUE2QyxlQUNNO1lBQy9DLDJFQUFtRjtZQUdyRixpQkFBTTtZQUNOLGdDQUE2QztZQUMzQyw2R0ErQkM7WUFHUCxBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGO1lBRUosQUFERixnQ0FBK0IsY0FDeUI7WUFDcEQsdUJBQVc7WUFDWCw2QkFBTTtZQUFDLGFBQXlDO1lBQUEsaUJBQU87WUFDdkQsZ0NBV0M7WUFMQyxBQURBLG1HQUFVLHlCQUFxQixJQUFJLCtDQUF1QyxJQUFDLGtHQUMzRCx5QkFBcUIsSUFBSSwrQ0FBdUMsSUFBQzs7WUFNakYsK0JBQStGO1lBQzdGLDJCQUdRO1lBR2QsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRjs7WUFFSixBQURGLGdDQUE2QyxlQUNNO1lBQy9DLDJFQUFtRjtZQUdyRixpQkFBTTtZQUNOLGdDQUE2QztZQUMzQyw2R0ErQkM7WUFJVCxBQURFLEFBREUsQUFERSxpQkFBTSxFQUNGLEVBQ0YsRUFDRjtZQXNFTixBQW5FQSw2RUFBeUYsOERBbUVSO1lBK0IvRSxBQURGLGdDQUFxQyxrQkFDcUU7WUFBN0IscUdBQVMsc0JBQWtCLElBQUM7WUFBQyx1QkFBTTtZQUFBLGlCQUFTO1lBQ3ZILG1DQUFvSjtZQUFoRCxxR0FBUyxnQkFBWSxJQUFDO1lBQTBCLHNCQUFLO1lBRTdKLEFBREUsQUFEMkosaUJBQVMsRUFDOUosRUFDRjs7O1lBL1E2RSw4Q0FBZ0M7WUFHekcsZUFBMEM7WUFBMUMsOEtBQTBDO1lBc0IxQyxlQUVFO1lBRkYsb0ZBRUU7O1lBU0csZUFBK0M7WUFBL0MsaUZBQStDO1lBV3BELGVBRUU7WUFGRixnRkFFRTs7WUFZa0UsZUFBYTtZQUFiLHdDQUFhO1lBS2pGLGVBK0JDO1lBL0JELGNBQUEsdUJBQW1CLENBK0JsQjtZQU9JLGVBQXlDO1lBQXpDLDJFQUF5QztZQVM5QyxjQUVFO1lBRkYsZ0ZBRUU7O1lBWWtFLGVBQWE7WUFBYix3Q0FBYTtZQUtqRixlQStCQztZQS9CRCxjQUFBLG9CQUFnQixDQStCZjtZQU9xQyxlQUF5QztZQUF6Qyw4REFBeUM7WUFtRWhDLGNBQXdCO1lBQXhCLDZDQUF3QjtZQWdDOEMsZUFBd0I7WUFBeEIsMENBQXdCOzs7O2lGRG5PMUksdUJBQXVCO2NBTG5DLFNBQVM7MkJBQ0UsWUFBWTs7c0JBK09uQixNQUFNO3VCQUFDLGNBQWM7aUdBeUV4QixVQUFVO2tCQURULFlBQVk7bUJBQUMsYUFBYTs7a0ZBblRoQix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQsIHNpZ25hbCwgY29tcHV0ZWQsIFJlbmRlcmVyMiwgRGVzdHJveVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7XG4gIENBTEVOREFSX0FSUk9XX0tFWSxcbiAgQ09MVU1OX05BVl9ESVJFQ1RJT04sXG4gIENPTlRBSU5FUl9EQVRBLFxuICBEQVRFX0ZPUk1BVCxcbiAgSVNPX0RBVEVfRk9STUFULFxuICBEQVRFX1JBTkdFX1BBTkUsXG4gIERFRkFVTFRfREFZX09QVElPTlMsXG4gIERFRkFVTFRfREFZX1NFTEVDVElPTl9MQUJFTCxcbiAgTU9OVEhfTkFWX0RJUkVDVElPTixcbiAgU0VMRUNUSU9OX01PREUsXG4gIHR5cGUgQ2FsZW5kYXJBcnJvd0tleSxcbiAgdHlwZSBDb2x1bW5OYXZEaXJlY3Rpb24sXG4gIHR5cGUgRGF0ZVJhbmdlUGFuZSxcbiAgdHlwZSBNb250aE5hdkRpcmVjdGlvbixcbn0gZnJvbSBcIi4uL2RhdGVyYW5nZXBpY2tlci1jb25zdGFudHNcIjtcbmltcG9ydCB7IElDdXJyZW50TW9udGgsIElDdXJyZW50TW9udGhEYXRlcywgSURhdGVQaWNrZXJEYXRhLCBJRGF5T3B0aW9uLCBJV2Vla0RheSwgSVNlbGVjdGVkRGF0ZXNDb25maWcsIFJhbmdlSXRlbSB9IGZyb20gXCIuLi9tb2RlbHMvZHJwLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IHsgZ2V0TW9udGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3RvYXN0XCI7XG5cbmltcG9ydCBkYXlqcywgeyBEYXlqcyB9IGZyb20gJ2RheWpzJztcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnO1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyJztcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnO1xuaW1wb3J0IGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCdcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbic7XG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKTtcbmRheWpzLmV4dGVuZCh1dGMpO1xuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcik7XG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLXR6LWRycFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVHpEcnBDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBEQVRFX1JBTkdFX1BBTkUgPSBEQVRFX1JBTkdFX1BBTkU7XG4gIHJlYWRvbmx5IE1PTlRIX05BVl9ESVJFQ1RJT04gPSBNT05USF9OQVZfRElSRUNUSU9OO1xuICByZWFkb25seSBTRUxFQ1RJT05fTU9ERSA9IFNFTEVDVElPTl9NT0RFO1xuICBwcml2YXRlIHJlYWRvbmx5IENVU1RPTV9SQU5HRV9MQUJFTCA9IFwiQ3VzdG9tIFJhbmdlXCI7XG4gIHJlYWRvbmx5IGRhdGEgPSBzaWduYWw8SURhdGVQaWNrZXJEYXRhPih0aGlzLmluamVjdGVkRGF0YSk7XG4gIHJlYWRvbmx5IGlzTW9iaWxlID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLmRhdGEoKS5pc01vYmlsZVZpZXcpO1xuICBwcml2YXRlIGRheWpzSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBkYXlqcyguLi5hcmdzKTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgZGF0ZSBzdHJpbmcgdXNpbmcgY29uZmlndXJlZCBmb3JtYXQgd2l0aCBmYWxsYmFja1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGRhdGVTdHJpbmc6IHN0cmluZyk6IGRheWpzLkRheWpzIHtcbiAgICBpZiAoIWRhdGVTdHJpbmcgfHwgZGF0ZVN0cmluZyA9PT0gJ0ludmFsaWQgRGF0ZScgfHwgZGF0ZVN0cmluZyA9PT0gJ3VuZGVmaW5lZCcgfHwgZGF0ZVN0cmluZyA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gZGF5anMoJ2ludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBGaXJzdCB0cnkgdGhlIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAgY29uc3QgY29uZmlndXJlZEZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnPy5mb3JtYXQ7XG4gICAgaWYgKGNvbmZpZ3VyZWRGb3JtYXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IGRheWpzKGRhdGVTdHJpbmcsIGNvbmZpZ3VyZWRGb3JtYXQpO1xuICAgICAgICBpZiAocGFyc2VkLmlzVmFsaWQoKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIENvbnRpbnVlIHRvIGZhbGxiYWNrIGZvcm1hdHNcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBjb21tb24gZm9ybWF0cyBpZiBjb25maWd1cmVkIGZvcm1hdCBmYWlsc1xuICAgIGNvbnN0IGZhbGxiYWNrRm9ybWF0cyA9IFtcbiAgICAgICdERC9NTU0vWVlZWScsXG4gICAgICAnREQvTU0vWVlZWScsXG4gICAgICAnREQtTU1NLVlZWVknLFxuICAgICAgJ0RELU1NLVlZWVknLFxuICAgICAgSVNPX0RBVEVfRk9STUFUXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIGZhbGxiYWNrRm9ybWF0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gZGF5anMoZGF0ZVN0cmluZywgZm9ybWF0KTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDb250aW51ZSB0byBuZXh0IGZvcm1hdFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGFsbCBmb3JtYXRzIGZhaWwsIHRyeSBwYXJzaW5nIHdpdGhvdXQgZm9ybWF0IChsZXQgZGF5anMgZ3Vlc3MpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGRheWpzKGRhdGVTdHJpbmcpO1xuICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgZGF0ZSB3aXRoIGFueSBmb3JtYXQ6JywgZGF0ZVN0cmluZywgZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXlqcygnaW52YWxpZCcpO1xuICB9XG4gIHByaXZhdGUgcmF3V2Vla0RheXM6IHN0cmluZ1tdID0gW1wiU1VOXCIsIFwiTU9OXCIsIFwiVFVFXCIsIFwiV0VEXCIsIFwiVEhVXCIsIFwiRlJJXCIsIFwiU0FUXCJdO1xuICBcbiAgLy8gU2lnbmFsLWJhc2VkIHN0YXRlIG1hbmFnZW1lbnRcbiAgcHJpdmF0ZSByZWFkb25seSB3ZWVrRGF5c1NpZ25hbCA9IHNpZ25hbDxJV2Vla0RheVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudE1vbnRoU2lnbmFsID0gc2lnbmFsPElDdXJyZW50TW9udGg+KFwiSmFudWFyeVwiKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50WWVhck51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aERhdGVzU2lnbmFsID0gc2lnbmFsPElDdXJyZW50TW9udGhEYXRlc1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV4dE1vbnRoTnVtYmVyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV4dE1vbnRoU2lnbmFsID0gc2lnbmFsPElDdXJyZW50TW9udGg+KFwiSmFudWFyeVwiKTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXh0WWVhck51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRNb250aERhdGVzU2lnbmFsID0gc2lnbmFsPElDdXJyZW50TW9udGhEYXRlc1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNQcmV2aW91c01vbnRoRGlzYWJsZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGlvblN0YXJ0ZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCA9IHNpZ25hbDxJU2VsZWN0ZWREYXRlc0NvbmZpZz4oeyBzdGFydERhdGU6IG51bGwsIGVuZERhdGU6IG51bGwgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNEYXRlc1ZhbGlkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbCA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMKTtcbiAgcHJpdmF0ZSByZWFkb25seSBob3ZlcmVkV2Vla1N0YXJ0U2lnbmFsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkRGF5c1NpZ25hbCA9IHNpZ25hbDxudW1iZXJbXT4oW10pO1xuXG4gIC8vIFRpbWUgc2VsZWN0aW9uIHNpZ25hbHNcbiAgcmVhZG9ubHkgc3RhcnRIb3VyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMTIpO1xuICByZWFkb25seSBzdGFydE1pbnV0ZVNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBzdGFydEFtUG1TaWduYWwgPSBzaWduYWw8c3RyaW5nPignQU0nKTtcbiAgcmVhZG9ubHkgZW5kSG91clNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDEyKTtcbiAgcmVhZG9ubHkgZW5kTWludXRlU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IGVuZEFtUG1TaWduYWwgPSBzaWduYWw8c3RyaW5nPignQU0nKTtcbiAgcmVhZG9ubHkgc3RhcnRIb3VyMjRTaWduYWwgPSBzaWduYWw8bnVtYmVyPigxMik7XG4gIHJlYWRvbmx5IGVuZEhvdXIyNFNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDEyKTtcbiAgXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgZm9yIHRlbXBsYXRlIGFjY2Vzc1xuICB3ZWVrRGF5cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMud2Vla0RheXNTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aE51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRNb250aFNpZ25hbCgpKTtcbiAgY3VycmVudFllYXJOdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICBuZXh0TW9udGhOdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgbmV4dE1vbnRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5uZXh0TW9udGhTaWduYWwoKSk7XG4gIG5leHRZZWFyTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsKCkpO1xuICBpc05leHRNb250aERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsKCkpO1xuICBzZWxlY3Rpb25TdGFydGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3Rpb25TdGFydGVkU2lnbmFsKCkpO1xuICBsb2NhbFNlbGVjdGVkRGF0ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpKTtcbiAgaXNEYXRlc1ZhbGlkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwoKSk7XG4gIHNlbGVjdGVkSXRlbUxhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbCgpKTtcbiAgaXNXZWVrbHlNb2RlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhKCkuZHBDb25maWc/LnNlbGVjdGlvbk1vZGUgPT09IFNFTEVDVElPTl9NT0RFLldFRUtMWSk7XG4gIGVuYWJsZURhdGVUYWJiaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhKCkuZW5hYmxlRGF0ZVRhYmJpbmcgIT09IGZhbHNlKTtcblxuICAvKiogQ2hpcHMgdG8gcmVuZGVyLCBub3JtYWxpc2VkIGZyb20gZHBDb25maWcuZGF5T3B0aW9ucy4gKi9cbiAgcmVhZG9ubHkgZGF5T3B0aW9ucyA9IGNvbXB1dGVkPElEYXlPcHRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZz8uZGF5T3B0aW9ucztcbiAgICBjb25zdCBzb3VyY2UgPSBBcnJheS5pc0FycmF5KGNvbmZpZ3VyZWQpICYmIGNvbmZpZ3VyZWQubGVuZ3RoID4gMCA/IGNvbmZpZ3VyZWQgOiBERUZBVUxUX0RBWV9PUFRJT05TO1xuICAgIGNvbnN0IG5vcm1hbGlzZWQ6IElEYXlPcHRpb25bXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKG9wdGlvbj8udmFsdWUpO1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpIHx8IHNlZW4uaGFzKHZhbHVlKSkgY29udGludWU7XG4gICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICBjb25zdCBsYWJlbCA9IGAke29wdGlvbj8ubGFiZWwgPz8gXCJcIn1gLnRyaW0oKTtcbiAgICAgIG5vcm1hbGlzZWQucHVzaCh7IGxhYmVsOiBsYWJlbCB8fCBgJHt2YWx1ZX1gLCB2YWx1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGlzZWQ7XG4gIH0pO1xuXG4gIC8qKiBSZW5kZXJzIG9ubHkgd2hlbiBleHBsaWNpdGx5IGVuYWJsZWQgYW5kIGNoaXBzIGV4aXN0LiAqL1xuICByZWFkb25seSBzaG93RGF5U2VsZWN0aW9uID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5kYXRhKCkuZHBDb25maWc/LnNob3dEYXlTZWxlY3Rpb24gPT09IHRydWUgJiYgdGhpcy5kYXlPcHRpb25zKCkubGVuZ3RoID4gMFxuICApO1xuICByZWFkb25seSBkYXlTZWxlY3Rpb25MYWJlbCA9IGNvbXB1dGVkKFxuICAgICgpID0+IGAke3RoaXMuZGF0YSgpLmRwQ29uZmlnPy5kYXlTZWxlY3Rpb25MYWJlbCA/PyBcIlwifWAudHJpbSgpIHx8IERFRkFVTFRfREFZX1NFTEVDVElPTl9MQUJFTFxuICApO1xuICByZWFkb25seSBpc0RheVNlbGVjdGlvblJlcXVpcmVkID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93RGF5U2VsZWN0aW9uKCkgJiYgdGhpcy5kYXRhKCkuZHBDb25maWc/LmRheVNlbGVjdGlvblJlcXVpcmVkID09PSB0cnVlXG4gICk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF5cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWREYXlzU2lnbmFsKCkpO1xuICByZWFkb25seSBpc0RheVNlbGVjdGlvblZhbGlkID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gIXRoaXMuaXNEYXlTZWxlY3Rpb25SZXF1aXJlZCgpIHx8IHRoaXMuc2VsZWN0ZWREYXlzU2lnbmFsKCkubGVuZ3RoID4gMFxuICApO1xuICAvKiogQXBwbHkgbmVlZHMgYSBjb21wbGV0ZSByYW5nZSBhbmQsIHdoZW4gbWFuZGF0ZWQsIGF0IGxlYXN0IG9uZSBkYXkuICovXG4gIHJlYWRvbmx5IGNhbkFwcGx5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc0RhdGVzVmFsaWQoKSAmJiB0aGlzLmlzRGF5U2VsZWN0aW9uVmFsaWQoKSk7XG4gIHJlYWRvbmx5IHNob3dEYXlTZWxlY3Rpb25IaW50ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5pc0RheVNlbGVjdGlvblJlcXVpcmVkKCkgJiYgdGhpcy5zZWxlY3RlZERheXNTaWduYWwoKS5sZW5ndGggPT09IDBcbiAgKTtcbiAgcmVhZG9ubHkgZGF5U2VsZWN0aW9uR3JvdXBBcmlhTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuZGF5U2VsZWN0aW9uTGFiZWwoKS5yZXBsYWNlKC86XFxzKiQvLCBcIlwiKTtcbiAgICByZXR1cm4gdGhpcy5pc0RheVNlbGVjdGlvblJlcXVpcmVkKCkgPyBgJHtiYXNlfSwgcmVxdWlyZWRgIDogYmFzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYW5jaG9ySW5kZXhMZWZ0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGVzID0gdGhpcy5jdXJyZW50TW9udGhEYXRlcygpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlO1xuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGUpO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJzZWQuaXNWYWxpZCgpICYmXG4gICAgICAgIHBhcnNlZC55ZWFyKCkgPT09IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSAmJlxuICAgICAgICBwYXJzZWQubW9udGgoKSA9PT0gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGRhdGVzLmZpbmRJbmRleChkID0+IGQuZGF0ZSA9PT0gcGFyc2VkLmRhdGUoKSAmJiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRlcy5maW5kSW5kZXgoZCA9PiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICB9KTtcblxuICByZWFkb25seSBhbmNob3JJbmRleFJpZ2h0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGVzID0gdGhpcy5uZXh0TW9udGhEYXRlcygpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlO1xuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGUpO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJzZWQuaXNWYWxpZCgpICYmXG4gICAgICAgIHBhcnNlZC55ZWFyKCkgPT09IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSAmJlxuICAgICAgICBwYXJzZWQubW9udGgoKSA9PT0gdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IGRhdGVzLmZpbmRJbmRleChkID0+IGQuZGF0ZSA9PT0gcGFyc2VkLmRhdGUoKSAmJiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRlcy5maW5kSW5kZXgoZCA9PiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXkpO1xuICB9KTtcblxuICByZWFkb25seSBwcmV2TW9udGhBcmlhTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcHJldiA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpLnN1YnRyYWN0KDEsICdtb250aCcpO1xuICAgIHJldHVybiBgUHJldmlvdXMgbW9udGgsIENsaWNrIHRvIFNlbGVjdCAke2dldE1vbnRoKHByZXYubW9udGgoKSl9ICR7cHJldi55ZWFyKCl9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbmV4dE1vbnRoQXJpYUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkYXlqcygpLnllYXIodGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKS5tb250aCh0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKS5hZGQoMSwgJ21vbnRoJyk7XG4gICAgcmV0dXJuIGBOZXh0IG1vbnRoLCBDbGljayB0byBTZWxlY3QgJHtnZXRNb250aChuZXh0Lm1vbnRoKCkpfSAke25leHQueWVhcigpfWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFwcGx5QnV0dG9uQXJpYUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhcnREYXRlLCBlbmREYXRlIH0gPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpO1xuICAgIGxldCBsYWJlbCA9IHN0YXJ0RGF0ZSAmJiBlbmREYXRlID8gYEFwcGx5LCBTZWxlY3RlZCBkYXRlIHJhbmdlIGZyb20gJHtzdGFydERhdGV9IHRvICR7ZW5kRGF0ZX1gIDogJ0FwcGx5JztcbiAgICBpZiAodGhpcy5zaG93RGF5U2VsZWN0aW9uKCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZERheUxhYmVscygpO1xuICAgICAgbGFiZWwgKz0gc2VsZWN0ZWQubGVuZ3RoID8gYCwgZGF5cyAke3NlbGVjdGVkLmpvaW4oJywgJyl9YCA6ICcsIG5vIGRheXMgc2VsZWN0ZWQnO1xuICAgICAgaWYgKHRoaXMuc2hvd0RheVNlbGVjdGlvbkhpbnQoKSkge1xuICAgICAgICBsYWJlbCArPSAnLCBzZWxlY3QgYXQgbGVhc3Qgb25lIGRheSB0byBjb250aW51ZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZERheUxhYmVscyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQodGhpcy5zZWxlY3RlZERheXNTaWduYWwoKSk7XG4gICAgcmV0dXJuIHRoaXMuZGF5T3B0aW9ucygpLmZpbHRlcihvcHRpb24gPT4gc2VsZWN0ZWQuaGFzKG9wdGlvbi52YWx1ZSkpLm1hcChvcHRpb24gPT4gb3B0aW9uLmxhYmVsKTtcbiAgfSk7XG5cbiAgY3VycmVudE1vbnRoRGF0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gRGVwZW5kZW5jaWVzOiBjdXJyZW50TW9udGhOdW1iZXJTaWduYWwsIGN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLCBsb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWxcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIH0pO1xuICBuZXh0TW9udGhEYXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIC8vIERlcGVuZGVuY2llczogbmV4dE1vbnRoTnVtYmVyU2lnbmFsLCBuZXh0WWVhck51bWJlclNpZ25hbCwgbG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIH0pO1xuXG5cbiAgLy8gVGltZSBmdW5jdGlvbmFsaXR5IGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgc3RhcnRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGFydEhvdXJTaWduYWwoKSk7XG4gIHN0YXJ0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGFydE1pbnV0ZVNpZ25hbCgpKTtcbiAgc3RhcnRBbVBtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGFydEFtUG1TaWduYWwoKSk7XG4gIGVuZEhvdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVuZEhvdXJTaWduYWwoKSk7XG4gIGVuZE1pbnV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZW5kTWludXRlU2lnbmFsKCkpO1xuICBlbmRBbVBtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lbmRBbVBtU2lnbmFsKCkpO1xuICBzdGFydEhvdXIyNCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRIb3VyMjRTaWduYWwoKSk7XG4gIGVuZEhvdXIyNCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZW5kSG91cjI0U2lnbmFsKCkpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ09OVEFJTkVSX0RBVEEpIHByaXZhdGUgaW5qZWN0ZWREYXRhOiBJRGF0ZVBpY2tlckRhdGEsXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWZcbiAgKSB7XG4gICAgdGhpcy5kYXRhID0gc2lnbmFsPElEYXRlUGlja2VyRGF0YT4odGhpcy5pbmplY3RlZERhdGEpOyBcbiAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQodGhpcy5kYXRhKCkuZGF0ZXMpO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldChmYWxzZSk7XG4gICAgaWYgKHRoaXMuZGF0YSgpLmRhdGVzLnN0YXJ0RGF0ZSAmJiB0aGlzLmRhdGEoKS5kYXRlcy5lbmREYXRlKSB7XG4gICAgICB0aGlzLmlzRGF0ZXNWYWxpZFNpZ25hbC5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0ZWRJdGVtTGFiZWwgZnJvbSBkYXRhLnNlbGVjdGVkUmFuZ2VMYWJlbCBpZiBhdmFpbGFibGVcbiAgICBpZiAodGhpcy5kYXRhKCkuc2VsZWN0ZWRSYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhYmVsU2lnbmFsLnNldCh0aGlzLmRhdGEoKS5zZWxlY3RlZFJhbmdlTGFiZWwpO1xuICAgIH1cblxuICAgIC8vIFByZS1zZWxlY3QgaW5jb21pbmcgZGF5c1xuICAgIHRoaXMuc2VsZWN0ZWREYXlzU2lnbmFsLnNldCh0aGlzLnNhbml0aXplU2VsZWN0ZWREYXlzKHRoaXMuZGF0YSgpLmRhdGVzPy5zZWxlY3RlZERheXMpKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGRheWpzSW5zdGFuY2Ugd2l0aCB0aW1lem9uZSBoYW5kbGluZ1xuICAgIGlmICh0aGlzLmRhdGEoKT8uZHBDb25maWc/LnRpbWV6b25lKSB7XG4gICAgICB0aGlzLmRheWpzSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBkYXlqcy50eihhcmdzWzBdLCBhcmdzWzFdIHx8ICdERC9NTS9ZWVlZJywgdGhpcy5kYXRhKCkuZHBDb25maWcudGltZXpvbmUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgcGFyc2luZyBkYXRlIHdpdGggdGltZXpvbmU6JywgZXJyb3IsICdhcmdzOicsIGFyZ3MpO1xuICAgICAgICAgIHJldHVybiBkYXlqcyhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgc2FmZWx5IHVzaW5nIHNpZ25hbHNcbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5kYXlqc0luc3RhbmNlKCkubW9udGgoKSk7XG4gICAgdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXMuZGF5anNJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmRheWpzSW5zdGFuY2UoKS55ZWFyKCkpO1xuICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuZGF5anNJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLnllYXIoKSk7XG4gICAgdGhpcy53ZWVrRGF5c1NpZ25hbC5zZXQodGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5kYXlqc0luc3RhbmNlKCkuZGF5KCkgPT09IGluZGV4XG4gICAgfSkpKTtcbiAgICBcbiAgICBpZiAoIXRoaXMuZGF0YSgpPy5kcENvbmZpZz8uZm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGEoKS5kcENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhKCkuZHBDb25maWcsXG4gICAgICAgIGZvcm1hdDogREFURV9GT1JNQVRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNhbGVuZGFyIGZyb20gaW5pdGlhbCBzZWxlY3RlZCBkYXRlc1xuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJGcm9tU2VsZWN0ZWREYXRlcygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplVGltZVZhbHVlcygpO1xuXG4gICAgaWYodGhpcy5kYXRhKCk/LnNob3dQcmV2TW9udGggJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpe1xuICAgICAgdGhpcy5uYXZpZ2F0ZU1vbnRoKE1PTlRIX05BVl9ESVJFQ1RJT04uUFJFVklPVVMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55LCBpc1N0YXJ0PzogYm9vbGVhbiwgaXNFbmQ/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgbGFiZWwgPSBgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn1gO1xuICAgIGlmIChpc1N0YXJ0ICYmIGlzRW5kKSBsYWJlbCArPSAnLCBzZWxlY3RlZCBkYXRlJztcbiAgICBlbHNlIGlmIChpc1N0YXJ0KSBsYWJlbCArPSAnLCBzZWxlY3RlZCBzdGFydCBkYXRlJztcbiAgICBlbHNlIGlmIChpc0VuZCkgbGFiZWwgKz0gJywgc2VsZWN0ZWQgZW5kIGRhdGUnO1xuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgb25EYXlDZWxsS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgcGFuZTogRGF0ZVJhbmdlUGFuZSwgZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXkgYXMgQ2FsZW5kYXJBcnJvd0tleTtcblxuICAgIGNvbnN0IGFsbG93ZWRLZXlzOiBDYWxlbmRhckFycm93S2V5W10gPSBbQ0FMRU5EQVJfQVJST1dfS0VZLkxFRlQsIENBTEVOREFSX0FSUk9XX0tFWS5SSUdIVCwgQ0FMRU5EQVJfQVJST1dfS0VZLlVQLCBDQUxFTkRBUl9BUlJPV19LRVkuRE9XTl07XG4gICAgaWYgKCFhbGxvd2VkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IGxlZnREYXRlcyA9IHRoaXMuY3VycmVudE1vbnRoRGF0ZXMoKTtcbiAgICBjb25zdCByaWdodERhdGVzID0gdGhpcy5uZXh0TW9udGhEYXRlcygpO1xuXG4gICAgaWYgKGtleSA9PT0gQ0FMRU5EQVJfQVJST1dfS0VZLkRPV04gJiYgcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgJiYgdGhpcy5pc0xhc3RSb3coZnJvbUluZGV4LCBsZWZ0RGF0ZXMpKSB7XG4gICAgICBjb25zdCBjb2wgPSBmcm9tSW5kZXggJSA3O1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5maW5kU2VsZWN0YWJsZUluQ29sdW1uKHJpZ2h0RGF0ZXMsIGNvbCwgQ09MVU1OX05BVl9ESVJFQ1RJT04uRk9SV0FSRCk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLlJJR0hULCBpZHgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IENBTEVOREFSX0FSUk9XX0tFWS5VUCAmJiBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuUklHSFQgJiYgdGhpcy5pc0ZpcnN0Um93KGZyb21JbmRleCkpIHtcbiAgICAgIGNvbnN0IGNvbCA9IGZyb21JbmRleCAlIDc7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmZpbmRTZWxlY3RhYmxlSW5Db2x1bW4obGVmdERhdGVzLCBjb2wsIENPTFVNTl9OQVZfRElSRUNUSU9OLkJBQ0tXQVJEKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICB0aGlzLmZvY3VzRHJwQ2VsbChEQVRFX1JBTkdFX1BBTkUuTEVGVCwgaWR4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlcyA9IHBhbmUgPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gbGVmdERhdGVzIDogcmlnaHREYXRlcztcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5maW5kTmV4dEZvY3VzYWJsZURheUluZGV4KGZyb21JbmRleCwga2V5LCBkYXRlcyk7XG4gICAgaWYgKG5leHQgPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c0RycENlbGwocGFuZSwgbmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTmV4dEZvY3VzYWJsZURheUluZGV4KGZyb21JbmRleDogbnVtYmVyLCBrZXk6IENhbGVuZGFyQXJyb3dLZXksIGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSk6IG51bWJlciB7XG4gICAgbGV0IHN0ZXA6IG51bWJlcjtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSBDQUxFTkRBUl9BUlJPV19LRVkuTEVGVDpcbiAgICAgICAgc3RlcCA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ0FMRU5EQVJfQVJST1dfS0VZLlJJR0hUOlxuICAgICAgICBzdGVwID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENBTEVOREFSX0FSUk9XX0tFWS5VUDpcbiAgICAgICAgc3RlcCA9IC03O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ0FMRU5EQVJfQVJST1dfS0VZLkRPV046XG4gICAgICAgIHN0ZXAgPSA3O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgaSA9IGZyb21JbmRleCArIHN0ZXA7XG4gICAgd2hpbGUgKGkgPj0gMCAmJiBpIDwgZGF0ZXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5pc0ZvY3VzYWJsZShkYXRlc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgICBpICs9IHN0ZXA7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNEcnBDZWxsKHBhbmU6IERhdGVSYW5nZVBhbmUsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9XG4gICAgICBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVFxuICAgICAgICA/IGBtaXMtZHJwLWZvY3VzYWJsZS1sZWZ0LSR7aW5kZXh9YFxuICAgICAgICA6IGBtaXMtZHJwLWZvY3VzYWJsZS1yaWdodC0ke2luZGV4fWA7XG4gICAgdGhpcy5mb2N1c0VsZW1lbnRCeUlkKGlkKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBmb2N1c0VsZW1lbnRCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KGAjJHtDU1MuZXNjYXBlKGlkKX1gLCB0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlc3RvcmVGb2N1c1RvQ2FsZW5kYXJEYXkodGFyZ2V0OiBEYXlqcyk6IHZvaWQge1xuICAgIGlmICghdGFyZ2V0Py5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGltZXIoMClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXN0b3JlRm9jdXNUb0NhbGVuZGFyRGF5KHRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlRm9jdXNBcHBseUJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aW1lcigwKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnRCeUlkKFwibWlzLWRycC1hcHBseS1idG5cIik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZUZvY3VzVG9DYWxlbmRhckRheSh0YXJnZXQ6IERheWpzKTogdm9pZCB7XG4gICAgY29uc3QgeSA9IHRhcmdldC55ZWFyKCk7XG4gICAgY29uc3QgbSA9IHRhcmdldC5tb250aCgpO1xuICAgIGNvbnN0IGQgPSB0YXJnZXQuZGF0ZSgpO1xuXG4gICAgY29uc3QgbGVmdFkgPSB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCk7XG4gICAgY29uc3QgbGVmdE0gPSB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpO1xuICAgIGNvbnN0IHJpZ2h0WSA9IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKTtcbiAgICBjb25zdCByaWdodE0gPSB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpO1xuXG4gICAgaWYgKGxlZnRZID09PSB5ICYmIGxlZnRNID09PSBtKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmZpbmREYXlJbmRleEluTW9udGhHcmlkKHRoaXMuY3VycmVudE1vbnRoRGF0ZXMoKSwgZCk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLkxFRlQsIGlkeCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyaWdodFkgPT09IHkgJiYgcmlnaHRNID09PSBtKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmZpbmREYXlJbmRleEluTW9udGhHcmlkKHRoaXMubmV4dE1vbnRoRGF0ZXMoKSwgZCk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLlJJR0hULCBpZHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZERheUluZGV4SW5Nb250aEdyaWQoZGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdLCBkYXlPZk1vbnRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChkYXRlc1tpXS5kYXRlID09PSBkYXlPZk1vbnRoICYmIGRhdGVzW2ldLmRhdGUgPiAwKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBwcml2YXRlIGlzRm9jdXNhYmxlKGQ6IElDdXJyZW50TW9udGhEYXRlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkLmRhdGUgPiAwICYmICFkLmlzRGlzYWJsZWREYXk7XG4gIH1cblxuICBwcml2YXRlIGlzRmlyc3RSb3coaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBNYXRoLmZsb29yKGluZGV4IC8gNykgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzTGFzdFJvdyhpbmRleDogbnVtYmVyLCBkYXRlczogSUN1cnJlbnRNb250aERhdGVzW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihpbmRleCAvIDcpID09PSBNYXRoLmZsb29yKChkYXRlcy5sZW5ndGggLSAxKSAvIDcpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU2VsZWN0YWJsZUluQ29sdW1uKFxuICAgIGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSxcbiAgICBjb2w6IG51bWJlcixcbiAgICBkaXJlY3Rpb246IENvbHVtbk5hdkRpcmVjdGlvblxuICApOiBudW1iZXIge1xuICAgIGlmIChkaXJlY3Rpb24gPT09IENPTFVNTl9OQVZfRElSRUNUSU9OLkZPUldBUkQpIHtcbiAgICAgIGZvciAobGV0IGkgPSBjb2w7IGkgPCBkYXRlcy5sZW5ndGg7IGkgKz0gNykge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzYWJsZShkYXRlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gZGF0ZXMubGVuZ3RoIC0gNyArIGNvbDsgaSA+PSAwOyBpIC09IDcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2FibGUoZGF0ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNaW5NYXhEYXlzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGlmIChtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbC5zZXQobWluRGF0ZS5pc1NhbWVPckFmdGVyKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKSk7XG4gICAgfVxuICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhKCkuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwuc2V0KG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogTW9udGhOYXZEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgdGhpc01vbnRoOiBEYXlqcyA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVCkge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uUFJFVklPVVMpIHtcbiAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgubW9udGgoKSk7XG4gICAgdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXNNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICBpZiAodGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSA9PT0gMCAmJiBkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uUFJFVklPVVMpIHtcbiAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIC0gMSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVCkge1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgICB9ZWxzZSBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA9PT0gMCAmJiBkaXJlY3Rpb24gPT09IE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVCkge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkgPT09IDExICYmIGRpcmVjdGlvbiA9PT0gTU9OVEhfTkFWX0RJUkVDVElPTi5QUkVWSU9VUykge1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkgLSAxKTtcbiAgICB9ZWxzZXtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcblxuICAgIC8vIE1vdmUgZm9jdXMgaW50byB0aGUgbmV3bHkgcmV2ZWFsZWQgcGFuZWwgc28gdGhlIGJ1dHRvbidzIHVwZGF0ZWQgYXJpYS1sYWJlbCBpc24ndCByZS1hbm5vdW5jZWRcbiAgICBpZiAoZGlyZWN0aW9uID09PSBNT05USF9OQVZfRElSRUNUSU9OLlBSRVZJT1VTKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRNb250aERhdGVzKCkuZmluZEluZGV4KGQgPT4gdGhpcy5pc0ZvY3VzYWJsZShkKSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgdGhpcy5mb2N1c0RycENlbGwoREFURV9SQU5HRV9QQU5FLkxFRlQsIGlkeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMubmV4dE1vbnRoRGF0ZXMoKS5maW5kSW5kZXgoZCA9PiB0aGlzLmlzRm9jdXNhYmxlKGQpKTtcbiAgICAgICAgaWYgKGZhbGxiYWNrID49IDApIHRoaXMuZm9jdXNEcnBDZWxsKERBVEVfUkFOR0VfUEFORS5SSUdIVCwgZmFsbGJhY2spO1xuICAgICAgICBlbHNlIHRoaXMuZm9jdXNFbGVtZW50QnlJZCgnbWlzLWRycC1jYW5jZWwtYnRuJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMubmV4dE1vbnRoRGF0ZXMoKS5maW5kSW5kZXgoZCA9PiB0aGlzLmlzRm9jdXNhYmxlKGQpKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICB0aGlzLmZvY3VzRHJwQ2VsbChEQVRFX1JBTkdFX1BBTkUuUklHSFQsIGlkeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuY3VycmVudE1vbnRoRGF0ZXMoKS5maW5kSW5kZXgoZCA9PiB0aGlzLmlzRm9jdXNhYmxlKGQpKTtcbiAgICAgICAgaWYgKGZhbGxiYWNrID49IDApIHRoaXMuZm9jdXNEcnBDZWxsKERBVEVfUkFOR0VfUEFORS5MRUZULCBmYWxsYmFjayk7XG4gICAgICAgIGVsc2UgdGhpcy5mb2N1c0VsZW1lbnRCeUlkKCdtaXMtZHJwLWNhbmNlbC1idG4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNhbGVuZGFyIG1vbnRoL3llYXIgYmFzZWQgb24gc2VsZWN0ZWQgZGF0ZXNcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCBjaGFuZ2VzIHRvIGtlZXAgY2FsZW5kYXIgaW4gc3luY1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDYWxlbmRhckZyb21TZWxlY3RlZERhdGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxvY2FsU2VsZWN0ZWREYXRlcyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk7XG4gICAgbGV0IHNlbGVjdGVkU3RhcnREYXRlOiBEYXlqcztcblxuICAgIGlmIChsb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSkge1xuICAgICAgICBzZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhsb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZFN0YXJ0RGF0ZSA9IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkU3RhcnREYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCkpO1xuICAgICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZFN0YXJ0RGF0ZS5hZGQoMSwgXCJtb250aFwiKS55ZWFyKCkpO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUuZ2V0KFwibW9udGhcIikpO1xuICAgICAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikubW9udGgoKSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzZWxlY3RlZEVuZERhdGUgPSBsb2NhbFNlbGVjdGVkRGF0ZXM/LmVuZERhdGUgPyB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMobG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUpIDogbnVsbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChzZWxlY3RlZEVuZERhdGUgJiYgc2VsZWN0ZWRFbmREYXRlLmlzVmFsaWQoKSAmJiBzZWxlY3RlZEVuZERhdGUuaXNBZnRlcihzZWxlY3RlZFN0YXJ0RGF0ZSwgJ21vbnRoJykpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZEVuZERhdGUubW9udGgoKSk7XG4gICAgICAgICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZEVuZERhdGUueWVhcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBtb250aCBsYWJlbHNcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICAgICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcblxuICAgICAgICAvLyBVcGRhdGUgY2FsZW5kYXIgZGF0ZXMgdG8gcmVmbGVjdCB0aGUgc2VsZWN0ZWQgZGF0ZXNcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgICAgICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZURhdGVzKG1vbnRoOiBudW1iZXIsIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXIpOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSB7XG4gICAgbGV0IGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gZGF5anMoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF5c0luTW9udGgoKTtcbiAgICBmb3IgKGxldCBjdXJyZW50RGF0ZSA9IDE7IGN1cnJlbnREYXRlIDw9IGRheXNJbk1vbnRoOyBjdXJyZW50RGF0ZSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gZGF5anMoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSk7XG4gICAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhKCkuZGF0ZXNEaXNhYmxlZC5zb21lKGQgPT4gZCA9PT0gZGF0ZVN0cmluZyk7XG4gICAgICAvLyBQYXJzZSBtaW4vbWF4IGRhdGVzIHNhZmVseSAtIHRyeSBkYXRlLW9ubHkgZm9ybWF0IGZpcnN0LCB0aGVuIGZ1bGwgZm9ybWF0XG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWluRGF0ZVN0ciA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICBtaW5EYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKG1pbkRhdGVTdHIpO1xuICAgICAgICAgIGlmICghbWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG1pbkRhdGUgPSBkYXlqcyh0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHBhcnNpbmcgbWluIGRhdGU6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWF4RGF0ZVN0ciA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGUuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICBtYXhEYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKG1heERhdGVTdHIpO1xuICAgICAgICAgIGlmICghbWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG1heERhdGUgPSBkYXlqcyh0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHBhcnNpbmcgbWF4IGRhdGU6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtaW5EYXRlICYmIG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1pbkRhdGUuaXNBZnRlcihkYXRlLCBcImRheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtYXhEYXRlICYmIG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1heERhdGUuaXNCZWZvcmUoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kYXRhKCk/LmRwQ29uZmlnPy5tYXhBbGxvd2VkUmFuZ2UgPiAwICYmXG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5zdGFydERhdGUgPz8gZmFsc2UpICYmICghKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSA/PyBmYWxzZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk/LnN0YXJ0RGF0ZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgIGNvbnN0IG1heEVuZERhdGUgPSBzdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5kYXRhKCkuZHBDb25maWcubWF4QWxsb3dlZFJhbmdlIC0gMSwgJ2RheXMnKTtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IGRhdGUuaXNBZnRlcihtYXhFbmREYXRlLCAnZGF5JykgXG4gICAgICB9XG4gICAgICBjb25zdCBpc0N1cnJlbnREYXkgPVxuICAgICAgICB0aGlzLmRheWpzSW5zdGFuY2UoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSkuZm9ybWF0KHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgPT09XG4gICAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggZGF0ZS1vbmx5IGFuZCBkYXRldGltZSBmb3JtYXRzKVxuICAgICAgbGV0IHN0YXJ0RGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk/LnN0YXJ0RGF0ZTtcbiAgICAgIGxldCBlbmREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKT8uZW5kRGF0ZTtcbiAgICAgIFxuICAgICAgLy8gT25seSBleHRyYWN0IGRhdGUgcGFydCBpZiB0aGUgZm9ybWF0IGNvbnRhaW5zIHRpbWUgY29tcG9uZW50c1xuICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnSEgnKSB8fCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ21tJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgLy8gRm9yIGRhdGV0aW1lIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXh0cmFjdCBqdXN0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBmdWxsIHN0cmluZyBhbmQgdGhlbiBmb3JtYXQgaXQgYXMgZGF0ZS1vbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgIGlmIChzdGFydERhdGVTdHJpbmcpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRTdGFydCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpO1xuICAgICAgICAgIGlmIChwYXJzZWRTdGFydC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZVN0cmluZyA9IHBhcnNlZFN0YXJ0LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmREYXRlU3RyaW5nKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkRW5kID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGVuZERhdGVTdHJpbmcpO1xuICAgICAgICAgIGlmIChwYXJzZWRFbmQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBieSBmaW5kaW5nIHRoZSB0aW1lIGJvdW5kYXJ5IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICBlbmREYXRlU3RyaW5nID0gcGFyc2VkRW5kLmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFBhcnNlIHRoZSBzZWxlY3RlZCBkYXRlcyB0byBnZXQgcHJvcGVyIGRheWpzIGluc3RhbmNlcyBmb3IgY29tcGFyaXNvblxuICAgICAgY29uc3Qgc3RhcnREYXRlUGFyc2VkID0gc3RhcnREYXRlU3RyaW5nID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHN0YXJ0RGF0ZVN0cmluZykgOiBudWxsO1xuICAgICAgY29uc3QgZW5kRGF0ZVBhcnNlZCA9IGVuZERhdGVTdHJpbmcgPyB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoZW5kRGF0ZVN0cmluZykgOiBudWxsO1xuICAgICAgXG4gICAgICBjb25zdCBpc1NlbGVjdGVkU3RhcnREYXkgPVxuICAgICAgICAhaXNEaXNhYmxlZERheSAmJlxuICAgICAgICBzdGFydERhdGVQYXJzZWQgJiZcbiAgICAgICAgc3RhcnREYXRlUGFyc2VkLmlzVmFsaWQoKSAmJlxuICAgICAgICBkYXRlLmlzU2FtZShzdGFydERhdGVQYXJzZWQsICdkYXknKTtcbiAgICAgICAgXG4gICAgICBjb25zdCBpc1NlbGVjdGVkRW5kRGF5ID1cbiAgICAgICAgIWlzRGlzYWJsZWREYXkgJiZcbiAgICAgICAgZW5kRGF0ZVBhcnNlZCAmJlxuICAgICAgICBlbmREYXRlUGFyc2VkLmlzVmFsaWQoKSAmJlxuICAgICAgICBkYXRlLmlzU2FtZShlbmREYXRlUGFyc2VkLCAnZGF5Jyk7XG4gICAgICAgIFxuICAgICAgLy8gRm9yIHJhbmdlIGNhbGN1bGF0aW9uLCB1c2UgdGhlIGFscmVhZHkgcGFyc2VkIGRhdGVzXG4gICAgICBjb25zdCBpc0FmdGVyU2VsZWN0ZWRTdGFydERhdGUgPSBzdGFydERhdGVQYXJzZWQgPyB0aGlzLmRheWpzSW5zdGFuY2UoZGF0ZSkuaXNBZnRlcihzdGFydERhdGVQYXJzZWQsIFwiZGF5XCIpIDogZmFsc2U7XG4gICAgICBjb25zdCBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZSA9IGVuZERhdGVQYXJzZWQgPyB0aGlzLmRheWpzSW5zdGFuY2UoZGF0ZSkuaXNCZWZvcmUoZW5kRGF0ZVBhcnNlZCwgXCJkYXlcIikgOiBmYWxzZTtcbiAgICAgIFxuICAgICAgY29uc3QgaW5SYW5nZURheSA9XG4gICAgICAgIHN0YXJ0RGF0ZVBhcnNlZCAmJiBlbmREYXRlUGFyc2VkICYmXG4gICAgICAgIHN0YXJ0RGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiYgZW5kRGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgaXNBZnRlclNlbGVjdGVkU3RhcnREYXRlICYmXG4gICAgICAgIGlzQmVmb3JlU2VsZWN0ZWRFbmREYXRlO1xuICAgICAgZGF0ZXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICB3ZWVrRGF5OiBkYXRlLmRheSgpLFxuICAgICAgICBpc0N1cnJlbnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgaW5SYW5nZURheSxcbiAgICAgICAgdG9hc3RNZXNzYWdlOiB0aGlzLmRhdGEoKS5tZXNzYWdlcy5maW5kKHEgPT4gZGF0ZS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KSA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICBpc0Rpc2FibGVkRGF5XG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGRhdGVzWzBdLndlZWtEYXk7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGRhdGVzLnVuc2hpZnQoeyBkYXRlOiAwLCB3ZWVrRGF5OiBpIC0gMSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbnNldEhvdmVyZWRXZWVrKHBhbmU6IERhdGVSYW5nZVBhbmUsIGRheTogSUN1cnJlbnRNb250aERhdGVzKTogdm9pZCB7XG4gIGlmICghdGhpcy5pc1dlZWtseU1vZGUoKSB8fCBkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gIGNvbnN0IHllYXIgPSBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVCA/IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKTtcbiAgY29uc3QgbW9udGggPSBwYW5lID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVCA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpO1xuICBjb25zdCBkYXRlID0gZGF5anMoKS55ZWFyKHllYXIpLm1vbnRoKG1vbnRoKS5kYXRlKGRheS5kYXRlKTtcbiAgY29uc3QgbW9uZGF5ID0gZGF0ZS5zdWJ0cmFjdCgoZGF0ZS5kYXkoKSArIDYpICUgNywgJ2RheScpO1xuICB0aGlzLmhvdmVyZWRXZWVrU3RhcnRTaWduYWwuc2V0KG1vbmRheS5mb3JtYXQoSVNPX0RBVEVfRk9STUFUKSk7XG59XG5cbmNsZWFySG92ZXJlZFdlZWsoKTogdm9pZCB7XG4gIHRoaXMuaG92ZXJlZFdlZWtTdGFydFNpZ25hbC5zZXQobnVsbCk7XG59XG5cbmlzSW5Ib3ZlcmVkV2VlayhwYW5lOiBEYXRlUmFuZ2VQYW5lLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcyk6IGJvb2xlYW4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLmhvdmVyZWRXZWVrU3RhcnRTaWduYWwoKTtcbiAgaWYgKCF3ZWVrU3RhcnQgfHwgZGF5LmRhdGUgPD0gMCB8fCBkYXkuaXNEaXNhYmxlZERheSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB5ZWFyID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCk7XG4gIGNvbnN0IG1vbnRoID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKTtcbiAgY29uc3QgZGF0ZSA9IGRheWpzKCkueWVhcih5ZWFyKS5tb250aChtb250aCkuZGF0ZShkYXkuZGF0ZSk7XG4gIGNvbnN0IG1vbmRheSA9IGRheWpzKHdlZWtTdGFydCwgSVNPX0RBVEVfRk9STUFUKTtcbiAgY29uc3Qgc3VuZGF5ID0gbW9uZGF5LmFkZCg2LCAnZGF5Jyk7XG4gIHJldHVybiAhZGF0ZS5pc0JlZm9yZShtb25kYXksICdkYXknKSAmJiAhZGF0ZS5pc0FmdGVyKHN1bmRheSwgJ2RheScpO1xufVxuXG5pc0hvdmVyZWRXZWVrU3RhcnQocGFuZTogRGF0ZVJhbmdlUGFuZSwgZGF5OiBJQ3VycmVudE1vbnRoRGF0ZXMpOiBib29sZWFuIHtcbiAgY29uc3Qgd2Vla1N0YXJ0ID0gdGhpcy5ob3ZlcmVkV2Vla1N0YXJ0U2lnbmFsKCk7XG4gIGlmICghd2Vla1N0YXJ0IHx8IGRheS5kYXRlIDw9IDAgfHwgZGF5LmlzRGlzYWJsZWREYXkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgeWVhciA9IHBhbmUgPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpO1xuICBjb25zdCBtb250aCA9IHBhbmUgPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCk7XG4gIHJldHVybiBkYXlqcygpLnllYXIoeWVhcikubW9udGgobW9udGgpLmRhdGUoZGF5LmRhdGUpLmlzU2FtZShkYXlqcyh3ZWVrU3RhcnQsIElTT19EQVRFX0ZPUk1BVCksICdkYXknKTtcbn1cblxuaXNIb3ZlcmVkV2Vla0VuZChwYW5lOiBEYXRlUmFuZ2VQYW5lLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcyk6IGJvb2xlYW4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLmhvdmVyZWRXZWVrU3RhcnRTaWduYWwoKTtcbiAgaWYgKCF3ZWVrU3RhcnQgfHwgZGF5LmRhdGUgPD0gMCB8fCBkYXkuaXNEaXNhYmxlZERheSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB5ZWFyID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCk7XG4gIGNvbnN0IG1vbnRoID0gcGFuZSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKTtcbiAgcmV0dXJuIGRheWpzKCkueWVhcih5ZWFyKS5tb250aChtb250aCkuZGF0ZShkYXkuZGF0ZSkuaXNTYW1lKGRheWpzKHdlZWtTdGFydCwgSVNPX0RBVEVfRk9STUFUKS5hZGQoNiwgJ2RheScpLCAnZGF5Jyk7XG59XG5cbnByaXZhdGUgc2VsZWN0V2VlayhjbGlja2VkRGF0ZTogRGF5anMpOiB2b2lkIHtcbiAgY29uc3QgZGF5T2ZXZWVrID0gY2xpY2tlZERhdGUuZGF5KCk7IC8vIDA9U3VuIOKApiA2PVNhdFxuICBjb25zdCBkYXlzRnJvbU1vbmRheSA9IChkYXlPZldlZWsgKyA2KSAlIDc7IC8vIE1vbuKGkjAsIOKApiwgU3Vu4oaSNlxuICBsZXQgd2Vla1N0YXJ0ID0gY2xpY2tlZERhdGUuc3VidHJhY3QoZGF5c0Zyb21Nb25kYXksIFwiZGF5XCIpO1xuICBsZXQgd2Vla0VuZCA9IHdlZWtTdGFydC5hZGQoNiwgXCJkYXlcIik7XG5cbiAgY29uc3QgbWluRGF0ZSA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGVcbiAgICA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlKVxuICAgIDogbnVsbDtcbiAgY29uc3QgbWF4RGF0ZSA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGVcbiAgICA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlKVxuICAgIDogbnVsbDtcblxuICBpZiAobWluRGF0ZT8uaXNWYWxpZCgpICYmIHdlZWtTdGFydC5pc0JlZm9yZShtaW5EYXRlLCBcImRheVwiKSkge1xuICAgIHdlZWtTdGFydCA9IG1pbkRhdGU7XG4gIH1cbiAgaWYgKG1heERhdGU/LmlzVmFsaWQoKSAmJiB3ZWVrRW5kLmlzQWZ0ZXIobWF4RGF0ZSwgXCJkYXlcIikpIHtcbiAgICB3ZWVrRW5kID0gbWF4RGF0ZTtcbiAgfVxuXG4gIHRoaXMuc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwuc2V0KHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMKTtcbiAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwuc2V0KHtcbiAgICBzdGFydERhdGU6IHdlZWtTdGFydC5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KSxcbiAgICBlbmREYXRlOiB3ZWVrRW5kLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpLFxuICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUwsXG4gIH0pO1xuICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWRTaWduYWwuc2V0KGZhbHNlKTtcbiAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KHRydWUpO1xuICB0aGlzLnVwZGF0ZUNhbGVuZGFyRnJvbVNlbGVjdGVkRGF0ZXMoKTtcbiAgdGhpcy5zY2hlZHVsZUZvY3VzQXBwbHlCdXR0b24oKTtcbn1cblxuc2VsZWN0RGF5KGZyb206IERhdGVSYW5nZVBhbmUsIGRheTogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gIGlmICghZGF5LmlzRGlzYWJsZWREYXkpIHtcbiAgICBjb25zdCBjbGlja2VkQ2FsZW5kYXJEYXRlID0gZGF5anMoKVxuICAgICAgLnllYXIoZnJvbSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAubW9udGgoZnJvbSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSlcbiAgICAgIC5kYXRlKGRheS5kYXRlKTtcblxuICAgIGlmICh0aGlzLmlzV2Vla2x5TW9kZSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdFdlZWsoY2xpY2tlZENhbGVuZGFyRGF0ZSk7XG4gICAgICBpZiAoZGF5LnRvYXN0TWVzc2FnZSkge1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQodGhpcy5DVVNUT01fUkFOR0VfTEFCRUwpO1xuICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXJ0ZWRTaWduYWwoKSkge1xuICAgICAgY29uc3QgZGF5anNEYXkgPSBjbGlja2VkQ2FsZW5kYXJEYXRlO1xuXG4gICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmcm9tIGV4aXN0aW5nIHN0YXJ0IGRhdGUgZm9yIGNvbXBhcmlzb25cbiAgICAgIGxldCBzdGFydERhdGVTdHJpbmcgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZTtcbiAgICAgIFxuICAgICAgLy8gT25seSBleHRyYWN0IGRhdGUgcGFydCBpZiB0aGUgZm9ybWF0IGNvbnRhaW5zIHRpbWUgY29tcG9uZW50c1xuICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnSEgnKSB8fCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ21tJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgLy8gRm9yIGRhdGV0aW1lIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXh0cmFjdCBqdXN0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBmdWxsIHN0cmluZyBhbmQgdGhlbiBmb3JtYXQgaXQgYXMgZGF0ZS1vbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgIGlmIChzdGFydERhdGVTdHJpbmcpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRTdGFydCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpO1xuICAgICAgICAgIGlmIChwYXJzZWRTdGFydC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZVN0cmluZyA9IHBhcnNlZFN0YXJ0LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZVN0cmluZyA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIFxuICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLCBtYWtlIGl0IHRoZSBuZXcgc3RhcnQgZGF0ZVxuICAgICAgaWYgKHN0YXJ0RGF0ZSAmJiBkYXlqc0RheS5pc0JlZm9yZShzdGFydERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBub3cgPSBkYXlqcygpO1xuICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcGF0dGVybiB3aGVyZSB0aW1lIHN0YXJ0cyAoSEgsIG1tLCBzcywgQSwgYSlcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5tYXRjaCgvKFxccyspKEhIfG1tfHNzfEF8YSkvKTtcbiAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZyh0aW1lU3RhcnRJbmRleCArIHRpbWVTdGFydE1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXlqc0RheS5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZyA9IG5vdy5mb3JtYXQodGltZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGRhdGVTdHJpbmcgKyB0aW1lU3RhcnRNYXRjaFsxXSArIHRpbWVTdHJpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIG5vIHRpbWUgcGF0dGVybiBmb3VuZFxuICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwuc2V0KHtcbiAgICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyRnJvbVNlbGVjdGVkRGF0ZXMoKTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVJlc3RvcmVGb2N1c1RvQ2FsZW5kYXJEYXkoY2xpY2tlZENhbGVuZGFyRGF0ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgXG4gICAgICBsZXQgZm9ybWF0dGVkRW5kRGF0ZSA9IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgLy8gTG9vayBmb3IgdGhlIHBhdHRlcm4gd2hlcmUgdGltZSBzdGFydHMgKEhILCBtbSwgc3MsIEEsIGEpXG4gICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZyh0aW1lU3RhcnRJbmRleCArIHRpbWVTdGFydE1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRheWpzRGF5LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgY29uc3QgdGltZVN0cmluZyA9IG5vdy5mb3JtYXQodGltZU9ubHlGb3JtYXQpO1xuICAgICAgICAgIGZvcm1hdHRlZEVuZERhdGUgPSBkYXRlU3RyaW5nICsgdGltZVN0YXJ0TWF0Y2hbMV0gKyB0aW1lU3RyaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIG5vIHRpbWUgcGF0dGVybiBmb3VuZFxuICAgICAgICAgIGZvcm1hdHRlZEVuZERhdGUgPSBkYXlqc0RheS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICAuLi50aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLFxuICAgICAgICBlbmREYXRlOiBmb3JtYXR0ZWRFbmREYXRlLFxuICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJGcm9tU2VsZWN0ZWREYXRlcygpO1xuICAgICAgdGhpcy5zY2hlZHVsZUZvY3VzQXBwbHlCdXR0b24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydGVkU2lnbmFsLnNldCh0cnVlKTtcbiAgICAgIFxuICAgICAgbGV0IGZvcm1hdHRlZFN0YXJ0RGF0ZSA9IGRheWpzKClcbiAgICAgICAgLnllYXIoZnJvbSA9PT0gREFURV9SQU5HRV9QQU5FLkxFRlQgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgIC5tb250aChmcm9tID09PSBEQVRFX1JBTkdFX1BBTkUuTEVGVCA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgLy8gTG9vayBmb3IgdGhlIHBhdHRlcm4gd2hlcmUgdGltZSBzdGFydHMgKEhILCBtbSwgc3MsIEEsIGEpXG4gICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZyh0aW1lU3RhcnRJbmRleCArIHRpbWVTdGFydE1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRheWpzKClcbiAgICAgICAgICAgIC55ZWFyKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgICAgIC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBub3cuZm9ybWF0KHRpbWVPbmx5Rm9ybWF0KTtcbiAgICAgICAgICBmb3JtYXR0ZWRTdGFydERhdGUgPSBkYXRlU3RyaW5nICsgdGltZVN0YXJ0TWF0Y2hbMV0gKyB0aW1lU3RyaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIG5vIHRpbWUgcGF0dGVybiBmb3VuZFxuICAgICAgICAgIGZvcm1hdHRlZFN0YXJ0RGF0ZSA9IGRheWpzKClcbiAgICAgICAgICAgIC55ZWFyKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IERBVEVfUkFOR0VfUEFORS5MRUZUID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgICAgIC5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZFN0YXJ0RGF0ZSxcbiAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFyRnJvbVNlbGVjdGVkRGF0ZXMoKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZXN0b3JlRm9jdXNUb0NhbGVuZGFyRGF5KGNsaWNrZWRDYWxlbmRhckRhdGUpO1xuICAgIH1cbiAgICB0aGlzLmlzRGF0ZXNWYWxpZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUpIHtcbiAgICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKGRheS50b2FzdE1lc3NhZ2UpIHtcbiAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gIH1cbn1cbnNlbGVjdFJhbmdlKGl0ZW06IFJhbmdlSXRlbSkge1xuICBpZiAoIWl0ZW0pIHJldHVybjtcblxuICBsZXQgc3RhcnREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMF0pOyAgXG4gIGxldCBlbmREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMV0pOyAgXG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnREYXRlLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICBjb25zdCBlbmREYXRlU3RyID0gZW5kRGF0ZS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcblxuICBjb25zdCBpc0FueURhdGVEaXNhYmxlZCA9IHRoaXMuZGF0YSgpLmRhdGVzRGlzYWJsZWQuc29tZSgoZGF0ZSkgPT5cbiAgICB0aGlzLmRheWpzSW5zdGFuY2UoZGF0ZSAsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkuaXNCZXR3ZWVuKHN0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0ciwgbnVsbCwgJ1tdJylcbiAgKTtcblxuICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICBjb25zdCBtYXhEYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuXG4gIGNvbnN0IGlzV2l0aGluTGltaXRzID1cbiAgICAoIW1pbkRhdGUuaXNWYWxpZCgpIHx8ICFzdGFydERhdGUuaXNCZWZvcmUobWluRGF0ZSwgXCJkYXlcIikpICYmXG4gICAgKCFtYXhEYXRlLmlzVmFsaWQoKSB8fCAhZW5kRGF0ZS5pc0FmdGVyKG1heERhdGUsIFwiZGF5XCIpKTtcblxuICBpZiAoIWlzV2l0aGluTGltaXRzIHx8IGlzQW55RGF0ZURpc2FibGVkKSB7XG4gICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKFwiU2VsZWN0ZWQgcmFuZ2UgY29udGFpbnMgZGlzYWJsZWQgZGF0ZXMgb3IgaXMgb3V0IG9mIGJvdW5kcy5cIiwgNDAwMCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQoaXRlbS5sYWJlbCk7XG4gIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldChzdGFydERhdGUubW9udGgoKSk7XG4gIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHN0YXJ0RGF0ZS55ZWFyKCkpO1xuXG4gIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAxMSkge1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldCgwKTtcbiAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSArIDEpO1xuICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIH1cblxuICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoeyBcbiAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZVN0ciwgXG4gICAgZW5kRGF0ZTogZW5kRGF0ZVN0cixcbiAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IGl0ZW0ubGFiZWxcbiAgfSk7XG5cbiAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKSk7XG5cbiAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KCEhKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSkpO1xufVxuXG4gIHJlc2V0UmFuZ2UoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQodGhpcy5DVVNUT01fUkFOR0VfTEFCRUwpO1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsLnNldCh7XG4gICAgICBzdGFydERhdGU6IG51bGwsXG4gICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgfVxuXG4gIC8qKiBEcm9wcyB1bmtub3duIHZhbHVlcywgZGUtZHVwbGljYXRlcyBhbmQgcmUtb3JkZXJzIHRvIG1hdGNoIGRheU9wdGlvbnMuICovXG4gIHByaXZhdGUgc2FuaXRpemVTZWxlY3RlZERheXMoZGF5czogdW5rbm93bik6IG51bWJlcltdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF5cykpIHJldHVybiBbXTtcbiAgICBjb25zdCByZXF1ZXN0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgICBmb3IgKGNvbnN0IGRheSBvZiBkYXlzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihkYXkpO1xuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHJlcXVlc3RlZC5hZGQodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXlPcHRpb25zKCkuZmlsdGVyKG9wdGlvbiA9PiByZXF1ZXN0ZWQuaGFzKG9wdGlvbi52YWx1ZSkpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIGlzRGF5U2VsZWN0ZWQob3B0aW9uOiBJRGF5T3B0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXlzU2lnbmFsKCkuaW5jbHVkZXMob3B0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIHRvZ2dsZURheShvcHRpb246IElEYXlPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQodGhpcy5zZWxlY3RlZERheXNTaWduYWwoKSk7XG4gICAgaWYgKHNlbGVjdGVkLmhhcyhvcHRpb24udmFsdWUpKSB7XG4gICAgICBzZWxlY3RlZC5kZWxldGUob3B0aW9uLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQuYWRkKG9wdGlvbi52YWx1ZSk7XG4gICAgfVxuICAgIC8vIFJlLXByb2plY3Qgc28gZW1pdHRlZCBvcmRlciBtYXRjaGVzIHRoZSBjaGlwc1xuICAgIHRoaXMuc2VsZWN0ZWREYXlzU2lnbmFsLnNldCh0aGlzLmRheU9wdGlvbnMoKS5maWx0ZXIobyA9PiBzZWxlY3RlZC5oYXMoby52YWx1ZSkpLm1hcChvID0+IG8udmFsdWUpKTtcbiAgfVxuXG4gIHRyYWNrRGF5T3B0aW9uKF9pbmRleDogbnVtYmVyLCBvcHRpb246IElEYXlPcHRpb24pOiBudW1iZXIge1xuICAgIHJldHVybiBvcHRpb24udmFsdWU7XG4gIH1cblxuICBkYXlDaGlwQXJpYUxhYmVsKG9wdGlvbjogSURheU9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke29wdGlvbi5sYWJlbH0sICR7dGhpcy5pc0RheVNlbGVjdGVkKG9wdGlvbikgPyBcInNlbGVjdGVkXCIgOiBcIm5vdCBzZWxlY3RlZFwifWA7XG4gIH1cblxuICAvKiogQXR0YWNoZXMgc2VsZWN0ZWREYXlzIG9ubHkgd2hlbiB0aGUgc3RyaXAgaXMgYWN0aXZlLiAqL1xuICBwcml2YXRlIGJ1aWxkQXBwbHlQYXlsb2FkKGRhdGVzOiBJU2VsZWN0ZWREYXRlc0NvbmZpZyk6IElTZWxlY3RlZERhdGVzQ29uZmlnIHtcbiAgICBpZiAoIXRoaXMuc2hvd0RheVNlbGVjdGlvbigpKSByZXR1cm4gZGF0ZXM7XG4gICAgcmV0dXJuIHsgLi4uZGF0ZXMsIHNlbGVjdGVkRGF5czogWy4uLnRoaXMuc2VsZWN0ZWREYXlzU2lnbmFsKCldIH07XG4gIH1cblxuICBhcHBseURhdGVzKCkge1xuICAgIC8vIEd1YXJkIGFnYWluc3QgYWN0aXZhdGlvbiB3aGlsZSBBcHBseSBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5jYW5BcHBseSgpKSByZXR1cm47XG5cbiAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCB0aW1lIHRvIHRoZSBkYXRlcyBiZWZvcmUgYXBwbHlpbmdcbiAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgbGV0IHN0YXJ0VGltZTogc3RyaW5nO1xuICAgICAgbGV0IGVuZFRpbWU6IHN0cmluZztcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5zdGFydEhvdXIoKSwgdGhpcy5zdGFydE1pbnV0ZSgpLCB0aGlzLnN0YXJ0QW1QbSgpKTtcbiAgICAgICAgZW5kVGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLmVuZEhvdXIoKSwgdGhpcy5lbmRNaW51dGUoKSwgdGhpcy5lbmRBbVBtKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuc3RhcnRIb3VyMjQoKSwgdGhpcy5zdGFydE1pbnV0ZSgpLCAnJyk7XG4gICAgICAgIGVuZFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5lbmRIb3VyMjQoKSwgdGhpcy5lbmRNaW51dGUoKSwgJycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IG9ubHkgdGhlIGRhdGUgcGFydCAoYmVmb3JlIGFueSBleGlzdGluZyB0aW1lKSBhbmQgYXBwZW5kIHRoZSBzZWxlY3RlZCB0aW1lXG4gICAgICBjb25zdCBsb2NhbERhdGVzID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKTtcbiAgICAgIGxldCBzdGFydERhdGVPbmx5ID0gbG9jYWxEYXRlcy5zdGFydERhdGU7XG4gICAgICBsZXQgZW5kRGF0ZU9ubHkgPSBsb2NhbERhdGVzLmVuZERhdGU7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgZXh0cmFjdCBkYXRlIHBhcnQgaWYgdGhlIGZvcm1hdCBjb250YWlucyB0aW1lIGNvbXBvbmVudHNcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ0hIJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdtbScpIHx8IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnQScpKSB7XG4gICAgICAgIC8vIEZvciBkYXRldGltZSBmb3JtYXRzLCB3ZSBuZWVkIHRvIGV4dHJhY3QganVzdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgZnVsbCBzdHJpbmcgYW5kIHRoZW4gZm9ybWF0IGl0IGFzIGRhdGUtb25seSBmb3IgY29tcGFyaXNvblxuICAgICAgICBpZiAoc3RhcnREYXRlT25seSkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZFN0YXJ0ID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHN0YXJ0RGF0ZU9ubHkpO1xuICAgICAgICAgIGlmIChwYXJzZWRTdGFydC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZU9ubHkgPSBwYXJzZWRTdGFydC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kRGF0ZU9ubHkpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRFbmQgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoZW5kRGF0ZU9ubHkpO1xuICAgICAgICAgIGlmIChwYXJzZWRFbmQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBieSBmaW5kaW5nIHRoZSB0aW1lIGJvdW5kYXJ5IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICBlbmREYXRlT25seSA9IHBhcnNlZEVuZC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdGFydERhdGVXaXRoVGltZSA9IHN0YXJ0RGF0ZU9ubHkgKyAnICcgKyBzdGFydFRpbWU7XG4gICAgICBjb25zdCBlbmREYXRlV2l0aFRpbWUgPSBlbmREYXRlT25seSArICcgJyArIGVuZFRpbWU7XG5cbiAgICAgIHRoaXMuZGF0YSgpLmRhdGVDaGFuZ2UodGhpcy5idWlsZEFwcGx5UGF5bG9hZCh7XG4gICAgICAgIC4uLmxvY2FsRGF0ZXMsXG4gICAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlV2l0aFRpbWUsXG4gICAgICAgIGVuZERhdGU6IGVuZERhdGVXaXRoVGltZVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEoKS5kYXRlQ2hhbmdlKHRoaXMuYnVpbGRBcHBseVBheWxvYWQodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKSkpO1xuICAgIH1cbiAgfVxuXG4gIFxuICBjYW5jZWxEYXRlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0YSgpLmNsb3NlKCk7XG4gIH1cbiAgXG4gIC8vIFRpbWUtcmVsYXRlZCBtZXRob2RzXG4gIG9uU3RhcnRIb3VySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVIb3VySW5wdXQodGhpcy5zdGFydEhvdXIoKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsLnNldCh0aGlzLnZhbGlkYXRlSG91cklucHV0MjQodGhpcy5zdGFydEhvdXIyNCgpKSk7XG4gICAgfVxuICB9XG4gIFxuICBvblN0YXJ0TWludXRlSW5wdXQoKSB7XG4gICAgdGhpcy5zdGFydE1pbnV0ZVNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZU1pbnV0ZUlucHV0KHRoaXMuc3RhcnRNaW51dGUoKSkpO1xuICB9XG4gIFxuICBvbkVuZEhvdXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVIb3VySW5wdXQodGhpcy5lbmRIb3VyKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVIb3VySW5wdXQyNCh0aGlzLmVuZEhvdXIyNCgpKSk7XG4gICAgfVxuICB9XG4gIFxuICBvbkVuZE1pbnV0ZUlucHV0KCkge1xuICAgIHRoaXMuZW5kTWludXRlU2lnbmFsLnNldCh0aGlzLnZhbGlkYXRlTWludXRlSW5wdXQodGhpcy5lbmRNaW51dGUoKSkpO1xuICB9XG4gIFxuICB2YWxpZGF0ZUhvdXJJbnB1dChob3VyOiBudW1iZXIpIHtcbiAgICAvLyBBcHBseSBib3VuZHMgYmFzZWQgb24gZm9ybWF0XG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgLy8gMTItaG91ciBmb3JtYXQ6IDEtMTJcbiAgICAgIGlmIChob3VyIDwgMSkgaG91ciA9IDE7XG4gICAgICBpZiAoaG91ciA+IDEyKSBob3VyID0gMTI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDI0LWhvdXIgZm9ybWF0OiAwLTIzXG4gICAgICBpZiAoaG91ciA8IDApIGhvdXIgPSAwO1xuICAgICAgaWYgKGhvdXIgPiAyMykgaG91ciA9IDIzO1xuICAgIH1cbiAgICByZXR1cm4gaG91cjtcbiAgfVxuICBcbiAgLy8gU3BlY2lhbCB2YWxpZGF0aW9uIGZvciAyNC1ob3VyIGZvcm1hdFxuICB2YWxpZGF0ZUhvdXJJbnB1dDI0KGhvdXI6IG51bWJlcikge1xuICAgIGlmIChob3VyIDwgMCkgaG91ciA9IDA7XG4gICAgaWYgKGhvdXIgPiAyMykgaG91ciA9IDIzO1xuICAgIHJldHVybiBob3VyO1xuICB9XG4gIFxuICB2YWxpZGF0ZU1pbnV0ZUlucHV0KG1pbnV0ZTogbnVtYmVyKSB7XG4gICAgaWYgKG1pbnV0ZSA8IDApIG1pbnV0ZSA9IDA7XG4gICAgaWYgKG1pbnV0ZSA+IDU5KSBtaW51dGUgPSA1OTtcbiAgICByZXR1cm4gbWludXRlO1xuICB9XG4gIFxuICBwdWJsaWMgaXMxMkhvdXJGb3JtYXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnQScpIHx8IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnYScpO1xuICB9XG4gIFxuICBwcml2YXRlIGZvcm1hdFRpbWUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlciwgYW1QbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICByZXR1cm4gYCR7aG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHthbVBtfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciAyNC1ob3VyIGZvcm1hdCwganVzdCByZXR1cm4gdGhlIGhvdXIgYW5kIG1pbnV0ZVxuICAgICAgcmV0dXJuIGAke2hvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaW1lVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgdGltZSB2YWx1ZXMgZnJvbSBleGlzdGluZyBzZWxlY3RlZCBkYXRlcyBpZiB0aGV5IGNvbnRhaW4gdGltZVxuICAgIGxldCBzdGFydFRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGxldCBlbmRUaW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBcbiAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcuZW5hYmxlVGltZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZSAmJiB0eXBlb2YgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBzdGFydERhdGVQYXJ0cyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlLnNwbGl0KCcgJyk7XG4gICAgICBpZiAoc3RhcnREYXRlUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCB0aW1lUGFydCA9IHN0YXJ0RGF0ZVBhcnRzLnNsaWNlKDEpLmpvaW4oJyAnKTsgLy8gSGFuZGxlIG11bHRpcGxlIHNwYWNlc1xuICAgICAgICB0aGlzLnBhcnNlVGltZVN0cmluZyh0aW1lUGFydCwgdHJ1ZSk7XG4gICAgICAgIHN0YXJ0VGltZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmVuYWJsZVRpbWUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5lbmREYXRlICYmIHR5cGVvZiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBlbmREYXRlUGFydHMgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUuc3BsaXQoJyAnKTtcbiAgICAgIGlmIChlbmREYXRlUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCB0aW1lUGFydCA9IGVuZERhdGVQYXJ0cy5zbGljZSgxKS5qb2luKCcgJyk7IC8vIEhhbmRsZSBtdWx0aXBsZSBzcGFjZXNcbiAgICAgICAgdGhpcy5wYXJzZVRpbWVTdHJpbmcodGltZVBhcnQsIGZhbHNlKTtcbiAgICAgICAgZW5kVGltZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gSWYgbm8gZXhpc3RpbmcgdGltZSBmb3VuZCwgc2V0IGN1cnJlbnQgdGltZSBhcyBkZWZhdWx0XG4gICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgIGlmICghc3RhcnRUaW1lSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VGltZUFzRGVmYXVsdCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghZW5kVGltZUluaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFRpbWVBc0RlZmF1bHQoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3VycmVudFRpbWVBc0RlZmF1bHQoaXNTdGFydDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgY29uc3QgY3VycmVudEhvdXIgPSBub3cuaG91cigpO1xuICAgIGNvbnN0IGN1cnJlbnRNaW51dGUgPSBub3cubWludXRlKCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgLy8gQ29udmVydCBjdXJyZW50IHRpbWUgdG8gMTItaG91ciBmb3JtYXRcbiAgICAgIGxldCBob3VyMTIgPSBjdXJyZW50SG91cjtcbiAgICAgIGxldCBhbVBtID0gJ0FNJztcbiAgICAgIFxuICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgIGhvdXIxMiA9IDEyO1xuICAgICAgICBhbVBtID0gJ0FNJztcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IDEyO1xuICAgICAgICBhbVBtID0gJ1BNJztcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPiAxMikge1xuICAgICAgICBob3VyMTIgPSBjdXJyZW50SG91ciAtIDEyO1xuICAgICAgICBhbVBtID0gJ1BNJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoaG91cjEyKTtcbiAgICAgICAgdGhpcy5zdGFydE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldChhbVBtKTtcbiAgICAgICAgdGhpcy5zdGFydEhvdXIyNFNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChob3VyMTIpO1xuICAgICAgICB0aGlzLmVuZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoYW1QbSk7XG4gICAgICAgIHRoaXMuZW5kSG91cjI0U2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSBjdXJyZW50IHRpbWUgZGlyZWN0bHkgZm9yIDI0LWhvdXIgZm9ybWF0XG4gICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICAgIHRoaXMuc3RhcnRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnRNaW51dGUpO1xuICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPiAxMikge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChjdXJyZW50SG91ciAtIDEyKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5kSG91cjI0U2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICAgIHRoaXMuZW5kTWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgICAgLy8gQWxzbyBzZXQgMTItaG91ciB2YWx1ZXMgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgIGlmIChjdXJyZW50SG91ciA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChjdXJyZW50SG91ciAtIDEyKTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVGltZVN0cmluZyh0aW1lU3RyaW5nOiBzdHJpbmcsIGlzU3RhcnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyBQYXJzZSAxMi1ob3VyIGZvcm1hdDogXCIxMDowMCBQTVwiXG4gICAgICBjb25zdCBtYXRjaCA9IHRpbWVTdHJpbmcubWF0Y2goLyhcXGQrKTooXFxkKylcXHMqKEFNfFBNKS9pKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChtYXRjaFsyXSk7XG4gICAgICAgIGNvbnN0IGFtUG0gPSBtYXRjaFszXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoaG91cik7XG4gICAgICAgICAgdGhpcy5zdGFydE1pbnV0ZVNpZ25hbC5zZXQobWludXRlKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoYW1QbSk7XG4gICAgICAgICAgLy8gQWxzbyBzZXQgMjQtaG91ciB2YWx1ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsLnNldChob3VyID09PSAxMiA/IChhbVBtID09PSAnUE0nID8gMTIgOiAwKSA6IChhbVBtID09PSAnUE0nID8gaG91ciArIDEyIDogaG91cikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoaG91cik7XG4gICAgICAgICAgdGhpcy5lbmRNaW51dGVTaWduYWwuc2V0KG1pbnV0ZSk7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldChhbVBtKTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAyNC1ob3VyIHZhbHVlIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAgIHRoaXMuZW5kSG91cjI0U2lnbmFsLnNldChob3VyID09PSAxMiA/IChhbVBtID09PSAnUE0nID8gMTIgOiAwKSA6IChhbVBtID09PSAnUE0nID8gaG91ciArIDEyIDogaG91cikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcnNlIDI0LWhvdXIgZm9ybWF0OiBcIjIyOjAwXCJcbiAgICAgIGNvbnN0IG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCgvKFxcZCspOihcXGQrKS8pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhvdXIyNCA9IHBhcnNlSW50KG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgICAgICAvLyBTdG9yZSBkaXJlY3RseSBpbiAyNC1ob3VyIGZvcm1hdFxuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KGhvdXIyNCk7XG4gICAgICAgICAgdGhpcy5zdGFydE1pbnV0ZVNpZ25hbC5zZXQobWludXRlKTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3kgKHRob3VnaCBub3QgdXNlZCBpbiAyNC1ob3VyIG1vZGUpXG4gICAgICAgICAgaWYgKGhvdXIyNCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA9PT0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChob3VyMjQgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KGhvdXIyNCAtIDEyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KGhvdXIyNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFN0b3JlIGRpcmVjdGx5IGluIDI0LWhvdXIgZm9ybWF0XG4gICAgICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KGhvdXIyNCk7XG4gICAgICAgICAgdGhpcy5lbmRNaW51dGVTaWduYWwuc2V0KG1pbnV0ZSk7XG4gICAgICAgICAgLy8gQWxzbyBzZXQgMTItaG91ciB2YWx1ZXMgZm9yIGNvbnNpc3RlbmN5ICh0aG91Z2ggbm90IHVzZWQgaW4gMjQtaG91ciBtb2RlKVxuICAgICAgICAgIGlmIChob3VyMjQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA9PT0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGhvdXIyNCAtIDEyKTtcbiAgICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoaG91cjI0KTtcbiAgICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lclwiIGFyaWEtbGFiZWw9XCJkYXRlIHJhbmdlIHBpY2tlclwiIGNka1RyYXBGb2N1cyBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fdmlld1wiPlxuICAgIDxkaXYgdGFiaW5kZXg9XCItMVwiIGNka0ZvY3VzSW5pdGlhbD48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YSgpPy5kcENvbmZpZz8ucmFuZ2VzPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19yYW5nZXNcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YSgpPy5kcENvbmZpZz8ucmFuZ2VzID8/IFtdXCIgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLXJhbmdlJyA6IHNlbGVjdGVkSXRlbUxhYmVsKCkgPT09IGl0ZW0ubGFiZWx9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZ2UoaXRlbSlcIlxuICAgICAgICAgIGNsYXNzPVwibWlzLWJ0blwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PiA8YnV0dG9uIGNsYXNzPVwibWlzLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlLXJhbmdlJyA6IHNlbGVjdGVkSXRlbUxhYmVsKCkgPT09ICdDdXN0b20gUmFuZ2UnfVwiIChjbGljayk9XCJyZXNldFJhbmdlKClcIj5DdXN0b20gUmFuZ2U8L2J1dHRvbj4gPC9kaXY+XG4gIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyX19sZWZ0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9faGVhZGVyX19wcmFidVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvblwiXG4gICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKSA/IC0xIDogMFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCgpID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIiFpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoTU9OVEhfTkFWX0RJUkVDVElPTi5QUkVWSU9VUylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKSAmJiBuYXZpZ2F0ZU1vbnRoKE1PTlRIX05BVl9ESVJFQ1RJT04uUFJFVklPVVMpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZNb250aEFyaWFMYWJlbCgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCgpXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3Bhbj4ge3sgY3VycmVudE1vbnRoKCkgfX0ge3sgY3VycmVudFllYXJOdW1iZXIoKSB9fSA8L3NwYW4+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDwhLS0gQnV0dG9uIHZpc2libGUgaW4gbW9iaWxlIHZpZXcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uIG1vYmlsZV92aWV3XCJcbiAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpc05leHRNb250aERpc2FibGVkKCkgPyAtMSA6IDBcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNOZXh0TW9udGhEaXNhYmxlZCgpID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgcm9sZT0nYnV0dG9uJ1xuICAgICAgICAgIChjbGljayk9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoTU9OVEhfTkFWX0RJUkVDVElPTi5ORVhUKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc05leHRNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aChNT05USF9OQVZfRElSRUNUSU9OLk5FWFQpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm5leHRNb250aEFyaWFMYWJlbCgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc05leHRNb250aERpc2FibGVkKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5XCIgKm5nRm9yPVwibGV0IHdlZWtEYXkgb2Ygd2Vla0RheXMoKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgd2Vla0RheS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5IG9mIGN1cnJlbnRNb250aERhdGVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5XCJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJkYXkuZGF0ZSA8PSAwID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zYW1lLWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zdGFydC1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtZW5kLWRheSc6IGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnZGlzYWJsZWQtZGF5JzogZGF5LmlzRGlzYWJsZWREYXksXG4gICAgICAgICAgICAgICdpbi1yYW5nZS1kYXknOiBkYXkuaW5SYW5nZURheSxcbiAgICAgICAgICAgICAgJ2lzLXZhbGlkLWRhdGUnOiBkYXkuZGF0ZSA+IDAgJiYgIShkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5KSxcbiAgICAgICAgICAgICAgJ2hvdmVyLXdlZWstcm93JzogaXNJbkhvdmVyZWRXZWVrKERBVEVfUkFOR0VfUEFORS5MRUZULCBkYXkpLFxuICAgICAgICAgICAgICAnaG92ZXItd2Vlay1zdGFydCc6IGlzSG92ZXJlZFdlZWtTdGFydChEQVRFX1JBTkdFX1BBTkUuTEVGVCwgZGF5KSxcbiAgICAgICAgICAgICAgJ2hvdmVyLXdlZWstZW5kJzogaXNIb3ZlcmVkV2Vla0VuZChEQVRFX1JBTkdFX1BBTkUuTEVGVCwgZGF5KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KERBVEVfUkFOR0VfUEFORS5MRUZULCBkYXkpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoREFURV9SQU5HRV9QQU5FLkxFRlQsIGRheSlcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0SG92ZXJlZFdlZWsoREFURV9SQU5HRV9QQU5FLkxFRlQsIGRheSlcIlxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiY2xlYXJIb3ZlcmVkV2VlaygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbaWRdPVwiIWRheS5pc0Rpc2FibGVkRGF5ID8gJ21pcy1kcnAtZm9jdXNhYmxlLWxlZnQtJyArICRpbmRleCA6IG51bGxcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZW5hYmxlRGF0ZVRhYmJpbmcoKSA/IChkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMCkgOiAoJGluZGV4ID09PSBhbmNob3JJbmRleExlZnQoKSA/IDAgOiAtMSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJldHJhY3REYXlNb250aChkYXkuZGF0ZSwgY3VycmVudE1vbnRoKCksIGN1cnJlbnRZZWFyTnVtYmVyKCksIGRheS5pc1NlbGVjdGVkU3RhcnREYXksIGRheS5pc1NlbGVjdGVkRW5kRGF5KVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGF5LmlzRGlzYWJsZWREYXkgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25EYXlDZWxsS2V5ZG93bigkZXZlbnQsIERBVEVfUkFOR0VfUEFORS5MRUZULCAkaW5kZXgpXCI+XG4gICAgICAgICAgICAgIHt7IGRheS5kYXRlIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyX19yaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2hlYWRlcl9fcHJhYnVcIj5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgPHNwYW4+IHt7IG5leHRNb250aCgpIH19IHt7IG5leHRZZWFyTnVtYmVyKCkgfX0gPC9zcGFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvbiBwY192aWV3XCJcbiAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpc05leHRNb250aERpc2FibGVkKCkgPyAtMSA6IDBcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNOZXh0TW9udGhEaXNhYmxlZCgpID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIiFpc05leHRNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aChNT05USF9OQVZfRElSRUNUSU9OLk5FWFQpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQoKSAmJiBuYXZpZ2F0ZU1vbnRoKE1PTlRIX05BVl9ESVJFQ1RJT04uTkVYVClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dE1vbnRoQXJpYUxhYmVsKClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWQoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2JvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5cygpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheXNcIj5cbiAgICAgICAgICBAZm9yIChkYXkgb2YgbmV4dE1vbnRoRGF0ZXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlcIlxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cImRheS5kYXRlIDw9IDAgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXNhbWUtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXN0YXJ0LWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1lbmQtZGF5JzogZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAgICAgJ2luLXJhbmdlLWRheSc6IGRheS5pblJhbmdlRGF5LFxuICAgICAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhKGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXkpLFxuICAgICAgICAgICAgICAnaG92ZXItd2Vlay1yb3cnOiBpc0luSG92ZXJlZFdlZWsoREFURV9SQU5HRV9QQU5FLlJJR0hULCBkYXkpLFxuICAgICAgICAgICAgICAnaG92ZXItd2Vlay1zdGFydCc6IGlzSG92ZXJlZFdlZWtTdGFydChEQVRFX1JBTkdFX1BBTkUuUklHSFQsIGRheSksXG4gICAgICAgICAgICAgICdob3Zlci13ZWVrLWVuZCc6IGlzSG92ZXJlZFdlZWtFbmQoREFURV9SQU5HRV9QQU5FLlJJR0hULCBkYXkpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoREFURV9SQU5HRV9QQU5FLlJJR0hULCBkYXkpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoREFURV9SQU5HRV9QQU5FLlJJR0hULCBkYXkpXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNldEhvdmVyZWRXZWVrKERBVEVfUkFOR0VfUEFORS5SSUdIVCwgZGF5KVwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJjbGVhckhvdmVyZWRXZWVrKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5LmRhdGUgPiAwXCJcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtpZF09XCIhZGF5LmlzRGlzYWJsZWREYXkgPyAnbWlzLWRycC1mb2N1c2FibGUtcmlnaHQtJyArICRpbmRleCA6IG51bGxcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZW5hYmxlRGF0ZVRhYmJpbmcoKSA/IChkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMCkgOiAoJGluZGV4ID09PSBhbmNob3JJbmRleFJpZ2h0KCkgPyAwIDogLTEpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIG5leHRNb250aCgpLCBuZXh0WWVhck51bWJlcigpLCBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5LCBkYXkuaXNTZWxlY3RlZEVuZERheSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRheS5pc0Rpc2FibGVkRGF5ID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uRGF5Q2VsbEtleWRvd24oJGV2ZW50LCBEQVRFX1JBTkdFX1BBTkUuUklHSFQsICRpbmRleClcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPCEtLSBUaW1lIFNlbGVjdGlvbiBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fdGltZVwiICpuZ0lmPVwiZGF0YSgpLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWVcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGltZS1zZWN0aW9uXCI+XG4gICAgICA8aDQ+RnJvbTwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dHNcIj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJpczEySG91ckZvcm1hdCgpID8gc3RhcnRIb3VyKCkgOiBzdGFydEhvdXIyNCgpXCIgXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaXMxMkhvdXJGb3JtYXQoKSA/IHN0YXJ0SG91clNpZ25hbC5zZXQoJGV2ZW50KSA6IHN0YXJ0SG91cjI0U2lnbmFsLnNldCgkZXZlbnQpOyBvblN0YXJ0SG91cklucHV0KClcIlxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCIgXG4gICAgICAgICAgW21heF09XCJpczEySG91ckZvcm1hdCgpID8gMTIgOiAyM1wiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgaG91ci1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJISFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCI+Ojwvc3Bhbj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJzdGFydE1pbnV0ZSgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwic3RhcnRNaW51dGVTaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICAoaW5wdXQpPVwib25TdGFydE1pbnV0ZUlucHV0KClcIlxuICAgICAgICAgIG1pbj1cIjBcIiBcbiAgICAgICAgICBtYXg9XCI1OVwiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgbWludXRlLWlucHV0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIk1NXCI+XG4gICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgW25nTW9kZWxdPVwic3RhcnRBbVBtKClcIiAobmdNb2RlbENoYW5nZSk9XCJzdGFydEFtUG1TaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdG9yXCJcbiAgICAgICAgICAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtc2VjdGlvblwiPlxuICAgICAgPGg0PlRvPC9oND5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0c1wiPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFtuZ01vZGVsXT1cImlzMTJIb3VyRm9ybWF0KCkgPyBlbmRIb3VyKCkgOiBlbmRIb3VyMjQoKVwiIFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlzMTJIb3VyRm9ybWF0KCkgPyBlbmRIb3VyU2lnbmFsLnNldCgkZXZlbnQpIDogZW5kSG91cjI0U2lnbmFsLnNldCgkZXZlbnQpOyBvbkVuZEhvdXJJbnB1dCgpXCJcbiAgICAgICAgICBbbWluXT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxIDogMFwiIFxuICAgICAgICAgIFttYXhdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEyIDogMjNcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IGhvdXItaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSEhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgW25nTW9kZWxdPVwiZW5kTWludXRlKClcIiAobmdNb2RlbENoYW5nZSk9XCJlbmRNaW51dGVTaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICAoaW5wdXQpPVwib25FbmRNaW51dGVJbnB1dCgpXCJcbiAgICAgICAgICBtaW49XCIwXCIgXG4gICAgICAgICAgbWF4PVwiNTlcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IG1pbnV0ZS1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJNTVwiPlxuICAgICAgICA8c2VsZWN0IFxuICAgICAgICAgIFtuZ01vZGVsXT1cImVuZEFtUG0oKVwiIChuZ01vZGVsQ2hhbmdlKT1cImVuZEFtUG1TaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdG9yXCJcbiAgICAgICAgICAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPCEtLSBXZWVrZGF5IFNlbGVjdGlvbiBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5LXNlbGVjdGlvblwiICpuZ0lmPVwic2hvd0RheVNlbGVjdGlvbigpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXktc2VsZWN0aW9uX19sYWJlbFwiIGlkPVwibWlzLWRycC1kYXlzLWxhYmVsXCI+XG4gICAgICB7eyBkYXlTZWxlY3Rpb25MYWJlbCgpIH19XG4gICAgPC9zcGFuPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5LXNlbGVjdGlvbl9fY2hpcHNcIlxuICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGF5U2VsZWN0aW9uR3JvdXBBcmlhTGFiZWwoKVwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGRheU9wdGlvbnMoKTsgdHJhY2tCeTogdHJhY2tEYXlPcHRpb25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXktY2hpcFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLXNlbGVjdGVkJzogaXNEYXlTZWxlY3RlZChvcHRpb24pIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiaXNEYXlTZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJkYXlDaGlwQXJpYUxhYmVsKG9wdGlvbilcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGF5KG9wdGlvbilcIlxuICAgICAgPlxuICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheS1zZWxlY3Rpb25fX2hpbnRcIlxuICAgICAgKm5nSWY9XCJzaG93RGF5U2VsZWN0aW9uSGludCgpXCJcbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgPlxuICAgICAgU2VsZWN0IGF0IGxlYXN0IG9uZSBkYXlcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXJfX2Zvb3RlclwiPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwibm9uZVwiIGlkPVwibWlzLWRycC1jYW5jZWwtYnRuXCIgYXJpYS1sYWJlbD1cImNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxEYXRlUGlja2VyKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1pcy1idXR0b24gdHlwZT1cInByaW1hcnlcIiBpZD1cIm1pcy1kcnAtYXBwbHktYnRuXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJhcHBseUJ1dHRvbkFyaWFMYWJlbCgpXCIgKGNsaWNrKT1cImFwcGx5RGF0ZXMoKVwiIFtkaXNhYmxlZF09XCIhY2FuQXBwbHkoKVwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+Il19