ca-components 0.0.69 → 0.0.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/animations/show.animation.mjs +2 -2
- package/esm2022/lib/components/ca-input/enums/input-string.enum.mjs +7 -1
- package/esm2022/lib/components/ca-input/services/ca-input-state.service.mjs +218 -22
- package/esm2022/lib/components/ca-input/utils/constants/index.mjs +2 -0
- package/esm2022/lib/components/ca-input/utils/constants/input-constants.mjs +18 -0
- package/esm2022/lib/components/ca-logo-change/ca-logo-change.component.mjs +108 -0
- package/esm2022/lib/components/ca-logo-change/pipes/logo-slider.pipe.mjs +17 -0
- package/esm2022/lib/components/ca-logo-change/utils/constants/logo-change.constants.mjs +17 -0
- package/esm2022/lib/components/ca-main-table/ca-main-table.component.mjs +10 -4
- package/esm2022/lib/components/ca-upload-files/ca-upload-files.component.mjs +335 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/ca-upload-dropzone.component.mjs +311 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/config/dropzone-config.type.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/config/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/directives/template.directive.mjs +19 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/file-action.enum.mjs +8 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/file-type.enum.mjs +8 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/index.mjs +4 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/pages.enum.mjs +26 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/helpers/file.helper.mjs +23 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/helpers/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/models/drop-background-event.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/models/dropzone-config.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/models/dropzone-option-config.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/models/file-config.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/models/file-event.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/models/index.mjs +7 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/models/upload-file-templates.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/file-icons.constant.mjs +19 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/file-limit.constant.mjs +28 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/index.mjs +5 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/lottie-constant.mjs +9 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/supported-extension.constant.mjs +11 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/svg-routes/dropzone-svg.routes.mjs +4 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/ca-upload-file.component.mjs +351 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/enums/document-action.enum.mjs +10 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/enums/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/models/delete-action.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/models/file-action.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/models/index.mjs +3 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/pipes/byte-convert.pipe.mjs +22 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/pipes/file-name.pipe.mjs +22 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/pipes/index.mjs +5 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/pipes/ng-class.pipe.mjs +36 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/pipes/url-extension.pipe.mjs +21 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/services/document.service.mjs +19 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/services/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/utils/svg-routes/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/utils/svg-routes/upload-file.routes.mjs +10 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/ca-upload-files-carousel.component.mjs +159 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/enums/carousel-action.enum.mjs +6 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/enums/carousel-size.enum.mjs +10 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/enums/index.mjs +3 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/models/carousel-config.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/models/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/constants/files-by-size.constant.mjs +16 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/constants/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/index.mjs +3 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/svg-routes/carousel-svg.routes.mjs +4 -0
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/svg-routes/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/enums/file-size.enum.mjs +9 -0
- package/esm2022/lib/components/ca-upload-files/enums/file-types.enum.mjs +8 -0
- package/esm2022/lib/components/ca-upload-files/enums/index.mjs +3 -0
- package/esm2022/lib/components/ca-upload-files/models/document-review.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/models/file-option-config.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/models/index.mjs +5 -0
- package/esm2022/lib/components/ca-upload-files/models/review-file-config.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/models/slider.model.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/pipes/index.mjs +3 -0
- package/esm2022/lib/components/ca-upload-files/pipes/map-file.pipe.mjs +20 -0
- package/esm2022/lib/components/ca-upload-files/pipes/upload-class.pipe.mjs +43 -0
- package/esm2022/lib/components/ca-upload-files/services/index.mjs +2 -0
- package/esm2022/lib/components/ca-upload-files/services/upload-file.service.mjs +30 -0
- package/esm2022/lib/pipes/thousand-separator.pipe.mjs +6 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ca-components.mjs +1879 -30
- package/fesm2022/ca-components.mjs.map +1 -1
- package/lib/components/ca-input/enums/input-string.enum.d.ts +7 -1
- package/lib/components/ca-input/services/ca-input-state.service.d.ts +19 -3
- package/lib/components/ca-input/utils/constants/index.d.ts +1 -0
- package/lib/components/ca-input/utils/constants/input-constants.d.ts +3 -0
- package/lib/components/ca-logo-change/ca-logo-change.component.d.ts +34 -0
- package/lib/components/ca-logo-change/pipes/logo-slider.pipe.d.ts +7 -0
- package/lib/components/ca-logo-change/utils/constants/logo-change.constants.d.ts +6 -0
- package/lib/components/ca-main-table/ca-main-table.component.d.ts +3 -1
- package/lib/components/ca-upload-files/ca-upload-files.component.d.ts +66 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/ca-upload-dropzone.component.d.ts +53 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/config/dropzone-config.type.d.ts +8 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/config/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/directives/template.directive.d.ts +9 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/file-action.enum.d.ts +6 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/file-type.enum.d.ts +6 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/index.d.ts +3 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/enums/pages.enum.d.ts +24 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/helpers/file.helper.d.ts +7 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/helpers/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/models/drop-background-event.model.d.ts +4 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/models/dropzone-config.model.d.ts +8 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/models/dropzone-option-config.model.d.ts +14 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/models/file-config.model.d.ts +19 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/models/file-event.model.d.ts +8 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/models/index.d.ts +6 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/models/upload-file-templates.model.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/file-icons.constant.d.ts +7 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/file-limit.constant.d.ts +5 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/index.d.ts +4 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/lottie-constant.d.ts +4 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/constants/supported-extension.constant.d.ts +4 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-dropzone/utils/svg-routes/dropzone-svg.routes.d.ts +3 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/ca-upload-file.component.d.ts +84 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/enums/document-action.enum.d.ts +8 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/enums/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/models/delete-action.model.d.ts +4 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/models/file-action.model.d.ts +5 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/models/index.d.ts +2 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/pipes/byte-convert.pipe.d.ts +7 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/pipes/file-name.pipe.d.ts +7 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/pipes/index.d.ts +4 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/pipes/ng-class.pipe.d.ts +7 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/pipes/url-extension.pipe.d.ts +7 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/services/document.service.d.ts +8 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/services/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/utils/svg-routes/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-file/utils/svg-routes/upload-file.routes.d.ts +9 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/ca-upload-files-carousel.component.d.ts +36 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/enums/carousel-action.enum.d.ts +4 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/enums/carousel-size.enum.d.ts +8 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/enums/index.d.ts +2 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/models/carousel-config.model.d.ts +7 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/models/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/constants/files-by-size.constant.d.ts +8 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/constants/index.d.ts +1 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/index.d.ts +2 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/svg-routes/carousel-svg.routes.d.ts +3 -0
- package/lib/components/ca-upload-files/components/ca-upload-files-carousel/utils/svg-routes/index.d.ts +1 -0
- package/lib/components/ca-upload-files/enums/file-size.enum.d.ts +7 -0
- package/lib/components/ca-upload-files/enums/file-types.enum.d.ts +6 -0
- package/lib/components/ca-upload-files/enums/index.d.ts +2 -0
- package/lib/components/ca-upload-files/models/document-review.model.d.ts +5 -0
- package/lib/components/ca-upload-files/models/file-option-config.model.d.ts +14 -0
- package/lib/components/ca-upload-files/models/index.d.ts +4 -0
- package/lib/components/ca-upload-files/models/review-file-config.model.d.ts +8 -0
- package/lib/components/ca-upload-files/models/slider.model.d.ts +4 -0
- package/lib/components/ca-upload-files/pipes/index.d.ts +2 -0
- package/lib/components/ca-upload-files/pipes/map-file.pipe.d.ts +9 -0
- package/lib/components/ca-upload-files/pipes/upload-class.pipe.d.ts +7 -0
- package/lib/components/ca-upload-files/services/index.d.ts +1 -0
- package/lib/components/ca-upload-files/services/upload-file.service.d.ts +18 -0
- package/lib/pipes/thousand-separator.pipe.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/assets/ca-components/svg/common/ic_forbidden.svg +3 -0
- package/src/assets/ca-components/svg/common/ic_grid.svg +8 -0
- package/src/assets/ca-components/svg/common/ic_radial.svg +3 -0
- package/src/assets/ca-components/svg/common/ic_reset.svg +3 -0
- package/src/assets/ca-components/svg/input/ic_email.svg +6 -0
- package/src/assets/ca-components/svg/input/ic_phone.svg +6 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_arrow-right.svg +11 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_arrow-up-rectangle.svg +11 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_arrow-up-right.svg +11 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_arrow-up.svg +11 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_circle-grey-filled.svg +4 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_circle-grey.svg +4 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_circle-orange.svg +4 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_circle-red-filled.svg +4 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_document.svg +3 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_eye-icon-closed.svg +3 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_eye-icon.svg +3 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_no-document.svg +7 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_rectangle-orange.svg +11 -0
- package/src/assets/ca-components/svg/telematic-map-list/ic_repair_engine.svg +3 -0
|
@@ -7,11 +7,15 @@ import { MethodsCalculationsHelper } from '../../../utils/helpers/methods-calcul
|
|
|
7
7
|
import { InputConfigNameStringEnum, InputCommandsType, InputCommandsAction, InputStringEnum, } from '../enums';
|
|
8
8
|
// Svg routes
|
|
9
9
|
import { InputSvgRoutes } from '../utils';
|
|
10
|
+
// constants
|
|
11
|
+
import { InputConstants } from '../utils/constants';
|
|
10
12
|
import * as i0 from "@angular/core";
|
|
11
13
|
import * as i1 from "../../ca-custom-datetime-pickers/services/calendar-datetime-picker.service";
|
|
14
|
+
import * as i2 from "../../../pipes/thousand-separator.pipe";
|
|
12
15
|
export class InputStateService {
|
|
13
|
-
constructor(calendarService) {
|
|
16
|
+
constructor(calendarService, thousandSeparatorPipe) {
|
|
14
17
|
this.calendarService = calendarService;
|
|
18
|
+
this.thousandSeparatorPipe = thousandSeparatorPipe;
|
|
15
19
|
this.isFocusInputSubject = new BehaviorSubject(false);
|
|
16
20
|
this.isFocusInput$ = this.isFocusInputSubject.asObservable();
|
|
17
21
|
this.isTouchedInputSubject = new BehaviorSubject(false);
|
|
@@ -186,28 +190,220 @@ export class InputStateService {
|
|
|
186
190
|
this.setClearInputEvent(true);
|
|
187
191
|
}
|
|
188
192
|
}
|
|
189
|
-
transformText(event) {
|
|
193
|
+
transformText(event, isPaste) {
|
|
190
194
|
const value = event.target.value;
|
|
191
|
-
|
|
195
|
+
this.cursorInputPosition = this.input.nativeElement.selectionStart;
|
|
196
|
+
// Handle paste operation
|
|
197
|
+
if (isPaste) {
|
|
198
|
+
this.handlePaste(value);
|
|
199
|
+
}
|
|
200
|
+
else if (value) {
|
|
192
201
|
this.input.nativeElement.value = value;
|
|
193
202
|
}
|
|
203
|
+
this.applyTextTransformation();
|
|
204
|
+
// Apply thousand and price separators if configured
|
|
205
|
+
this.applyThousandSeparator();
|
|
206
|
+
this.applyPriceSeparator();
|
|
207
|
+
this.customValidation(value);
|
|
208
|
+
this.sanitizeConsecutiveSpaces();
|
|
209
|
+
this.removeLeadingZero();
|
|
210
|
+
}
|
|
211
|
+
handlePaste(value) {
|
|
212
|
+
if (!this.inputSelection) {
|
|
213
|
+
this.input.nativeElement.value += value;
|
|
214
|
+
this.limitInputLength();
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
this.input.nativeElement.value = value;
|
|
218
|
+
this.inputSelection = false;
|
|
219
|
+
}
|
|
220
|
+
// Delete spaces on begin and end
|
|
221
|
+
this.input.nativeElement.value = this.input.nativeElement.value.trim();
|
|
222
|
+
this.superControl.control?.patchValue(this.input.nativeElement.value);
|
|
223
|
+
}
|
|
224
|
+
limitInputLength() {
|
|
225
|
+
if (this.input.nativeElement.value.length > this.inputConfig.maxLength) {
|
|
226
|
+
this.input.nativeElement.value = this.input.nativeElement.value.substring(0, this.inputConfig.maxLength);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
applyTextTransformation() {
|
|
230
|
+
const { value } = this.input.nativeElement;
|
|
194
231
|
switch (this.inputConfig.textTransform) {
|
|
195
|
-
case
|
|
232
|
+
case InputStringEnum.CAPITALIZE:
|
|
196
233
|
this.input.nativeElement.value =
|
|
197
|
-
|
|
198
|
-
this.input.nativeElement.value.substring(1).toLowerCase();
|
|
199
|
-
this.superControl.control?.patchValue(this.input.nativeElement.value);
|
|
234
|
+
value.charAt(0).toUpperCase() + value.substring(1).toLowerCase();
|
|
200
235
|
break;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
this.input.nativeElement.value =
|
|
204
|
-
this.input.nativeElement.value.toLocaleUpperCase('en-US');
|
|
205
|
-
this.superControl.control?.patchValue(this.input.nativeElement.value);
|
|
236
|
+
case InputStringEnum.UPPERCASE:
|
|
237
|
+
this.input.nativeElement.value = value.toLocaleUpperCase('en-US');
|
|
206
238
|
break;
|
|
207
|
-
|
|
208
|
-
default: {
|
|
209
|
-
this.superControl.control?.patchValue(this.input.nativeElement.value);
|
|
239
|
+
default:
|
|
210
240
|
break;
|
|
241
|
+
}
|
|
242
|
+
this.superControl.control?.patchValue(this.input.nativeElement.value);
|
|
243
|
+
}
|
|
244
|
+
applyThousandSeparator() {
|
|
245
|
+
const controlValue = this.superControl.control?.value;
|
|
246
|
+
if (this.inputConfig.thousandSeparator && controlValue) {
|
|
247
|
+
if (this.isAllZeros(controlValue)) {
|
|
248
|
+
this.superControl.control?.patchValue('0');
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (this.superControl.control?.value.toString()) {
|
|
252
|
+
this.superControl.control?.patchValue(this.thousandSeparatorPipe.transform(controlValue));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
applyPriceSeparator() {
|
|
257
|
+
const controlValue = this.superControl.control?.value;
|
|
258
|
+
if (this.inputConfig.priceSeparator && controlValue) {
|
|
259
|
+
// 0. Don't allow 0 as first character
|
|
260
|
+
if (this.isAllZeros(controlValue)) {
|
|
261
|
+
this.superControl.control?.patchValue('0');
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// 4. If user set dot
|
|
265
|
+
if (controlValue.includes('.')) {
|
|
266
|
+
this.formatWithDecimal();
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
// 5. If user doesn't set dot
|
|
270
|
+
this.formatWithoutDecimal();
|
|
271
|
+
}
|
|
272
|
+
this.setInputCursorPosition();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
formatWithDecimal() {
|
|
276
|
+
const controlValue = this.superControl.control?.value;
|
|
277
|
+
// 4.1. Check for Dot position
|
|
278
|
+
this.hasDecimalIndex = controlValue.indexOf('.');
|
|
279
|
+
this.originPriceSeparatorLimit =
|
|
280
|
+
this.inputConfig.priceSeparatorLimitation + 3;
|
|
281
|
+
// 4.2. Divide number into decimal and integer parts
|
|
282
|
+
let integerPart = this.thousandSeparatorPipe.transform(controlValue
|
|
283
|
+
.slice(0, this.hasDecimalIndex)
|
|
284
|
+
.slice(0, this.inputConfig.priceSeparatorLimitation));
|
|
285
|
+
let decimalPart = controlValue.slice(this.hasDecimalIndex + 1);
|
|
286
|
+
if (!integerPart) {
|
|
287
|
+
integerPart = '0';
|
|
288
|
+
}
|
|
289
|
+
// 4.4. Get only two numbers of the decimal part
|
|
290
|
+
decimalPart = decimalPart.slice(0, 2);
|
|
291
|
+
if (decimalPart) {
|
|
292
|
+
// 4.5. Set formatted number
|
|
293
|
+
this.superControl.control?.patchValue(`${integerPart}.${decimalPart}`);
|
|
294
|
+
this.hasDecimalIndex = this.superControl.control?.value.indexOf('.');
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
formatWithoutDecimal() {
|
|
298
|
+
const controlValue = this.superControl.control?.value;
|
|
299
|
+
this.hasDecimalIndex = -1;
|
|
300
|
+
if (controlValue.indexOf('.') === -1) {
|
|
301
|
+
// Transform value with thousand separator
|
|
302
|
+
this.superControl.control?.patchValue(this.thousandSeparatorPipe.transform(controlValue));
|
|
303
|
+
// Limit validation
|
|
304
|
+
this.originPriceSeparatorLimit =
|
|
305
|
+
this.inputConfig.priceSeparatorLimitation;
|
|
306
|
+
// Cut value
|
|
307
|
+
if (controlValue) {
|
|
308
|
+
this.superControl.control?.patchValue(controlValue.slice(0, this.inputConfig.priceSeparatorLimitation));
|
|
309
|
+
}
|
|
310
|
+
// Transform value again after cutting
|
|
311
|
+
this.superControl.control?.patchValue(this.thousandSeparatorPipe.transform(controlValue));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
setInputCursorPosition() {
|
|
315
|
+
if (this.superControl.control?.value) {
|
|
316
|
+
this.timeoutCleaner = setTimeout(() => {
|
|
317
|
+
this.input.nativeElement.setSelectionRange(this.cursorInputPosition +
|
|
318
|
+
(this.superControl.control?.value.indexOf('.') === -1 ? 1 : 0), this.cursorInputPosition +
|
|
319
|
+
(this.superControl.control?.value.indexOf('.') === -1 ? 1 : 0));
|
|
320
|
+
}, 0);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
// if we have ${n}00000 and we delete N then we got undefined instead of dot
|
|
324
|
+
this.superControl.control?.patchValue(0);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
isAllZeros(value) {
|
|
328
|
+
return value.split('').every((char) => char === '0');
|
|
329
|
+
}
|
|
330
|
+
customValidation(value) {
|
|
331
|
+
const configName = this.inputConfig.name.toLowerCase();
|
|
332
|
+
if (configName === InputStringEnum.YEAR &&
|
|
333
|
+
parseInt(value) > parseInt(moment().add(1, 'year').format('YYYY'))) {
|
|
334
|
+
this.superControl.control?.setErrors({ invalid: true });
|
|
335
|
+
}
|
|
336
|
+
if (configName === InputStringEnum.MONTHS) {
|
|
337
|
+
if (parseInt(value) < 1 || parseInt(value) > 12) {
|
|
338
|
+
this.superControl.control?.setErrors({ invalid: true });
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
this.superControl.control?.setErrors(null);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (configName === InputStringEnum.AXLES) {
|
|
345
|
+
if (parseInt(value) < 1 || parseInt(value) > 17) {
|
|
346
|
+
if (parseInt(value) < 1) {
|
|
347
|
+
this.superControl.control?.setErrors({ min: 1 });
|
|
348
|
+
}
|
|
349
|
+
else if (parseInt(value) > 17) {
|
|
350
|
+
this.superControl.control?.setErrors({ max: 17 });
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
this.superControl.control?.setErrors(null);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (configName === InputStringEnum.FULL_NAME &&
|
|
358
|
+
this.superControl.control?.value) {
|
|
359
|
+
this.capitalizeWords();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
capitalizeWords() {
|
|
363
|
+
const words = this.superControl.control?.value.split(' ');
|
|
364
|
+
const capitalized = words.map((word) => {
|
|
365
|
+
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
366
|
+
});
|
|
367
|
+
this.input.nativeElement.value = capitalized.join(' ');
|
|
368
|
+
}
|
|
369
|
+
sanitizeConsecutiveSpaces() {
|
|
370
|
+
const configNames = InputConstants.textTransformConfigNames;
|
|
371
|
+
if (configNames.includes(this.inputConfig.name.toLowerCase())) {
|
|
372
|
+
const sanitizedInput = this.input.nativeElement.value.replace(/\s{2,}/g, ' ');
|
|
373
|
+
if (sanitizedInput !== this.input.nativeElement.value) {
|
|
374
|
+
this.input.nativeElement.value = sanitizedInput;
|
|
375
|
+
this.setCursorForSanitizedInput();
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
setCursorForSanitizedInput() {
|
|
380
|
+
this.timeoutCleaner = setTimeout(() => {
|
|
381
|
+
this.input.nativeElement.setSelectionRange(this.lastCursorSpacePosition - 1, this.lastCursorSpacePosition - 1);
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
removeLeadingZero() {
|
|
385
|
+
if (this.inputConfig.removeLeadingZero) {
|
|
386
|
+
const currentValue = this.superControl.control?.value;
|
|
387
|
+
if (!currentValue) {
|
|
388
|
+
this.superControl.control?.patchValue('');
|
|
389
|
+
this.superControl.control?.setErrors(null);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
if (this.inputConfig.negativeLeadingZero) {
|
|
393
|
+
const isNegative = currentValue.startsWith('-');
|
|
394
|
+
if (isNegative) {
|
|
395
|
+
// Get the part after the negative sign
|
|
396
|
+
const numberPart = currentValue.slice(1);
|
|
397
|
+
// Remove leading zeros
|
|
398
|
+
const transformedNumber = numberPart.replace(/^0+(?=\d)/, '');
|
|
399
|
+
this.superControl.control?.patchValue(`-${transformedNumber}`);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
this.superControl.control?.patchValue(currentValue.replace(/^0+(?=\d)/, ''));
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
this.superControl.control?.patchValue(currentValue.replace(/^0+(?!$)/, ''));
|
|
211
407
|
}
|
|
212
408
|
}
|
|
213
409
|
}
|
|
@@ -604,10 +800,10 @@ export class InputStateService {
|
|
|
604
800
|
}
|
|
605
801
|
onInputConfigChange() {
|
|
606
802
|
// Price Separator
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
803
|
+
if (this.inputConfig.priceSeparator) {
|
|
804
|
+
this.originPriceSeparatorLimit =
|
|
805
|
+
this.inputConfig.priceSeparatorLimitation;
|
|
806
|
+
}
|
|
611
807
|
// Custom Range
|
|
612
808
|
if (this.inputConfig.isUsingCustomPeriodRange) {
|
|
613
809
|
if (this.inputConfig.isDisplayingCustomPeriodRange)
|
|
@@ -1343,7 +1539,7 @@ export class InputStateService {
|
|
|
1343
1539
|
this.destroy$.next();
|
|
1344
1540
|
this.destroy$.complete();
|
|
1345
1541
|
}
|
|
1346
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputStateService, deps: [{ token: i1.CalendarDateTimePickerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1542
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputStateService, deps: [{ token: i1.CalendarDateTimePickerService }, { token: i2.ThousandSeparatorPipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1347
1543
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputStateService, providedIn: 'root' }); }
|
|
1348
1544
|
}
|
|
1349
1545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputStateService, decorators: [{
|
|
@@ -1351,5 +1547,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1351
1547
|
args: [{
|
|
1352
1548
|
providedIn: 'root',
|
|
1353
1549
|
}]
|
|
1354
|
-
}], ctorParameters: function () { return [{ type: i1.CalendarDateTimePickerService }]; } });
|
|
1355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0L3NlcnZpY2VzL2NhLWlucHV0LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBRWIsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVM1QixVQUFVO0FBQ1YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsUUFBUTtBQUNSLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBS2xCLGFBQWE7QUFDYixPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0FBSzVELE1BQU0sT0FBTyxpQkFBaUI7SUErSDVCLFlBQW9CLGVBQThDO1FBQTlDLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQTlIMUQsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDM0Qsa0JBQWEsR0FDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzdELG9CQUFlLEdBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQyw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNoRSx1QkFBa0IsR0FDdkIsSUFBSSxD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QUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQTd1RFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZHNFdmVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8vIGJvb3RzdHJhcFxuaW1wb3J0IHsgTmdiUG9wb3ZlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuLy8gaGVscGVyc1xuaW1wb3J0IHsgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hlbHBlcnMvbWV0aG9kcy1jYWxjdWxhdGlvbnMuaGVscGVyJztcblxuLy8gZW51bXNcbmltcG9ydCB7XG4gIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0sXG4gIElucHV0Q29tbWFuZHNUeXBlLFxuICBJbnB1dENvbW1hbmRzQWN0aW9uLFxuICBJbnB1dFN0cmluZ0VudW0sXG59IGZyb20gJy4uL2VudW1zJztcblxuLy8gc2VydmljZXNcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvc2VydmljZXMvY2FsZW5kYXItZGF0ZXRpbWUtcGlja2VyLnNlcnZpY2UnO1xuXG4vLyBTdmcgcm91dGVzXG5pbXBvcnQgeyBJbnB1dENoYW5nZVZhbHVlLCBJbnB1dFN2Z1JvdXRlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0U3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpc0ZvY3VzSW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0ZvY3VzSW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzRm9jdXNJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc1RvdWNoZWRJbnB1dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzVG91Y2hlZElucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc1RvdWNoZWRJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc1Zpc2libGVDb21tYW5kc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzVmlzaWJsZUNvbW1hbmRzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0VkaXRJbnB1dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzRWRpdElucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0VkaXRJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzRHJvcGRvd25Ub2dnbGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkYXRlVGltZUlucHV0RGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBwdWJsaWMgZGF0ZVRpbWVJbnB1dERhdGUkOiBPYnNlcnZhYmxlPERhdGU+ID1cbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHNob3dEYXRlSW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBzaG93RGF0ZUlucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5zaG93RGF0ZUlucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzQ2Fwc0xvY2tPblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzQ2Fwc0xvY2tPbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNDYXBzTG9ja09uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PElucHV0Q2hhbmdlVmFsdWU+KCk7XG4gIHB1YmxpYyBvbkNoYW5nZSQ6IE9ic2VydmFibGU8SW5wdXRDaGFuZ2VWYWx1ZT4gPVxuICAgIHRoaXMub25DaGFuZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIE91dHB1dHNcbiAgcHJpdmF0ZSBjb21tYW5kRXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Q29tbWFuZHNFdmVudD4oKTtcbiAgcHVibGljIGNvbW1hbmRFdmVudCQ6IE9ic2VydmFibGU8Q29tbWFuZHNFdmVudD4gPVxuICAgIHRoaXMuY29tbWFuZEV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGNsZWFySW5wdXRFdmVudFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgY2xlYXJJbnB1dEV2ZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5jbGVhcklucHV0RXZlbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaW5jb3JyZWN0SW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGluY29ycmVjdElucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pbmNvcnJlY3RJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzaG93SGlkZURyb3Bkb3duU3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBzaG93SGlkZURyb3Bkb3duJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5zaG93SGlkZURyb3Bkb3duU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGRyb3BEb3duS2V5TmF2aWdhdGlvblN1YmplY3QgPSBuZXcgU3ViamVjdDx7XG4gICAga2V5Q29kZTogbnVtYmVyO1xuICAgIGRhdGE6IElDYUlucHV0IHwgbnVsbDtcbiAgfT4oKTtcbiAgcHVibGljIGRyb3BEb3duS2V5TmF2aWdhdGlvbiQ6IE9ic2VydmFibGU8e1xuICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICBkYXRhOiBJQ2FJbnB1dCB8IG51bGw7XG4gIH0+ID0gdGhpcy5kcm9wRG93bktleU5hdmlnYXRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgYmx1cklucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBibHVySW5wdXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5ibHVySW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgY2hhbmdlSW5wdXRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SW5wdXRDaGFuZ2VWYWx1ZT4oKTtcbiAgcHVibGljIGNoYW5nZUlucHV0JDogT2JzZXJ2YWJsZTxJbnB1dENoYW5nZVZhbHVlPiA9XG4gICAgdGhpcy5jaGFuZ2VJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHVibGljIGNvbWJpbmVkVmFyaWFibGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaXNGb2N1c0lucHV0JCxcbiAgICB0aGlzLmlzVG91Y2hlZElucHV0JCxcbiAgICB0aGlzLmlzVmlzaWJsZUNvbW1hbmRzJCxcbiAgICB0aGlzLmlzRWRpdElucHV0JCxcbiAgICB0aGlzLmlzRHJvcGRvd25Ub2dnbGVyJCxcbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlJCxcbiAgICB0aGlzLnNob3dEYXRlSW5wdXQkLFxuICAgIHRoaXMuaXNDYXBzTG9ja09uJCxcbiAgXSk7XG5cbiAgcHJpdmF0ZSBjZFJlZiE6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gIHByaXZhdGUgaW5wdXRDb25maWchOiBJQ2FJbnB1dDtcbiAgcHJpdmF0ZSBpbmNvcnJlY3RWYWx1ZSE6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBpbnB1dCE6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgc3VwZXJDb250cm9sITogTmdDb250cm9sO1xuXG4gIC8vIERhdGVcbiAgcHVibGljIG5ld0lucHV0Q2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc2VsZWN0aW9uSW5wdXQ6IG51bWJlciA9IC0xO1xuICBwcml2YXRlIHByZXZlbnRCbHVyITogYm9vbGVhbjtcblxuICAvLyBJbnB1dCBTZWxlY3Rpb25cbiAgcHVibGljIGlucHV0U2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIHNwYW5PbmUhOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgc3BhblR3byE6IEVsZW1lbnRSZWY7XG4gIHB1YmxpYyBzcGFuVGhyZWUhOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgaG9sZGVyMSE6IEVsZW1lbnRSZWY7XG4gIHB1YmxpYyB0MiE6IE5nYlBvcG92ZXI7XG4gIHB1YmxpYyBuZ2JNYWluUG9wb3ZlciE6IE5nYlBvcG92ZXI7XG5cbiAgcHJpdmF0ZSBpbnB1dENvbW1hbmRzVGltZW91dCE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIGZvY3VzQmx1ciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIHRpbWVvdXRDbGVhbmVyITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG4gIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBwYXNzd29yZFRpbWVvdXQhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcblxuICAvLyBQcmljZSBTZXBhcmF0b3JcbiAgcHVibGljIGN1cnNvcklucHV0UG9zaXRpb24hOiBudW1iZXI7XG4gIHB1YmxpYyBoYXNEZWNpbWFsSW5kZXg6IG51bWJlciA9IC0xO1xuICBwdWJsaWMgb3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCE6IG51bWJlcjtcbiAgcHVibGljIGlzRG90RGVsZXRlZCE6IGJvb2xlYW47XG5cbiAgLy8gTnVtYmVyIG9mIHNwYWNlc1xuICBwdWJsaWMgbnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgb25lU3BhY2VPbmx5Q291bnRlcjogbnVtYmVyID0gMDtcbiAgcHVibGljIGxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uOiBudW1iZXIgPSAwO1xuXG4gIC8vIE51bWJlciBvZiBwb2ludHNcbiAgcHVibGljIG51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50czogbnVtYmVyID0gMDtcbiAgcHVibGljIG51bWJlck9mUG9pbnRzOiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZSkge31cblxuICBwdWJsaWMgc2V0SXNGb2N1c0lucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzVG91Y2hlZElucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1RvdWNoZWRJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNWaXNpYmxlQ29tbWFuZHModmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlzaWJsZUNvbW1hbmRzU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc0VkaXRJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzRHJvcGRvd25Ub2dnbGVyKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0ZVRpbWVJbnB1dERhdGUodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93RGF0ZUlucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGF0ZUlucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc0NhcHNMb2NrT24odmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2Fwc0xvY2tPblN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRFbGVtZW50UmVmKGlucHV0OiBFbGVtZW50UmVmLCBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5jZFJlZiA9IGNkUmVmO1xuICB9XG5cbiAgcHVibGljIHNldFN1cGVyQ29udHJvbChzdXBlckNvbnRyb2w6IE5nQ29udHJvbCk6IHZvaWQge1xuICAgIHRoaXMuc3VwZXJDb250cm9sID0gc3VwZXJDb250cm9sO1xuICB9XG5cbiAgcHVibGljIHNldElucHV0Q29uZmlnKGNvbmZpZzogSUNhSW5wdXQpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0Q29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgcHVibGljIHNldEluY29ycmVjdFZhbHVlKGluY29ycmVjdFZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmNvcnJlY3RWYWx1ZSA9IGluY29ycmVjdFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldENvbW1hbmRFdmVudCh2YWx1ZTogQ29tbWFuZHNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY29tbWFuZEV2ZW50U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDbGVhcklucHV0RXZlbnQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySW5wdXRFdmVudFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5jb3JyZWN0SW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmluY29ycmVjdElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93SGlkZURyb3Bkb3duKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93SGlkZURyb3Bkb3duU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREcm9wRG93bktleU5hdmlnYXRpb24odmFsdWU6IHtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG4gICAgZGF0YTogSUNhSW5wdXQgfCBudWxsO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5kcm9wRG93bktleU5hdmlnYXRpb25TdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldEJsdXJJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYmx1cklucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDaGFuZ2VJbnB1dCh2YWx1ZTogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldE9uQ2hhbmdlKHZhbHVlOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLnNldENoYW5nZUlucHV0KG9iaik7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KG9iaik7XG4gICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvYmo7XG4gICAgICAgICAgdGhpcy5yZXNldERhdGVUaW1lSW5wdXRzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9iajtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gQ2xlYXIgd2hvbGUgaW5wdXRcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5yZW1vdmVJbnB1dCkge1xuICAgICAgdGhpcy5zZXRDbGVhcklucHV0RXZlbnQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEluY29ycmVjdCBJbnB1dFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmluY29ycmVjdElucHV0KSB7XG4gICAgICB0aGlzLmluY29ycmVjdFZhbHVlID0gIXRoaXMuaW5jb3JyZWN0VmFsdWU7XG4gICAgICB0aGlzLnNldEluY29ycmVjdElucHV0KHRoaXMuaW5jb3JyZWN0VmFsdWUpO1xuICAgIH1cbiAgICAvLyBOYXRpdmUgY2xlYXJcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIC8vIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzID0gMDtcbiAgICAgIC8vIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5UG9pbnRzID0gMDtcbiAgICAgIC8vIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgICAgLy8gdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID0gMDtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZXRJc1RvdWNoZWRJbnB1dCh0cnVlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIGlmIChcbiAgICAgICAgKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIsXG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSLFxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQsXG4gICAgICAgICAgXSBhcyBzdHJpbmdbXVxuICAgICAgICApLmluY2x1ZGVzKHRoaXMuaW5wdXRDb25maWcubmFtZSlcbiAgICAgIClcbiAgICAgICAgdGhpcy5yZXNldERhdGVUaW1lSW5wdXRzKCk7XG5cbiAgICAgIHRoaXMuc2V0Q2xlYXJJbnB1dEV2ZW50KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm1UZXh0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLmlucHV0Q29uZmlnLnRleHRUcmFuc2Zvcm0pIHtcbiAgICAgIGNhc2UgJ2NhcGl0YWxpemUnOiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmNoYXJBdCgwKT8udG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndXBwZXJjYXNlJzoge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPVxuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS50b0xvY2FsZVVwcGVyQ2FzZSgnZW4tVVMnKTtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0b0ZvY3VzRmlyc3RJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgJiYgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgPSBmYWxzZTtcbiAgICAgIH0sIDMwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Db21tYW5kcyhldmVudDogRXZlbnQsIHR5cGU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLlBNX0lOQ1JFTUVOVF9ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaGFuZGxlUG1JbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLkNPTkZJUk1fQ0FOQ0VMOlxuICAgICAgICB0aGlzLmhhbmRsZUNvbmZpcm1DYW5jZWwoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLk1PTlRIUzpcbiAgICAgICAgdGhpcy5oYW5kbGVNb250aHMoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBtSW5jcmVtZW50RGVjcmVtZW50KGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnRUaG91c2FuU2VwSW5OdW1iZXIoXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkRFQ1JFTUVOVDpcbiAgICAgICAgdGhpcy5kZWNyZW1lbnRQbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uSU5DUkVNRU5UOlxuICAgICAgICB0aGlzLmluY3JlbWVudFBtVmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5SRVNFVDpcbiAgICAgICAgdGhpcy5yZXNldFBtVmFsdWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID49IDEwMDAwICYmIHZhbHVlIDwgMjAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAxMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDIwMDAxICYmIHZhbHVlIDwgNTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAzMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDUwMDAxICYmIHZhbHVlIDwgMTAwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gNTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDEwMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSA1MDApXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID4gMTAwMDAgJiYgdmFsdWUgPCAyMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDEwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjAwMDEgJiYgdmFsdWUgPCA1MDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDMwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gNTAwMDEgJiYgdmFsdWUgPCAxMDAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyA1MDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgMTAwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgNTAwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UG1WYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZz8uZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXRDb25maWc/LmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDb25maXJtQ2FuY2VsKGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5DT05GSVJNOlxuICAgICAgICB0aGlzLmNvbmZpcm1Db21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkNBTkNFTDpcbiAgICAgICAgdGhpcy5jYW5jZWxDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0SXNFZGl0SW5wdXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybUNvbW1hbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICBhY3Rpb246IElucHV0Q29tbWFuZHNBY3Rpb24uQ09ORklSTSxcbiAgICAgIG1vZGU6XG4gICAgICAgICF0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgJiZcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSAnSW5wdXQgRHJvcGRvd24gQmFuayBOYW1lJ1xuICAgICAgICAgID8gJ2VkaXQnXG4gICAgICAgICAgOiAnbmV3JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQ29tbWFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7IGFjdGlvbjogSW5wdXRDb21tYW5kc0FjdGlvbi5DQU5DRUwgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1vbnRocyhhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmlucHV0Q29tbWFuZHNUaW1lb3V0KTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uTUlOVVM6XG4gICAgICAgIHRoaXMuZGVjcmVtZW50TW9udGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uUExVUzpcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA8IDEgfHxcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA+IDEyXG4gICAgKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRlY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA9PT0gMSB8fFxuICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApIC0gMVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPT09IDEyKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApICsgMVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAvLyBEcm9wRG93biBMYWJlbFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uID0gSW5wdXRTdmdSb3V0ZXMuZHluYW1pY0ZvY3VzTGFiZWxTdmc7XG4gICAgfVxuXG4gICAgLy8gRGF0ZXBpY2tlclxuICAgIGlmICh0aGlzLmlzRGF0ZVRpbWVQaWNrZXIoKSAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEgJiZcbiAgICAgICAgICAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB8fFxuICAgICAgICAoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgICBldmVudD8ucmVsYXRlZFRhcmdldCA9PT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHJldmVudEJsdXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudDIudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd25cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duKSB7XG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKHRydWUpO1xuICAgICAgdGhpcy5zZXRTaG93SGlkZURyb3Bkb3duKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBDb21tYW5kc1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzICYmICF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLnR5cGUgPT09IElucHV0Q29tbWFuZHNUeXBlLk1PTlRIUykge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PVxuICAgICAgICBJbnB1dENvbW1hbmRzVHlwZS5QTV9JTkNSRU1FTlRfREVDUkVNRU5UXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkJsdXIoZXZlbnQ/OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgLy8gRHJvcERvd24gTGFiZWxcblxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwgJiYgIXRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LnZhbHVlKVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5wbGFjZWhvbGRlckljb24gPSBJbnB1dFN2Z1JvdXRlcy5keW5hbWljTGFiZWxTdmc7XG5cbiAgICAvLyBFZGl0IElucHV0XG4gICAgaWYgKHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERhdGVwaWNrZXI7XG4gICAgaWYgKHRoaXMucHJldmVudEJsdXIpIHtcbiAgICAgIHRoaXMucHJldmVudEJsdXIgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBCYW5rXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5JTlBVVF9EUk9QRE9XTl9CQU5LX05BTUVcbiAgICApXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSBmYWxzZTtcblxuICAgIC8vIFByaWNlIFNlcGFyYXRvciAtIHJlbW92ZSBkb3Qgb24gZm9jdXMgb3V0XG4gICAgLy8gaWYgKFxuICAgIC8vICAgICB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yICYmXG4gICAgLy8gICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/Py52YWx1ZSAmJlxuICAgIC8vICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPz8udmFsdWU/LmluZGV4T2YoJy4nKSA+PSAwXG4gICAgLy8gKSB7XG4gICAgLy8gICAgIC8vIDQuMS4gQ2hlY2sgZm9yIERvdCBwb3NpdGlvblxuICAgIC8vICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKTtcblxuICAgIC8vICAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgLy8gICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgIC8vICAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmhhc0RlY2ltYWxJbmRleClcbiAgICAvLyAgICAgICAgICAgICAuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgLy8gICAgICk7XG5cbiAgICAvLyAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc2xpY2UoXG4gICAgLy8gICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCArIDFcbiAgICAvLyAgICAgKTtcblxuICAgIC8vICAgICAvLyA0LjQuIEdldCBvbmx5IHR3byBudW1iZXJzIG9mIGRlY2ltYWwgcGFydFxuICAgIC8vICAgICBkZWNpbWFsUGFydCA9IGRlY2ltYWxQYXJ0LnNsaWNlKDAsIDIpO1xuXG4gICAgLy8gICAgIGlmICghZGVjaW1hbFBhcnQpIHtcbiAgICAvLyAgICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gLTE7XG4gICAgLy8gICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKGludGVnZXJQYXJ0KTtcbiAgICAvLyAgICAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gSW5wdXQgQ29tbWFuZHNcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcykge1xuICAgICAgdGhpcy5ibHVyT25Db21tYW5kcygpO1xuICAgIH1cblxuICAgIC8vIERyb3Bkb3duXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEcm9wZG93biB8fCB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEKSAmJlxuICAgICAgICAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgaWYgKChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF0ZXBpY2tlclxuICAgICAgICBpZiAodGhpcy5pc0RhdGVUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzQmx1ciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJsdXJPbkRyb3BEb3duQXJyb3coKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTm9ybWFsLCB3aXRob3V0IGRyb3Bkb3duXG4gICAgZWxzZSB7XG4gICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgICAgLy8gSW5wdXQgQ29tbWFuZHNcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzKSB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG5cbiAgICAgIC8vIFBhc3N3b3JkXG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy50eXBlID09PSAncGFzc3dvcmQnKSB0aGlzLmJsdXJPblBhc3N3b3JkKCk7XG4gICAgICAvLyBOb3JtYWwgZm9jdXMgb3V0XG4gICAgICBlbHNlIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEJsdXJJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnNldElzVG91Y2hlZElucHV0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25Db21tYW5kcygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0Q29tbWFuZHNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25Ecm9wRG93bkFycm93KCk6IHZvaWQge1xuICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuXG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0U2hvd0hpZGVEcm9wZG93bih0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG4gICAgfSwgMTUwKTtcbiAgfVxuXG4gIHB1YmxpYyBibHVyT25QYXNzd29yZCgpIHtcbiAgICB0aGlzLnBhc3N3b3JkVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChpbnB1dDogYW55LCB0aW1lOiBudW1iZXIgPSAxMjApOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3Rpb25FbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQ7XG4gICAgaWYgKGlucHV0LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25FbmQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9LCB0aW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVkaXRJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZXRJc0VkaXRJbnB1dCh0cnVlKTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyh0cnVlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIHRoaXMuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICBhY3Rpb246ICdFZGl0IElucHV0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3Q2hpbGRzKFxuICAgIHNwYW5PbmU6IEVsZW1lbnRSZWYsXG4gICAgc3BhblR3bzogRWxlbWVudFJlZixcbiAgICBzcGFuVGhyZWU6IEVsZW1lbnRSZWYsXG4gICAgaG9sZGVyMTogRWxlbWVudFJlZlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnNwYW5PbmUgPSBzcGFuT25lO1xuICAgIHRoaXMuc3BhblR3byA9IHNwYW5Ud287XG4gICAgdGhpcy5zcGFuVGhyZWUgPSBzcGFuVGhyZWU7XG4gICAgdGhpcy5ob2xkZXIxID0gaG9sZGVyMTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3Q2hpbGRzUG9wb3ZlcihcbiAgICB0MjogTmdiUG9wb3ZlcixcbiAgICBuZ2JNYWluUG9wb3ZlcjogTmdiUG9wb3ZlclxuICApOiB2b2lkIHtcbiAgICB0aGlzLnQyID0gdDI7XG4gICAgdGhpcy5uZ2JNYWluUG9wb3ZlciA9IG5nYk1haW5Qb3BvdmVyO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApXG4gICAgICBpZiAodGhpcy50Mikge1xuICAgICAgICBpZiAoIXRoaXMudDIuaXNPcGVuKCkpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMudDIub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIoIXRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcblxuICAgIHRoaXMuc2V0U2hvd0hpZGVEcm9wZG93bih0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUGxhY2Vob2xkZXJJY29uRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5pc0VkaXRJbnB1dFN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICAgIGFjdGlvbjogJ1RvZ2dsZSBEcm9wZG93bicsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgICBkYXRhOiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSxcbiAgICAgICAgYWN0aW9uOiAnUGxhY2Vob2xkZXIgSWNvbiBFdmVudCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENvbmZpZ0NoYW5nZSgpOiB2b2lkIHtcbiAgICAvLyBQcmljZSBTZXBhcmF0b3JcbiAgICAvLyBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvcikge1xuICAgIC8vICAgdGhpcy5vcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ID1cbiAgICAvLyAgICAgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb247XG4gICAgLy8gfVxuXG4gICAgLy8gQ3VzdG9tIFJhbmdlXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNVc2luZ0N1c3RvbVBlcmlvZFJhbmdlKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Rpc3BsYXlpbmdDdXN0b21QZXJpb2RSYW5nZSlcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgICBlbHNlIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBEYXRlUGlja2VyXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQoZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnQyLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGFkZCBtb2RlIGluIGRyb3Bkb3duXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHM/LmFjdGl2ZSAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PSAnY29uZmlybS1jYW5jZWwnKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5ibHVlSW5wdXQpIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB0aGlzLnNldElzQ2Fwc0xvY2tPbihldmVudD8uZ2V0TW9kaWZpZXJTdGF0ZT8uKCdDYXBzTG9jaycpKTtcblxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZVRvU3RyaW5nID0gU3RyaW5nKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKTtcblxuICAgICAgdGhpcy5pc0RvdERlbGV0ZWQgPSB2YWx1ZVRvU3RyaW5nPy5pbmNsdWRlcygnLicpO1xuICAgIH1cblxuICAgIC8vIERpc2FibGUgZm9yIHBob25lIGZpZWxkIGZpcnN0IGNoYXJhY3RlciB0byBiZSAwXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBJbnB1dFN0cmluZ0VudW0uUEhPTkUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICBldmVudC5rZXkgPT09ICcwJ1xuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDkpIHtcbiAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbktleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnNldElzQ2Fwc0xvY2tPbihldmVudD8uZ2V0TW9kaWZpZXJTdGF0ZT8uKCdDYXBzTG9jaycpKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgZnVuY3Rpb24gcHJvcGVydHkgZm9yIGRpc2FibGluZyBtdWx0aXBsZSBkb3RzXG4gICAgY29uc3QgdmFsdWVUb1N0cmluZyA9IFN0cmluZyh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0RvdERlbGV0ZWQgJiYgIXZhbHVlVG9TdHJpbmc/LmluY2x1ZGVzKCcuJykpXG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleUNvZGUgPT0gOCAmJlxuICAgICAgISh0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHwgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKVxuICAgICkge1xuICAgICAgLy8gUmVzZXQgTXVsdGlwbGUgQ29uc2VjdXRpdmVseSBTcGFjZXNcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzID0gMDtcblxuICAgICAgLy8gUmVzZXQgT25lIFNwYWNlIE9ubHlcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUgJiZcbiAgICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy5pbmNsdWRlcygnICcpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkFERFJFU1NcbiAgICApIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA0MCB8fCBldmVudC5rZXlDb2RlID09PSAzOCkge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiB0aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkFERFJFU1MpIHtcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyhmYWxzZSk7XG4gICAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgICAgIHRoaXMuYmx1ck9uRHJvcERvd25BcnJvdygpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEYXRlICYgVGltZSBQaWNrZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgc2V0VGltZVBpY2tlclRpbWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUilcbiAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgIG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICtcbiAgICAgICAgICAgICh0aGlzLmlucHV0Q29uZmlnPy5pc0Zyb21EYXRlID8gJyAxMjoxNScgOiAnIDEyOjAwJylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgdGV4dCwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdDtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID1cbiAgICAgICAgZGF0ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICA/IGRhdGVcbiAgICAgICAgICA6IG5ldyBEYXRlKG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICsgJyAnICsgZGF0ZSk7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ0hIOm1tJyk7XG5cbiAgICAgIHRpbWVGb3JtYXQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnaGgvbW0vQScpO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRpbWVGb3JtYXQuc3BsaXQoJy8nKTtcbiAgICB9XG5cbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0ZXh0O1xuICAgIHRoaXMuc2V0T25DaGFuZ2UodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5zcGFuT25lKSB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzBdO1xuXG4gICAgaWYgKHRoaXMuc3BhblR3bylcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMV07XG4gICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICB9XG5cbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKGRhdGUpKTtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXREYXRlVGltZUlucHV0cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zcGFuT25lKVxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUlxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdISCc7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0FNJztcbiAgICAgIH1cblxuICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkgdGhpcy5pbnB1dFNlbGVjdGlvbiA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgb25EYXRlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHBhc3RlVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcGFzdGVkRGF0ZSA9IG5ldyBEYXRlKHBhc3RlVGV4dCk7XG4gICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGlvbihldmVudDoge1xuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICB0YXJnZXQ6IGFueTtcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb25JbnB1dCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpKTtcblxuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAmJiBjdXJyZW50U2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoID4gMTApIHtcbiAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21haW4nKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHNlbGVjdGlvbklucHV0O1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQ6IE5vZGUpOiB2b2lkIHtcbiAgICBsZXQgcmFuZ2U6IFJhbmdlO1xuICAgIGxldCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGw7XG5cbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93RGF0ZVRpbWVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuXG4gICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVNlbGVjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCwgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0gdGhpcy5pc05hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgIGNvbnN0IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkgPVxuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMyAmJlxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSO1xuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSB8fCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkge1xuICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNOYXZpZ2F0aW9uS2V5KGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uS2V5cyA9IFszNywgMzgsIDM5LCA0MCwgOCwgOSwgNDZdOyAvLyBBcnJvdyBrZXlzLCBCYWNrc3BhY2UsIFRhYiwgRGVsZXRlXG4gICAgcmV0dXJuIG5hdmlnYXRpb25LZXlzLmluY2x1ZGVzKGUua2V5Q29kZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5hdmlnYXRpb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgIGNhc2UgMzc6IC8vIExlZnQgYXJyb3dcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uTGVmdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0IGFycm93XG4gICAgICBjYXNlIDk6IC8vIFRhYlxuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OiAvLyBVcCBhcnJvd1xuICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ3VwJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0MDogLy8gRG93biBhcnJvd1xuICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ2Rvd24nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDg6IC8vIEJhY2tzcGFjZVxuICAgICAgY2FzZSA0NjogLy8gRGVsZXRlXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVTZWxlY3Rpb25MZWZ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAtPSAxO1xuICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc0RhdGVwaWNrZXJCYW5rQ2FyZCA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuICAgIGNvbnN0IG1heEluZGV4ID0gaXNEYXRlcGlja2VyQmFua0NhcmQgPyAxIDogMjtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0IDwgbWF4SW5kZXggJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgKz0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0SW5wdXQoKTtcbiAgICB9IGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09PSA5KSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNJbnB1dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXSkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzSW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgIGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSBhbGxJbnB1dHNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVLZXlib2FyZElucHV0cyhlOiBLZXlib2FyZEV2ZW50LCBpc1Jlc3RhcnQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc3Bhbk9uZVZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgaXNOYU4odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgY29uc3Qgc3BhblR3b1ZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG5cbiAgICBsZXQgc3BhblRocmVlVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHNwYW5UaHJlZVZhbHVlID1cbiAgICAgICAgaXNOYU4odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICAgIH1cblxuICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BhblR3b1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuVHdvVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAzMSkge1xuICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXREYXRlKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RGF0ZShwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZShcbiAgICAgICAgICAgIC0yXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAzMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzcGFuVGhyZWVWYWx1ZSB8fCBzcGFuVGhyZWVWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhblR3b1ZhbHVlIHx8IHNwYW5Ud29WYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGluZHgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlVGFiKSB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGVUaW1lTW9kZWwoZGlyZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgY29uc3QgaXNVcCA9IGRpcmVjdGlvbiA9PT0gJ3VwJztcbiAgICBjb25zdCBpc0RhdGVQaWNrZXIgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSO1xuICAgIGNvbnN0IGlzQmFua0NhcmRQaWNrZXIgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcblxuICAgIGlmIChpc0RhdGVQaWNrZXIgfHwgaXNCYW5rQ2FyZFBpY2tlcilcbiAgICAgIHRoaXMuaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgZWxzZSB0aGlzLmhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZU1vbnRoKGlzVXApO1xuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlRGF0ZShpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIGVsc2UgdGhpcy51cGRhdGVZZWFyKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlSG91cnMoaXNVcCk7XG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVNaW51dGVzKGlzVXApO1xuICAgIGVsc2UgdGhpcy50b2dnbGVBTVBNKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtb250aERlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1vbnRoKCkgKyBtb250aERlbHRhXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1vbnRoKCkgKyAxXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXREYXRlKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICA/IHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXREYXRlKClcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVllYXIoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgPyB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5zbGljZSgtMik7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSG91cnMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhvdXJzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIGxldCBzZWxlY3RlZEhvdXJzID1cbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEhvdXJzKCkgKyBob3Vyc0RlbHRhO1xuXG4gICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IDApIHNlbGVjdGVkSG91cnMgPSAyNDtcbiAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZSh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRIb3VycyhzZWxlY3RlZEhvdXJzKSlcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHNlbGVjdGVkSG91cnMgPiAxMiA/IHNlbGVjdGVkSG91cnMgLSAxMiA6IHNlbGVjdGVkSG91cnNcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICBzZWxlY3RlZEhvdXJzID4gMTEgJiYgc2VsZWN0ZWRIb3VycyA8IDI0ID8gJ1BNJyA6ICdBTSc7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbnV0ZXMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG1pbnV0ZXNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNaW51dGVzKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXNEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNaW51dGVzKClcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUFNUE0oKTogdm9pZCB7XG4gICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcblxuICAgIGNvbnN0IGhvdXJzVG9BZGQgPVxuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAtMTIgOiAxMjtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEhvdXJzKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEhvdXJzKCkgKyBob3Vyc1RvQWRkXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMik7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGV2dCA9IGV2dCA/IGV2dCA6ICh3aW5kb3cuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgbGV0IGNoYXJDb2RlID0gZXZ0LndoaWNoID8gZXZ0LndoaWNoIDogZXZ0LmtleUNvZGU7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykgfHwgKGNoYXJDb2RlID49IDk2ICYmIGNoYXJDb2RlIDw9IDEwNSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uUG9wb3ZlclNob3duKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Qb3BvdmVySGlkZGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25EYXRlVGltZSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgdGhpcy5kYXRlVGltZU1haW5UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZT8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblR3bz8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblRocmVlPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5leHBpcmVkRGF0ZUludmFsaWQgJiZcbiAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZSkuaXNCZWZvcmUobW9tZW50KCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgIC8vICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgLy8gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLndob2xlSW5wdXRTZWxlY3Rpb24pO1xuICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7XG4gICAgICBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlVGltZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRGVzdG9yeSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
1550
|
+
}], ctorParameters: function () { return [{ type: i1.CalendarDateTimePickerService }, { type: i2.ThousandSeparatorPipe }]; } });
|
|
1551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0L3NlcnZpY2VzL2NhLWlucHV0LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBRWIsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVM1QixVQUFVO0FBQ1YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsUUFBUTtBQUNSLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBS2xCLGFBQWE7QUFDYixPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUs1RCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBS3BELE1BQU0sT0FBTyxpQkFBaUI7SUErSDVCLFlBQ1UsZUFBOEMsRUFDOUMscUJBQTRDO1FBRDVDLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQUM5QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBaEk5Qyx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMzRCxrQkFBYSxHQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFbEMsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDN0Qsb0JBQWUsR0FDcEIsSUFBSSxDQUFDLHFC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UztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQTMrRFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZHNFdmVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8vIGJvb3RzdHJhcFxuaW1wb3J0IHsgTmdiUG9wb3ZlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuLy8gaGVscGVyc1xuaW1wb3J0IHsgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hlbHBlcnMvbWV0aG9kcy1jYWxjdWxhdGlvbnMuaGVscGVyJztcblxuLy8gZW51bXNcbmltcG9ydCB7XG4gIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0sXG4gIElucHV0Q29tbWFuZHNUeXBlLFxuICBJbnB1dENvbW1hbmRzQWN0aW9uLFxuICBJbnB1dFN0cmluZ0VudW0sXG59IGZyb20gJy4uL2VudW1zJztcblxuLy8gc2VydmljZXNcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvc2VydmljZXMvY2FsZW5kYXItZGF0ZXRpbWUtcGlja2VyLnNlcnZpY2UnO1xuXG4vLyBTdmcgcm91dGVzXG5pbXBvcnQgeyBJbnB1dENoYW5nZVZhbHVlLCBJbnB1dFN2Z1JvdXRlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gcGlwZXNcbmltcG9ydCB7IFRob3VzYW5kU2VwYXJhdG9yUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3Rob3VzYW5kLXNlcGFyYXRvci5waXBlJztcblxuLy8gY29uc3RhbnRzXG5pbXBvcnQgeyBJbnB1dENvbnN0YW50cyB9IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dFN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgaXNGb2N1c0lucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNGb2N1c0lucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0ZvY3VzSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNUb3VjaGVkSW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc1RvdWNoZWRJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNUb3VjaGVkSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNWaXNpYmxlQ29tbWFuZHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVDb21tYW5kcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNWaXNpYmxlQ29tbWFuZHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNFZGl0SW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0VkaXRJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0Ryb3Bkb3duVG9nZ2xlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihuZXcgRGF0ZSgpKTtcbiAgcHVibGljIGRhdGVUaW1lSW5wdXREYXRlJDogT2JzZXJ2YWJsZTxEYXRlPiA9XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzaG93RGF0ZUlucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc2hvd0RhdGVJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuc2hvd0RhdGVJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0NhcHNMb2NrT25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0NhcHNMb2NrT24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzQ2Fwc0xvY2tPblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxJbnB1dENoYW5nZVZhbHVlPigpO1xuICBwdWJsaWMgb25DaGFuZ2UkOiBPYnNlcnZhYmxlPElucHV0Q2hhbmdlVmFsdWU+ID1cbiAgICB0aGlzLm9uQ2hhbmdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPdXRwdXRzXG4gIHByaXZhdGUgY29tbWFuZEV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PENvbW1hbmRzRXZlbnQ+KCk7XG4gIHB1YmxpYyBjb21tYW5kRXZlbnQkOiBPYnNlcnZhYmxlPENvbW1hbmRzRXZlbnQ+ID1cbiAgICB0aGlzLmNvbW1hbmRFdmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBjbGVhcklucHV0RXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGNsZWFySW5wdXRFdmVudCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGluY29ycmVjdElucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBpbmNvcnJlY3RJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaW5jb3JyZWN0SW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc2hvd0hpZGVEcm9wZG93blN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgc2hvd0hpZGVEcm9wZG93biQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuc2hvd0hpZGVEcm9wZG93blN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkcm9wRG93bktleU5hdmlnYXRpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8e1xuICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICBkYXRhOiBJQ2FJbnB1dCB8IG51bGw7XG4gIH0+KCk7XG4gIHB1YmxpYyBkcm9wRG93bktleU5hdmlnYXRpb24kOiBPYnNlcnZhYmxlPHtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG4gICAgZGF0YTogSUNhSW5wdXQgfCBudWxsO1xuICB9PiA9IHRoaXMuZHJvcERvd25LZXlOYXZpZ2F0aW9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGJsdXJJbnB1dFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgYmx1cklucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYmx1cklucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGNoYW5nZUlucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PElucHV0Q2hhbmdlVmFsdWU+KCk7XG4gIHB1YmxpYyBjaGFuZ2VJbnB1dCQ6IE9ic2VydmFibGU8SW5wdXRDaGFuZ2VWYWx1ZT4gPVxuICAgIHRoaXMuY2hhbmdlSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBjb21iaW5lZFZhcmlhYmxlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlzRm9jdXNJbnB1dCQsXG4gICAgdGhpcy5pc1RvdWNoZWRJbnB1dCQsXG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kcyQsXG4gICAgdGhpcy5pc0VkaXRJbnB1dCQsXG4gICAgdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlciQsXG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSQsXG4gICAgdGhpcy5zaG93RGF0ZUlucHV0JCxcbiAgICB0aGlzLmlzQ2Fwc0xvY2tPbiQsXG4gIF0pO1xuXG4gIHByaXZhdGUgY2RSZWYhOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICBwcml2YXRlIGlucHV0Q29uZmlnITogSUNhSW5wdXQ7XG4gIHByaXZhdGUgaW5jb3JyZWN0VmFsdWUhOiBib29sZWFuO1xuXG4gIHByaXZhdGUgaW5wdXQhOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIHN1cGVyQ29udHJvbCE6IE5nQ29udHJvbDtcblxuICAvLyBEYXRlXG4gIHB1YmxpYyBuZXdJbnB1dENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdGlvbklucHV0OiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSBwcmV2ZW50Qmx1ciE6IGJvb2xlYW47XG5cbiAgLy8gSW5wdXQgU2VsZWN0aW9uXG4gIHB1YmxpYyBpbnB1dFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzcGFuT25lITogRWxlbWVudFJlZjtcbiAgcHVibGljIHNwYW5Ud28hOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgc3BhblRocmVlITogRWxlbWVudFJlZjtcbiAgcHVibGljIGhvbGRlcjEhOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgdDIhOiBOZ2JQb3BvdmVyO1xuICBwdWJsaWMgbmdiTWFpblBvcG92ZXIhOiBOZ2JQb3BvdmVyO1xuXG4gIHByaXZhdGUgaW5wdXRDb21tYW5kc1RpbWVvdXQhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBmb2N1c0JsdXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lb3V0Q2xlYW5lciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIGRhdGVUaW1lTWFpblRpbWVyITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG4gIHByaXZhdGUgcGFzc3dvcmRUaW1lb3V0ITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG5cbiAgLy8gUHJpY2UgU2VwYXJhdG9yXG4gIHB1YmxpYyBjdXJzb3JJbnB1dFBvc2l0aW9uITogbnVtYmVyO1xuICBwdWJsaWMgaGFzRGVjaW1hbEluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIG9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQhOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBpc0RvdERlbGV0ZWQhOiBib29sZWFuO1xuXG4gIC8vIE51bWJlciBvZiBzcGFjZXNcbiAgcHVibGljIG51bWJlck9mQ29uc2VjdXRpdmVseVNwYWNlczogbnVtYmVyID0gMDtcbiAgcHVibGljIG9uZVNwYWNlT25seUNvdW50ZXI6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBsYXN0Q3Vyc29yU3BhY2VQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gIHB1YmxpYyBudW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBudW1iZXJPZlBvaW50czogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aG91c2FuZFNlcGFyYXRvclBpcGU6IFRob3VzYW5kU2VwYXJhdG9yUGlwZVxuICApIHt9XG5cbiAgcHVibGljIHNldElzRm9jdXNJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c0lucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc1RvdWNoZWRJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNUb3VjaGVkSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzVmlzaWJsZUNvbW1hbmRzKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kc1N1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNFZGl0SW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc0Ryb3Bkb3duVG9nZ2xlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldERhdGVUaW1lSW5wdXREYXRlKHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2hvd0RhdGVJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RhdGVJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNDYXBzTG9ja09uKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0NhcHNMb2NrT25TdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElucHV0RWxlbWVudFJlZihpbnB1dDogRWxlbWVudFJlZiwgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuY2RSZWYgPSBjZFJlZjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdXBlckNvbnRyb2woc3VwZXJDb250cm9sOiBOZ0NvbnRyb2wpOiB2b2lkIHtcbiAgICB0aGlzLnN1cGVyQ29udHJvbCA9IHN1cGVyQ29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnB1dENvbmZpZyhjb25maWc6IElDYUlucHV0KTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dENvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbmNvcnJlY3RWYWx1ZShpbmNvcnJlY3RWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW5jb3JyZWN0VmFsdWUgPSBpbmNvcnJlY3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kRXZlbnQodmFsdWU6IENvbW1hbmRzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRFdmVudFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xlYXJJbnB1dEV2ZW50KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcklucHV0RXZlbnRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldEluY29ycmVjdElucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmNvcnJlY3RJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2hvd0hpZGVEcm9wZG93bih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0hpZGVEcm9wZG93blN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHZhbHVlOiB7XG4gICAga2V5Q29kZTogbnVtYmVyO1xuICAgIGRhdGE6IElDYUlucHV0IHwgbnVsbDtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZHJvcERvd25LZXlOYXZpZ2F0aW9uU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCbHVySW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmJsdXJJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2hhbmdlSW5wdXQodmFsdWU6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUlucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRPbkNoYW5nZSh2YWx1ZTogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDaGFuZ2VJbnB1dChvYmopO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChvYmopO1xuICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb2JqO1xuICAgICAgICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvYmo7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIENsZWFyIHdob2xlIGlucHV0XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucmVtb3ZlSW5wdXQpIHtcbiAgICAgIHRoaXMuc2V0Q2xlYXJJbnB1dEV2ZW50KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbmNvcnJlY3QgSW5wdXRcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pbmNvcnJlY3RJbnB1dCkge1xuICAgICAgdGhpcy5pbmNvcnJlY3RWYWx1ZSA9ICF0aGlzLmluY29ycmVjdFZhbHVlO1xuICAgICAgdGhpcy5zZXRJbmNvcnJlY3RJbnB1dCh0aGlzLmluY29ycmVjdFZhbHVlKTtcbiAgICB9XG4gICAgLy8gTmF0aXZlIGNsZWFyXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICAvLyB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVNwYWNlcyA9IDA7XG4gICAgICAvLyB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA9IDA7XG4gICAgICAvLyB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcbiAgICAgIC8vIHRoaXMub25lU3BhY2VPbmx5Q291bnRlciA9IDA7XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2V0SXNUb3VjaGVkSW5wdXQodHJ1ZSk7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICBpZiAoXG4gICAgICAgIChcbiAgICAgICAgICBbXG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSLFxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUixcbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJELFxuICAgICAgICAgIF0gYXMgc3RyaW5nW11cbiAgICAgICAgKS5pbmNsdWRlcyh0aGlzLmlucHV0Q29uZmlnLm5hbWUpXG4gICAgICApXG4gICAgICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuXG4gICAgICB0aGlzLnNldENsZWFySW5wdXRFdmVudCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtVGV4dChldmVudDogRXZlbnQsIGlzUGFzdGU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuY3Vyc29ySW5wdXRQb3NpdGlvbiA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgIC8vIEhhbmRsZSBwYXN0ZSBvcGVyYXRpb25cbiAgICBpZiAoaXNQYXN0ZSkge1xuICAgICAgdGhpcy5oYW5kbGVQYXN0ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseVRleHRUcmFuc2Zvcm1hdGlvbigpO1xuXG4gICAgLy8gQXBwbHkgdGhvdXNhbmQgYW5kIHByaWNlIHNlcGFyYXRvcnMgaWYgY29uZmlndXJlZFxuICAgIHRoaXMuYXBwbHlUaG91c2FuZFNlcGFyYXRvcigpO1xuICAgIHRoaXMuYXBwbHlQcmljZVNlcGFyYXRvcigpO1xuXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0aW9uKHZhbHVlKTtcblxuICAgIHRoaXMuc2FuaXRpemVDb25zZWN1dGl2ZVNwYWNlcygpO1xuXG4gICAgdGhpcy5yZW1vdmVMZWFkaW5nWmVybygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYXN0ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlucHV0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgKz0gdmFsdWU7XG4gICAgICB0aGlzLmxpbWl0SW5wdXRMZW5ndGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmlucHV0U2VsZWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRGVsZXRlIHNwYWNlcyBvbiBiZWdpbiBhbmQgZW5kXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnRyaW0oKTtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxpbWl0SW5wdXRMZW5ndGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGggPiB0aGlzLmlucHV0Q29uZmlnLm1heExlbmd0aCEpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5zdWJzdHJpbmcoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubWF4TGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUZXh0VHJhbnNmb3JtYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIHN3aXRjaCAodGhpcy5pbnB1dENvbmZpZy50ZXh0VHJhbnNmb3JtKSB7XG4gICAgICBjYXNlIElucHV0U3RyaW5nRW51bS5DQVBJVEFMSVpFOlxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPVxuICAgICAgICAgIHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dFN0cmluZ0VudW0uVVBQRVJDQVNFOlxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZS50b0xvY2FsZVVwcGVyQ2FzZSgnZW4tVVMnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRob3VzYW5kU2VwYXJhdG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnRob3VzYW5kU2VwYXJhdG9yICYmIGNvbnRyb2xWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuaXNBbGxaZXJvcyhjb250cm9sVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoJzAnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oY29udHJvbFZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQcmljZVNlcGFyYXRvcigpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvciAmJiBjb250cm9sVmFsdWUpIHtcbiAgICAgIC8vIDAuIERvbid0IGFsbG93IDAgYXMgZmlyc3QgY2hhcmFjdGVyXG4gICAgICBpZiAodGhpcy5pc0FsbFplcm9zKGNvbnRyb2xWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgnMCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIHVzZXIgc2V0IGRvdFxuICAgICAgaWYgKGNvbnRyb2xWYWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0V2l0aERlY2ltYWwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIElmIHVzZXIgZG9lc24ndCBzZXQgZG90XG4gICAgICAgIHRoaXMuZm9ybWF0V2l0aG91dERlY2ltYWwoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRJbnB1dEN1cnNvclBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRXaXRoRGVjaW1hbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICAvLyA0LjEuIENoZWNrIGZvciBEb3QgcG9zaXRpb25cbiAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IGNvbnRyb2xWYWx1ZS5pbmRleE9mKCcuJyk7XG5cbiAgICB0aGlzLm9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24hICsgMztcblxuICAgIC8vIDQuMi4gRGl2aWRlIG51bWJlciBpbnRvIGRlY2ltYWwgYW5kIGludGVnZXIgcGFydHNcbiAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgICBjb250cm9sVmFsdWVcbiAgICAgICAgLnNsaWNlKDAsIHRoaXMuaGFzRGVjaW1hbEluZGV4KVxuICAgICAgICAuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgKTtcbiAgICBsZXQgZGVjaW1hbFBhcnQgPSBjb250cm9sVmFsdWUuc2xpY2UodGhpcy5oYXNEZWNpbWFsSW5kZXggKyAxKTtcblxuICAgIGlmICghaW50ZWdlclBhcnQpIHtcbiAgICAgIGludGVnZXJQYXJ0ID0gJzAnO1xuICAgIH1cblxuICAgIC8vIDQuNC4gR2V0IG9ubHkgdHdvIG51bWJlcnMgb2YgdGhlIGRlY2ltYWwgcGFydFxuICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc2xpY2UoMCwgMik7XG5cbiAgICBpZiAoZGVjaW1hbFBhcnQpIHtcbiAgICAgIC8vIDQuNS4gU2V0IGZvcm1hdHRlZCBudW1iZXJcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoYCR7aW50ZWdlclBhcnR9LiR7ZGVjaW1hbFBhcnR9YCk7XG4gICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFdpdGhvdXREZWNpbWFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gLTE7XG5cbiAgICBpZiAoY29udHJvbFZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEpIHtcbiAgICAgIC8vIFRyYW5zZm9ybSB2YWx1ZSB3aXRoIHRob3VzYW5kIHNlcGFyYXRvclxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclBpcGUudHJhbnNmb3JtKGNvbnRyb2xWYWx1ZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIExpbWl0IHZhbGlkYXRpb25cbiAgICAgIHRoaXMub3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCA9XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uO1xuXG4gICAgICAvLyBDdXQgdmFsdWVcbiAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICBjb250cm9sVmFsdWUuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyYW5zZm9ybSB2YWx1ZSBhZ2FpbiBhZnRlciBjdXR0aW5nXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oY29udHJvbFZhbHVlKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldElucHV0Q3Vyc29yUG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICB0aGlzLmN1cnNvcklucHV0UG9zaXRpb24gK1xuICAgICAgICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEgPyAxIDogMCksXG4gICAgICAgICAgdGhpcy5jdXJzb3JJbnB1dFBvc2l0aW9uICtcbiAgICAgICAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5pbmRleE9mKCcuJykgPT09IC0xID8gMSA6IDApXG4gICAgICAgICk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgaGF2ZSAke259MDAwMDAgYW5kIHdlIGRlbGV0ZSBOIHRoZW4gd2UgZ290IHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGRvdFxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQWxsWmVyb3ModmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJykuZXZlcnkoKGNoYXIpID0+IGNoYXIgPT09ICcwJyk7XG4gIH1cblxuICBwcml2YXRlIGN1c3RvbVZhbGlkYXRpb24odmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZ05hbWUgPSB0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChcbiAgICAgIGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5ZRUFSICYmXG4gICAgICBwYXJzZUludCh2YWx1ZSkgPiBwYXJzZUludChtb21lbnQoKS5hZGQoMSwgJ3llYXInKS5mb3JtYXQoJ1lZWVknKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5NT05USFMpIHtcbiAgICAgIGlmIChwYXJzZUludCh2YWx1ZSkgPCAxIHx8IHBhcnNlSW50KHZhbHVlKSA+IDEyKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5BWExFUykge1xuICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IDEgfHwgcGFyc2VJbnQodmFsdWUpID4gMTcpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IDEpIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBtaW46IDEgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodmFsdWUpID4gMTcpIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBtYXg6IDE3IH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY29uZmlnTmFtZSA9PT0gSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRSAmJlxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuY2FwaXRhbGl6ZVdvcmRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYXBpdGFsaXplV29yZHMoKTogdm9pZCB7XG4gICAgY29uc3Qgd29yZHMgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IGNhcGl0YWxpemVkID0gd29yZHMubWFwKCh3b3JkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGNhcGl0YWxpemVkLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemVDb25zZWN1dGl2ZVNwYWNlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWdOYW1lcyA9IElucHV0Q29uc3RhbnRzLnRleHRUcmFuc2Zvcm1Db25maWdOYW1lcztcblxuICAgIGlmIChjb25maWdOYW1lcy5pbmNsdWRlcyh0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnJlcGxhY2UoXG4gICAgICAgIC9cXHN7Mix9L2csXG4gICAgICAgICcgJ1xuICAgICAgKTtcbiAgICAgIGlmIChzYW5pdGl6ZWRJbnB1dCAhPT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHNhbml0aXplZElucHV0O1xuICAgICAgICB0aGlzLnNldEN1cnNvckZvclNhbml0aXplZElucHV0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJzb3JGb3JTYW5pdGl6ZWRJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgIHRoaXMubGFzdEN1cnNvclNwYWNlUG9zaXRpb24gLSAxLFxuICAgICAgICB0aGlzLmxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uIC0gMVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGVhZGluZ1plcm8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucmVtb3ZlTGVhZGluZ1plcm8pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuXG4gICAgICBpZiAoIWN1cnJlbnRWYWx1ZSkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5lZ2F0aXZlTGVhZGluZ1plcm8pIHtcbiAgICAgICAgY29uc3QgaXNOZWdhdGl2ZSA9IGN1cnJlbnRWYWx1ZS5zdGFydHNXaXRoKCctJyk7XG5cbiAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAvLyBHZXQgdGhlIHBhcnQgYWZ0ZXIgdGhlIG5lZ2F0aXZlIHNpZ25cbiAgICAgICAgICBjb25zdCBudW1iZXJQYXJ0ID0gY3VycmVudFZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWROdW1iZXIgPSBudW1iZXJQYXJ0LnJlcGxhY2UoL14wKyg/PVxcZCkvLCAnJyk7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShgLSR7dHJhbnNmb3JtZWROdW1iZXJ9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5yZXBsYWNlKC9eMCsoPz1cXGQpLywgJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICBjdXJyZW50VmFsdWUucmVwbGFjZSgvXjArKD8hJCkvLCAnJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0b0ZvY3VzRmlyc3RJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgJiYgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgPSBmYWxzZTtcbiAgICAgIH0sIDMwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Db21tYW5kcyhldmVudDogRXZlbnQsIHR5cGU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLlBNX0lOQ1JFTUVOVF9ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaGFuZGxlUG1JbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLkNPTkZJUk1fQ0FOQ0VMOlxuICAgICAgICB0aGlzLmhhbmRsZUNvbmZpcm1DYW5jZWwoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLk1PTlRIUzpcbiAgICAgICAgdGhpcy5oYW5kbGVNb250aHMoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBtSW5jcmVtZW50RGVjcmVtZW50KGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnRUaG91c2FuU2VwSW5OdW1iZXIoXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkRFQ1JFTUVOVDpcbiAgICAgICAgdGhpcy5kZWNyZW1lbnRQbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uSU5DUkVNRU5UOlxuICAgICAgICB0aGlzLmluY3JlbWVudFBtVmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5SRVNFVDpcbiAgICAgICAgdGhpcy5yZXNldFBtVmFsdWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID49IDEwMDAwICYmIHZhbHVlIDwgMjAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAxMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDIwMDAxICYmIHZhbHVlIDwgNTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAzMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDUwMDAxICYmIHZhbHVlIDwgMTAwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gNTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDEwMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSA1MDApXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID4gMTAwMDAgJiYgdmFsdWUgPCAyMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDEwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjAwMDEgJiYgdmFsdWUgPCA1MDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDMwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gNTAwMDEgJiYgdmFsdWUgPCAxMDAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyA1MDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgMTAwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgNTAwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UG1WYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZz8uZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXRDb25maWc/LmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDb25maXJtQ2FuY2VsKGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5DT05GSVJNOlxuICAgICAgICB0aGlzLmNvbmZpcm1Db21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkNBTkNFTDpcbiAgICAgICAgdGhpcy5jYW5jZWxDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0SXNFZGl0SW5wdXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybUNvbW1hbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICBhY3Rpb246IElucHV0Q29tbWFuZHNBY3Rpb24uQ09ORklSTSxcbiAgICAgIG1vZGU6XG4gICAgICAgICF0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgJiZcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSAnSW5wdXQgRHJvcGRvd24gQmFuayBOYW1lJ1xuICAgICAgICAgID8gJ2VkaXQnXG4gICAgICAgICAgOiAnbmV3JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQ29tbWFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7IGFjdGlvbjogSW5wdXRDb21tYW5kc0FjdGlvbi5DQU5DRUwgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1vbnRocyhhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmlucHV0Q29tbWFuZHNUaW1lb3V0KTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uTUlOVVM6XG4gICAgICAgIHRoaXMuZGVjcmVtZW50TW9udGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uUExVUzpcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA8IDEgfHxcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA+IDEyXG4gICAgKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRlY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA9PT0gMSB8fFxuICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApIC0gMVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPT09IDEyKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApICsgMVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAvLyBEcm9wRG93biBMYWJlbFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uID0gSW5wdXRTdmdSb3V0ZXMuZHluYW1pY0ZvY3VzTGFiZWxTdmc7XG4gICAgfVxuXG4gICAgLy8gRGF0ZXBpY2tlclxuICAgIGlmICh0aGlzLmlzRGF0ZVRpbWVQaWNrZXIoKSAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEgJiZcbiAgICAgICAgICAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB8fFxuICAgICAgICAoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgICBldmVudD8ucmVsYXRlZFRhcmdldCA9PT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHJldmVudEJsdXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudDIudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd25cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duKSB7XG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKHRydWUpO1xuICAgICAgdGhpcy5zZXRTaG93SGlkZURyb3Bkb3duKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBDb21tYW5kc1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzICYmICF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLnR5cGUgPT09IElucHV0Q29tbWFuZHNUeXBlLk1PTlRIUykge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PVxuICAgICAgICBJbnB1dENvbW1hbmRzVHlwZS5QTV9JTkNSRU1FTlRfREVDUkVNRU5UXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkJsdXIoZXZlbnQ/OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgLy8gRHJvcERvd24gTGFiZWxcblxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwgJiYgIXRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LnZhbHVlKVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5wbGFjZWhvbGRlckljb24gPSBJbnB1dFN2Z1JvdXRlcy5keW5hbWljTGFiZWxTdmc7XG5cbiAgICAvLyBFZGl0IElucHV0XG4gICAgaWYgKHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERhdGVwaWNrZXI7XG4gICAgaWYgKHRoaXMucHJldmVudEJsdXIpIHtcbiAgICAgIHRoaXMucHJldmVudEJsdXIgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBCYW5rXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5JTlBVVF9EUk9QRE9XTl9CQU5LX05BTUVcbiAgICApXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSBmYWxzZTtcblxuICAgIC8vIFByaWNlIFNlcGFyYXRvciAtIHJlbW92ZSBkb3Qgb24gZm9jdXMgb3V0XG4gICAgLy8gaWYgKFxuICAgIC8vICAgICB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yICYmXG4gICAgLy8gICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/Py52YWx1ZSAmJlxuICAgIC8vICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPz8udmFsdWU/LmluZGV4T2YoJy4nKSA+PSAwXG4gICAgLy8gKSB7XG4gICAgLy8gICAgIC8vIDQuMS4gQ2hlY2sgZm9yIERvdCBwb3NpdGlvblxuICAgIC8vICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKTtcblxuICAgIC8vICAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgLy8gICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgIC8vICAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmhhc0RlY2ltYWxJbmRleClcbiAgICAvLyAgICAgICAgICAgICAuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgLy8gICAgICk7XG5cbiAgICAvLyAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc2xpY2UoXG4gICAgLy8gICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCArIDFcbiAgICAvLyAgICAgKTtcblxuICAgIC8vICAgICAvLyA0LjQuIEdldCBvbmx5IHR3byBudW1iZXJzIG9mIGRlY2ltYWwgcGFydFxuICAgIC8vICAgICBkZWNpbWFsUGFydCA9IGRlY2ltYWxQYXJ0LnNsaWNlKDAsIDIpO1xuXG4gICAgLy8gICAgIGlmICghZGVjaW1hbFBhcnQpIHtcbiAgICAvLyAgICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gLTE7XG4gICAgLy8gICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKGludGVnZXJQYXJ0KTtcbiAgICAvLyAgICAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gSW5wdXQgQ29tbWFuZHNcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcykge1xuICAgICAgdGhpcy5ibHVyT25Db21tYW5kcygpO1xuICAgIH1cblxuICAgIC8vIERyb3Bkb3duXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEcm9wZG93biB8fCB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEKSAmJlxuICAgICAgICAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgaWYgKChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF0ZXBpY2tlclxuICAgICAgICBpZiAodGhpcy5pc0RhdGVUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzQmx1ciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJsdXJPbkRyb3BEb3duQXJyb3coKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTm9ybWFsLCB3aXRob3V0IGRyb3Bkb3duXG4gICAgZWxzZSB7XG4gICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgICAgLy8gSW5wdXQgQ29tbWFuZHNcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzKSB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG5cbiAgICAgIC8vIFBhc3N3b3JkXG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy50eXBlID09PSAncGFzc3dvcmQnKSB0aGlzLmJsdXJPblBhc3N3b3JkKCk7XG4gICAgICAvLyBOb3JtYWwgZm9jdXMgb3V0XG4gICAgICBlbHNlIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEJsdXJJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnNldElzVG91Y2hlZElucHV0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25Db21tYW5kcygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0Q29tbWFuZHNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25Ecm9wRG93bkFycm93KCk6IHZvaWQge1xuICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuXG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0U2hvd0hpZGVEcm9wZG93bih0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG4gICAgfSwgMTUwKTtcbiAgfVxuXG4gIHB1YmxpYyBibHVyT25QYXNzd29yZCgpIHtcbiAgICB0aGlzLnBhc3N3b3JkVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChpbnB1dDogYW55LCB0aW1lOiBudW1iZXIgPSAxMjApOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3Rpb25FbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQ7XG4gICAgaWYgKGlucHV0LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25FbmQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9LCB0aW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVkaXRJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZXRJc0VkaXRJbnB1dCh0cnVlKTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyh0cnVlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIHRoaXMuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICBhY3Rpb246ICdFZGl0IElucHV0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3Q2hpbGRzKFxuICAgIHNwYW5PbmU6IEVsZW1lbnRSZWYsXG4gICAgc3BhblR3bzogRWxlbWVudFJlZixcbiAgICBzcGFuVGhyZWU6IEVsZW1lbnRSZWYsXG4gICAgaG9sZGVyMTogRWxlbWVudFJlZlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnNwYW5PbmUgPSBzcGFuT25lO1xuICAgIHRoaXMuc3BhblR3byA9IHNwYW5Ud287XG4gICAgdGhpcy5zcGFuVGhyZWUgPSBzcGFuVGhyZWU7XG4gICAgdGhpcy5ob2xkZXIxID0gaG9sZGVyMTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3Q2hpbGRzUG9wb3ZlcihcbiAgICB0MjogTmdiUG9wb3ZlcixcbiAgICBuZ2JNYWluUG9wb3ZlcjogTmdiUG9wb3ZlclxuICApOiB2b2lkIHtcbiAgICB0aGlzLnQyID0gdDI7XG4gICAgdGhpcy5uZ2JNYWluUG9wb3ZlciA9IG5nYk1haW5Qb3BvdmVyO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApXG4gICAgICBpZiAodGhpcy50Mikge1xuICAgICAgICBpZiAoIXRoaXMudDIuaXNPcGVuKCkpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMudDIub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIoIXRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcblxuICAgIHRoaXMuc2V0U2hvd0hpZGVEcm9wZG93bih0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUGxhY2Vob2xkZXJJY29uRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5pc0VkaXRJbnB1dFN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICAgIGFjdGlvbjogJ1RvZ2dsZSBEcm9wZG93bicsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgICBkYXRhOiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSxcbiAgICAgICAgYWN0aW9uOiAnUGxhY2Vob2xkZXIgSWNvbiBFdmVudCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENvbmZpZ0NoYW5nZSgpOiB2b2lkIHtcbiAgICAvLyBQcmljZSBTZXBhcmF0b3JcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvcikge1xuICAgICAgdGhpcy5vcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ID1cbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb247XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9tIFJhbmdlXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNVc2luZ0N1c3RvbVBlcmlvZFJhbmdlKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Rpc3BsYXlpbmdDdXN0b21QZXJpb2RSYW5nZSlcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgICBlbHNlIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBEYXRlUGlja2VyXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQoZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnQyLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGFkZCBtb2RlIGluIGRyb3Bkb3duXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHM/LmFjdGl2ZSAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PSAnY29uZmlybS1jYW5jZWwnKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5ibHVlSW5wdXQpIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB0aGlzLnNldElzQ2Fwc0xvY2tPbihldmVudD8uZ2V0TW9kaWZpZXJTdGF0ZT8uKCdDYXBzTG9jaycpKTtcblxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZVRvU3RyaW5nID0gU3RyaW5nKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKTtcblxuICAgICAgdGhpcy5pc0RvdERlbGV0ZWQgPSB2YWx1ZVRvU3RyaW5nPy5pbmNsdWRlcygnLicpO1xuICAgIH1cblxuICAgIC8vIERpc2FibGUgZm9yIHBob25lIGZpZWxkIGZpcnN0IGNoYXJhY3RlciB0byBiZSAwXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBJbnB1dFN0cmluZ0VudW0uUEhPTkUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICBldmVudC5rZXkgPT09ICcwJ1xuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDkpIHtcbiAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbktleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnNldElzQ2Fwc0xvY2tPbihldmVudD8uZ2V0TW9kaWZpZXJTdGF0ZT8uKCdDYXBzTG9jaycpKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgZnVuY3Rpb24gcHJvcGVydHkgZm9yIGRpc2FibGluZyBtdWx0aXBsZSBkb3RzXG4gICAgY29uc3QgdmFsdWVUb1N0cmluZyA9IFN0cmluZyh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0RvdERlbGV0ZWQgJiYgIXZhbHVlVG9TdHJpbmc/LmluY2x1ZGVzKCcuJykpXG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleUNvZGUgPT0gOCAmJlxuICAgICAgISh0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHwgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKVxuICAgICkge1xuICAgICAgLy8gUmVzZXQgTXVsdGlwbGUgQ29uc2VjdXRpdmVseSBTcGFjZXNcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzID0gMDtcblxuICAgICAgLy8gUmVzZXQgT25lIFNwYWNlIE9ubHlcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUgJiZcbiAgICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy5pbmNsdWRlcygnICcpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkFERFJFU1NcbiAgICApIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA0MCB8fCBldmVudC5rZXlDb2RlID09PSAzOCkge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiB0aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkFERFJFU1MpIHtcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyhmYWxzZSk7XG4gICAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgICAgIHRoaXMuYmx1ck9uRHJvcERvd25BcnJvdygpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEYXRlICYgVGltZSBQaWNrZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgc2V0VGltZVBpY2tlclRpbWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUilcbiAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgIG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICtcbiAgICAgICAgICAgICh0aGlzLmlucHV0Q29uZmlnPy5pc0Zyb21EYXRlID8gJyAxMjoxNScgOiAnIDEyOjAwJylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgdGV4dCwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdDtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID1cbiAgICAgICAgZGF0ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICA/IGRhdGVcbiAgICAgICAgICA6IG5ldyBEYXRlKG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICsgJyAnICsgZGF0ZSk7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ0hIOm1tJyk7XG5cbiAgICAgIHRpbWVGb3JtYXQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnaGgvbW0vQScpO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRpbWVGb3JtYXQuc3BsaXQoJy8nKTtcbiAgICB9XG5cbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0ZXh0O1xuICAgIHRoaXMuc2V0T25DaGFuZ2UodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5zcGFuT25lKSB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzBdO1xuXG4gICAgaWYgKHRoaXMuc3BhblR3bylcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMV07XG4gICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICB9XG5cbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKGRhdGUpKTtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXREYXRlVGltZUlucHV0cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zcGFuT25lKVxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUlxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdISCc7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0FNJztcbiAgICAgIH1cblxuICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkgdGhpcy5pbnB1dFNlbGVjdGlvbiA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgb25EYXRlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHBhc3RlVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcGFzdGVkRGF0ZSA9IG5ldyBEYXRlKHBhc3RlVGV4dCk7XG4gICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGlvbihldmVudDoge1xuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICB0YXJnZXQ6IGFueTtcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb25JbnB1dCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpKTtcblxuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAmJiBjdXJyZW50U2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoID4gMTApIHtcbiAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21haW4nKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHNlbGVjdGlvbklucHV0O1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQ6IE5vZGUpOiB2b2lkIHtcbiAgICBsZXQgcmFuZ2U6IFJhbmdlO1xuICAgIGxldCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGw7XG5cbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93RGF0ZVRpbWVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuXG4gICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVNlbGVjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCwgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0gdGhpcy5pc05hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgIGNvbnN0IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkgPVxuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMyAmJlxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSO1xuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSB8fCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkge1xuICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNOYXZpZ2F0aW9uS2V5KGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uS2V5cyA9IFszNywgMzgsIDM5LCA0MCwgOCwgOSwgNDZdOyAvLyBBcnJvdyBrZXlzLCBCYWNrc3BhY2UsIFRhYiwgRGVsZXRlXG4gICAgcmV0dXJuIG5hdmlnYXRpb25LZXlzLmluY2x1ZGVzKGUua2V5Q29kZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5hdmlnYXRpb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgIGNhc2UgMzc6IC8vIExlZnQgYXJyb3dcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uTGVmdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0IGFycm93XG4gICAgICBjYXNlIDk6IC8vIFRhYlxuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OiAvLyBVcCBhcnJvd1xuICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ3VwJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0MDogLy8gRG93biBhcnJvd1xuICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ2Rvd24nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDg6IC8vIEJhY2tzcGFjZVxuICAgICAgY2FzZSA0NjogLy8gRGVsZXRlXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVTZWxlY3Rpb25MZWZ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAtPSAxO1xuICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc0RhdGVwaWNrZXJCYW5rQ2FyZCA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuICAgIGNvbnN0IG1heEluZGV4ID0gaXNEYXRlcGlja2VyQmFua0NhcmQgPyAxIDogMjtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0IDwgbWF4SW5kZXggJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgKz0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0SW5wdXQoKTtcbiAgICB9IGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09PSA5KSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNJbnB1dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXSkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzSW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgIGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSBhbGxJbnB1dHNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVLZXlib2FyZElucHV0cyhlOiBLZXlib2FyZEV2ZW50LCBpc1Jlc3RhcnQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc3Bhbk9uZVZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgaXNOYU4odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgY29uc3Qgc3BhblR3b1ZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG5cbiAgICBsZXQgc3BhblRocmVlVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHNwYW5UaHJlZVZhbHVlID1cbiAgICAgICAgaXNOYU4odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICAgIH1cblxuICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BhblR3b1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuVHdvVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAzMSkge1xuICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXREYXRlKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RGF0ZShwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZShcbiAgICAgICAgICAgIC0yXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAzMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzcGFuVGhyZWVWYWx1ZSB8fCBzcGFuVGhyZWVWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhblR3b1ZhbHVlIHx8IHNwYW5Ud29WYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGluZHgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlVGFiKSB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGVUaW1lTW9kZWwoZGlyZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgY29uc3QgaXNVcCA9IGRpcmVjdGlvbiA9PT0gJ3VwJztcbiAgICBjb25zdCBpc0RhdGVQaWNrZXIgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSO1xuICAgIGNvbnN0IGlzQmFua0NhcmRQaWNrZXIgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcblxuICAgIGlmIChpc0RhdGVQaWNrZXIgfHwgaXNCYW5rQ2FyZFBpY2tlcilcbiAgICAgIHRoaXMuaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgZWxzZSB0aGlzLmhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZU1vbnRoKGlzVXApO1xuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlRGF0ZShpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIGVsc2UgdGhpcy51cGRhdGVZZWFyKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlSG91cnMoaXNVcCk7XG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVNaW51dGVzKGlzVXApO1xuICAgIGVsc2UgdGhpcy50b2dnbGVBTVBNKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtb250aERlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1vbnRoKCkgKyBtb250aERlbHRhXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1vbnRoKCkgKyAxXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXREYXRlKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICA/IHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXREYXRlKClcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVllYXIoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgPyB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5zbGljZSgtMik7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSG91cnMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhvdXJzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIGxldCBzZWxlY3RlZEhvdXJzID1cbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEhvdXJzKCkgKyBob3Vyc0RlbHRhO1xuXG4gICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IDApIHNlbGVjdGVkSG91cnMgPSAyNDtcbiAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZSh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRIb3VycyhzZWxlY3RlZEhvdXJzKSlcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHNlbGVjdGVkSG91cnMgPiAxMiA/IHNlbGVjdGVkSG91cnMgLSAxMiA6IHNlbGVjdGVkSG91cnNcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICBzZWxlY3RlZEhvdXJzID4gMTEgJiYgc2VsZWN0ZWRIb3VycyA8IDI0ID8gJ1BNJyA6ICdBTSc7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbnV0ZXMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG1pbnV0ZXNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNaW51dGVzKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXNEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNaW51dGVzKClcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUFNUE0oKTogdm9pZCB7XG4gICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcblxuICAgIGNvbnN0IGhvdXJzVG9BZGQgPVxuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAtMTIgOiAxMjtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEhvdXJzKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEhvdXJzKCkgKyBob3Vyc1RvQWRkXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMik7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGV2dCA9IGV2dCA/IGV2dCA6ICh3aW5kb3cuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgbGV0IGNoYXJDb2RlID0gZXZ0LndoaWNoID8gZXZ0LndoaWNoIDogZXZ0LmtleUNvZGU7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykgfHwgKGNoYXJDb2RlID49IDk2ICYmIGNoYXJDb2RlIDw9IDEwNSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uUG9wb3ZlclNob3duKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Qb3BvdmVySGlkZGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25EYXRlVGltZSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgdGhpcy5kYXRlVGltZU1haW5UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZT8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblR3bz8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblRocmVlPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5leHBpcmVkRGF0ZUludmFsaWQgJiZcbiAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZSkuaXNCZWZvcmUobW9tZW50KCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgIC8vICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgLy8gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLndob2xlSW5wdXRTZWxlY3Rpb24pO1xuICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7XG4gICAgICBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlVGltZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRGVzdG9yeSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|