@tiba-spark/client-shared-lib 10.3.0-396 → 10.3.0-403

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.
@@ -422,31 +422,28 @@ export class TibaValidators {
422
422
  }
423
423
  return null;
424
424
  }
425
- static timeValidator(fromHour, fromMinutes, toHour, toMinutes) {
425
+ static validateTibaTimeInRangeValidator(minTime, maxTime) {
426
+ return (control) => {
427
+ return this.validateTibaTimeInRange(control.value, minTime, maxTime);
428
+ };
429
+ }
430
+ static validateStringHHMMInRangeValidator(minTime, maxTime) {
426
431
  return (control) => {
427
432
  if (!!control.value) {
428
- if (control.value.length !== 4) { // Assuming your time format is 'HHMM'
433
+ if (control.value.length !== 4) { // Assuming time format is 'HHMM'
429
434
  return { form_validation_invalid_time_format: true };
430
435
  }
431
436
  else {
432
437
  const hours = parseInt(control.value.slice(0, 2));
433
438
  const minutes = parseInt(control.value.slice(2));
434
- const isValidTime = (hours > fromHour || (hours === fromHour && minutes >= fromMinutes)) &&
435
- (hours < toHour || (hours === toHour && minutes <= toMinutes));
436
- if (!isValidTime) {
437
- return {
438
- form_validation_invalid_time: {
439
- from: `${fromHour.toString().padStart(2, '0')}:${fromMinutes.toString().padStart(2, '0')}`,
440
- to: `${toHour.toString().padStart(2, '0')}:${toMinutes.toString().padStart(2, '0')}`,
441
- }
442
- };
443
- }
439
+ const currentTime = { hours, minutes };
440
+ return this.validateTibaTimeInRange(currentTime, minTime, maxTime);
444
441
  }
445
442
  }
446
443
  return null;
447
444
  };
448
445
  }
449
- static timeRangeArrayValidator() {
446
+ static timeRangeArrayOverlapValidator() {
450
447
  return (control) => {
451
448
  if (control.valid && control.enabled) {
452
449
  const formArray = control.value;
@@ -459,8 +456,12 @@ export class TibaValidators {
459
456
  const compareRange = formArray[j];
460
457
  const compareFrom = timeToMoment(compareRange.from);
461
458
  const compareTo = timeToMoment(compareRange.to);
462
- if (currentFrom.isBefore(compareTo) && currentTo.isAfter(compareFrom)) {
463
- return { form_validation_time_range_overlap: true };
459
+ if (compareFrom && compareTo) {
460
+ // Check for overlap
461
+ const rangesOverlap = currentFrom.isBefore(compareTo) && currentTo.isAfter(compareFrom);
462
+ if (rangesOverlap) {
463
+ return { form_validation_time_range_overlap: true };
464
+ }
464
465
  }
465
466
  }
466
467
  }
@@ -481,5 +482,27 @@ export class TibaValidators {
481
482
  return fromTimeInNumber.toString().length === VALID_TIME_MAX_LENGTH &&
482
483
  toTimeInNumber.toString().length === VALID_TIME_MAX_LENGTH;
483
484
  }
485
+ static validateTibaTimeInRange(currentTime, minTime, maxTime) {
486
+ // If time is undefined, return null (no error)
487
+ if (!currentTime) {
488
+ return null;
489
+ }
490
+ const formatTime = (time) => `${time.hours.toString().padStart(2, '0')}:${time.minutes.toString().padStart(2, '0')}`;
491
+ const hours = +currentTime.hours;
492
+ const minutes = +currentTime.minutes;
493
+ const isValidTime = (hours > minTime.hours || (hours === minTime.hours && minutes >= minTime.minutes)) &&
494
+ (hours < maxTime.hours || (hours === maxTime.hours && minutes <= maxTime.minutes));
495
+ // If time is valid, return null (no error)
496
+ if (isValidTime) {
497
+ return null;
498
+ }
499
+ // Otherwise, return the validation error with formatted time range
500
+ return {
501
+ form_validation_invalid_time: {
502
+ from: formatTime(minTime),
503
+ to: formatTime(maxTime),
504
+ }
505
+ };
506
+ }
484
507
  }
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsT0FBTyxFQUFvQixZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0QsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx5SEFBeUgsQ0FBQztBQUN2SixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyw0QkFBNEIsQ0FBQztBQUNoRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLHVGQUF1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QUNsQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNwRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUVoRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQ0FDckUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLElBQUksRUFBRSxDQUFDOzZCQUNyRDt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLDJCQUEyQixDQUFDLFdBQTRCLEVBQUUsU0FBMEI7UUFDakcsTUFBTSxnQkFBZ0IsR0FBVyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ25ELE1BQU0sY0FBYyxHQUFXLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDL0MsT0FBTyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksY0FBYyxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsY0FBYyxDQUFDO0lBQ3JHLENBQUM7SUFBQSxDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQTRCLEVBQUUsU0FBMEI7UUFDeEYsTUFBTSxnQkFBZ0IsR0FBVyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ25ELE1BQU0sY0FBYyxHQUFXLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDL0MsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUsscUJBQXFCO1lBQ2pFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUsscUJBQXFCLENBQUM7SUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGVib3VuY2VUaW1lLCBkZWxheSwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElOUFVUX1NFQVJDSF9ERUJPVU5DRV9USU1FLCBWQUxJRF9USU1FX01BWF9MRU5HVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi9lbnVtcyc7XHJcbmltcG9ydCB7IENsb3VkIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eSc7XHJcbmltcG9ydCB7IFRpbWUgYXMgVGliYVRpbWUsIHRpbWVUb01vbWVudCB9IGZyb20gJy4vZGF0ZS51dGlsJztcclxuXHJcbmNvbnN0IE1JTl9BTExPV0VEX0JBTEFOQ0UgPSAwO1xyXG5jb25zdCBNQVhfQUxMT1dFRF9CQUxBTkNFID0gMjU1O1xyXG5leHBvcnQgY29uc3Qgbm9FbW9qaVJlZ2V4ID0gL1teYS16QS1aMC05IF0vZ207XHJcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl0pW0EtWmEtelxcZCFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX5dezQsfSQvZztcclxuZXhwb3J0IGNvbnN0IHBvc2l0aXZlTnVtYmVyc1JlZ2V4ID0gL15bMC05XSsoXFwuP1swLTldKyk/JC87XHJcbmV4cG9ydCBjb25zdCBwb3NpdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm9SZWdleCA9IC9eKD89LipbMS05XSlcXGQqKD86XFwuXFxkKyk/JC87XHJcbmV4cG9ydCBjb25zdCBhbHBoYW51bWVyaWNSZWdleCA9IC9eW2EtekEtWjAtOV0rJC87XHJcbmV4cG9ydCBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzAtOV0rJC87XHJcbmV4cG9ydCBjb25zdCBpbnRlZ2VyTnVtYmVyc1JlZ2V4ID0gL15bLV0/KFxcZCspPyQvO1xyXG5leHBvcnQgY29uc3QgZGVjaW1hbFBvc2l0aXZlUmVnZXggPSAvXihcXGQrKShcXC5cXGR7MSwyfSk/JC87XHJcbmV4cG9ydCBjb25zdCBkZWNpbWFsUmVnZXggPSAvXi0/KFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcclxuZXhwb3J0IGNvbnN0IHJlZ2V4RXhwID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kLztcclxuZXhwb3J0IGNvbnN0IHBvc2l0aXZlSW50ZWdlck51bWJlcnNJbmNsdWRlWmVyb1JlZ2V4ID0gL14oMHxbMS05XVxcZCopJC87XHJcbmV4cG9ydCBjb25zdCBwb3NpdGl2ZUludGVnZXJOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXggPSAvXlsxLTldXFxkKiQvO1xyXG5leHBvcnQgY29uc3QgcGVyY2VudGFnZVJlZ2V4ID0gL14oMTAwKFxcLjArKT98WzEtOV0/XFxkKFxcLlxcZCspPykkLztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KHZhbDogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUaWJhVmFsaWRhdG9ycyB7XHJcblxyXG4gIC8vIE5vIGVtb2ppIHZhbGlkYXRpb25cclxuICBzdGF0aWMgbm9FbW9qaShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmIHZhbC50b1N0cmluZygpLm1hdGNoKG5vRW1vamlSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBub0Vtb2ppOiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBub0Vtb2ppUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcGVyY2VudGFnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwZXJjZW50YWdlUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcGVyY2VudGFnZVJlZ2V4OiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwZXJjZW50YWdlUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBNb2JpbGUgb25seSB2YWxpZGF0aW9uXHJcbiAgc3RhdGljIG1vYmlsZU51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2gobW9iaWxlUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9iaWxlTnVtYmVyczoge1xyXG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxyXG4gICAgICAgICAgcGF0dGVybjogbW9iaWxlUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaG90ZWxSb29uTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChhbHBoYW51bWVyaWNSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBhbHBoYW51bWVyaWNSZWdleDoge1xyXG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxyXG4gICAgICAgICAgcGF0dGVybjogYWxwaGFudW1lcmljUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcG9zaXRpdmVJbnRlZ2VyTnVtYmVyc0luY2x1ZGVaZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKHBvc2l0aXZlSW50ZWdlck51bWJlcnNJbmNsdWRlWmVyb1JlZ2V4KSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHBvc2l0aXZlSW50ZWdlck51bWJlcnNJbmNsdWRlWmVyb1JlZ2V4OiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwb3NpdGl2ZUludGVnZXJOdW1iZXJzSW5jbHVkZVplcm9SZWdleFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwb3NpdGl2ZUludGVnZXJOdW1iZXJzV2l0aG91dFplcm9SZWdleChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwb3NpdGl2ZUludGVnZXJOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcG9zaXRpdmVJbnRlZ2VyTnVtYmVyc0dyZWF0ZXJUaGFuWmVyb1JlZ2V4OiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwb3NpdGl2ZUludGVnZXJOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBEZWNpbWFsIFBvc2l0aXZlIE51bWJlcnMgb25seSB2YWxpZGF0aW9uXHJcbiAgc3RhdGljIGRlY2ltYWxQb3NpdGl2ZU51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChkZWNpbWFsUG9zaXRpdmVSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkZWNpbWFsUG9zaXRpdmVOdW1iZXJzOiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBkZWNpbWFsUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIERlY2ltYWwgTnVtYmVycyBvbmx5IHZhbGlkYXRpb25cclxuICBzdGF0aWMgZGVjaW1hbE51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbFJlZ2V4KSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRlY2ltYWxQb3NpdGl2ZU51bWJlcnM6IHtcclxuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcclxuICAgICAgICAgIHBhdHRlcm46IGRlY2ltYWxSZWdleFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFBvc2l0aXZlIE51bWJlcnMgb25seSB2YWxpZGF0aW9uXHJcbiAgc3RhdGljIHBvc2l0aXZlTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwb3NpdGl2ZU51bWJlcnNSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwb3NpdGl2ZU51bWJlcnM6IHtcclxuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcclxuICAgICAgICAgIHBhdHRlcm46IHBvc2l0aXZlTnVtYmVyc1JlZ2V4XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gUG9zaXRpdmUgTnVtYmVycyB3aXRob3V0IHplcm8gdmFsaWRhdGlvblxyXG4gIHN0YXRpYyBwb3NpdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2gocG9zaXRpdmVOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcG9zaXRpdmVOdW1iZXJzR3JlYXRlclRoYW5aZXJvOiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwb3NpdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm9SZWdleFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFBvc2l0aXZlIC8gTmVnZXRpdmUgTnVtYmVycyBvbmx5IHZhbGlkYXRpb25cclxuICBzdGF0aWMgaW50ZWdlck51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goaW50ZWdlck51bWJlcnNSZWdleCkpIHJldHVybiB7XHJcbiAgICAgIGludGVnZXJOdW1iZXJzOiB7XHJcbiAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxyXG4gICAgICAgIHBhdHRlcm46IGludGVnZXJOdW1iZXJzUmVnZXhcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIE51bWJlciBsZW5ndGhcclxuICBzdGF0aWMgbnVtZXJpY0xlbmd0aChsZW5ndGg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgdmFsLnRvU3RyaW5nKCkubGVuZ3RoICE9PSBsZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaW52YWxpZE51bWJlckxlbmd0aDoge1xyXG4gICAgICAgICAgICBhY3R1YWxMZW5ndGg6IHZhbCxcclxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGg6IGxlbmd0aFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBQYXNzd29yZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWU/Lm1hdGNoKHBhc3N3b3JkUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkUG9saWN5UmVxdWlyZW1lbnRzOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggPCA4KSB7XHJcbiAgICAgIHJldHVybiB7IG1pbmxlbmd0aDogeyByZXF1aXJlZExlbmd0aDogOCB9IH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHdWlkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmICghcmVnZXhFeHAudGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4geyBndWlkSXNWYWxpZDogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgUGFzc3dvcmRGb3JtTWF0Y2hWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgncGFzc3dvcmQnKTtcclxuICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdjb25maXJtUGFzc3dvcmQnKTtcclxuICAgIGlmICgobmV3UGFzc3dvcmQuZXJyb3JzIHx8IGNvbmZpcm1QYXNzd29yZC5lcnJvcnMpIHx8XHJcbiAgICAgIG5ld1Bhc3N3b3JkLnZhbHVlID09PSBjb25maXJtUGFzc3dvcmQudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7IC8vIFBhc3N3b3JkcyBtYXRjaCBvciBmb3JtIGZpZWxkcyBoYXMgaXRzIG93biBlcnJvcnNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkTm90TWF0Y2g6IHRydWUgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tVG9OdW1iZXJWYWxpZGF0b3IoZnJvbUNvbnRyb2xOYW1lOiBzdHJpbmcsIHRvQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xyXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcclxuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21Db250cm9sTmFtZSk7XHJcbiAgICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b0NvbnRyb2xOYW1lKTtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiYgIXRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlJykpIHtcclxuICAgICAgICAgIC8vIFJldHVybiB2YWxpZGF0aW9uIGVycm9yIGlmICdmcm9tJyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJ3RvJyB2YWx1ZVxyXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZTogdHJ1ZSB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2UnKSkge1xyXG4gICAgICAgICAgLy8gcmVzZXQgdGhlIGVycm9yIG9mIOKAmHRv4oCZIGNvbnRyb2wgd2hlbiDigJhmcm9t4oCZIGNvbnRyb2wgaXMgdmFsaWQgYW5kIHRvIGNvbnRyb2wgY29udGFpbnMgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlXHJcbiAgICAgICAgICB0b0NvbnRyb2wuc2V0RXJyb3JzKHt9KTtcclxuICAgICAgICAgIHRvQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVCYWxhbmNlID0gKHVuaXRzVmFsdWUsIGJhbGFuY2VWYWx1ZSkgPT4geyByZXR1cm4gdW5pdHNWYWx1ZSArIGJhbGFuY2VWYWx1ZSB9XHJcblxyXG4gIHN0YXRpYyB1bml0c0JhbGFuY2VWYWxpZGF0b3IodW5pdHNDb250cm9sTmFtZTogc3RyaW5nLCBiYWxhbmNlQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xyXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcclxuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgdW5pdHNDb250cm9sID0gZm9ybUdyb3VwLmdldCh1bml0c0NvbnRyb2xOYW1lKTtcclxuICAgICAgICBjb25zdCBiYWxhbmNlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoYmFsYW5jZUNvbnRyb2xOYW1lKTtcclxuICAgICAgICBjb25zdCB1bml0c1ZhbHVlID0gcGFyc2VJbnQodW5pdHNDb250cm9sLnZhbHVlKTtcclxuICAgICAgICBjb25zdCBiYWxhbmNlVmFsdWUgPSBiYWxhbmNlQ29udHJvbC52YWx1ZTtcclxuICAgICAgICBjb25zdCBiYWxhbmNlQ2FsY3VsYXRlZCA9IHRoaXMuY2FsY3VsYXRlQmFsYW5jZSh1bml0c1ZhbHVlLCBiYWxhbmNlVmFsdWUpXHJcbiAgICAgICAgaWYgKGJhbGFuY2VDYWxjdWxhdGVkID4gTUFYX0FMTE9XRURfQkFMQU5DRSkge1xyXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21heGltdW06IHRydWUgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2VDYWxjdWxhdGVkIDwgTUlOX0FMTE9XRURfQkFMQU5DRSkge1xyXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21pbmltdW06IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtaW5EYXRlVGltZShjb250cm9sTmFtZTogc3RyaW5nLCBtaW5EYXRlVGltZVZhbHVlOiBEYXRlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcclxuXHJcbiAgICAgIGlmIChjb250cm9sR3JvdXAucGFyZW50KSB7XHJcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbEdyb3VwLnBhcmVudCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZTogRGF0ZSA9IGNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2xEYXRlID0gbmV3IERhdGUoY29udHJvbFZhbHVlKS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZShtaW5EYXRlVGltZVZhbHVlKS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29udHJvbERhdGUgPCBtaW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9mcm9tX3RpbWU6IHRydWUgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbVRvRGF0ZShmcm9tRGF0ZUZpZWxkOiBzdHJpbmcsIHRvRGF0ZUZpZWxkOiBzdHJpbmcsIGZyb21UaW1lRmllbGQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICB0b1RpbWVGaWVsZDogc3RyaW5nID0gbnVsbCwgZXJyb3JOYW1lOiBzdHJpbmcgPSAnZnJvbVRvRGF0ZScpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcclxuICAgICAgY29uc3QgZnJvbURhdGU6IERhdGUgPSBmb3JtR3JvdXAuZ2V0KGZyb21EYXRlRmllbGQpPy52YWx1ZTtcclxuICAgICAgY29uc3QgdG9EYXRlOiBEYXRlID0gZm9ybUdyb3VwLmdldCh0b0RhdGVGaWVsZCk/LnZhbHVlO1xyXG4gICAgICBjb25zdCBmcm9tVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpPy52YWx1ZTtcclxuICAgICAgY29uc3QgdG9UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpPy52YWx1ZTtcclxuICAgICAgaWYgKGZyb21UaW1lKSB7XHJcbiAgICAgICAgZnJvbURhdGUuc2V0SG91cnMoZnJvbVRpbWUuaG91cnMpO1xyXG4gICAgICAgIGZyb21EYXRlLnNldE1pbnV0ZXMoZnJvbVRpbWUubWludXRlcyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRvVGltZSkge1xyXG4gICAgICAgIHRvRGF0ZS5zZXRIb3Vycyh0b1RpbWUuaG91cnMpO1xyXG4gICAgICAgIHRvRGF0ZS5zZXRNaW51dGVzKHRvVGltZS5taW51dGVzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoKGZyb21EYXRlICE9PSBudWxsICYmIHRvRGF0ZSAhPT0gbnVsbCkgJiYgZnJvbURhdGUgPiB0b0RhdGUpIHtcclxuICAgICAgICByZXR1cm4geyBbZXJyb3JOYW1lXTogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tVG9UaW1lUmFuZ2UoZnJvbVRpbWVGaWVsZDogc3RyaW5nLCB0b1RpbWVGaWVsZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXHJcbiAgICAgIGlmIChjb250cm9sLnBhcmVudCkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCB0b0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvVGltZUZpZWxkKTtcclxuICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmIHRoaXMuaXNWYWx1ZUxlbmd0aFZhbGlkKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmXHJcbiAgICAgICAgICAhdG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlJykpIHtcclxuICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlOiB0cnVlIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2UnKSkge1xyXG4gICAgICAgICAgLy8gcmVzZXQgdGhlIGVycm9yIG9mIOKAmHRv4oCZIGNvbnRyb2wgd2hlbiDigJhmcm9t4oCZIGNvbnRyb2wgaXMgdmFsaWQgYW5kIHRvIGNvbnRyb2wgY29udGFpbnMgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZVxyXG4gICAgICAgICAgdG9Db250cm9sLnNldEVycm9ycyh7fSk7XHJcbiAgICAgICAgICB0b0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tVG9UaW1lKGZyb21UaW1lRmllbGQ6IHN0cmluZywgdG9UaW1lRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCBmcm9tVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpLnZhbHVlO1xyXG4gICAgICBjb25zdCB0b1RpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCkudmFsdWU7XHJcbiAgICAgIGlmICghdGhpcy5pc1RpbWVOdWxsKGZyb21UaW1lKSAmJiAhdGhpcy5pc1RpbWVOdWxsKHRvVGltZSkgJiYgKFxyXG4gICAgICAgIChmcm9tVGltZS5ob3VycyA+IHRvVGltZS5ob3VycykgfHxcclxuICAgICAgICAoZnJvbVRpbWUuaG91cnMgPT0gdG9UaW1lLmhvdXJzICYmIGZyb21UaW1lLm1pbnV0ZXMgPiB0b1RpbWUubWludXRlcylcclxuICAgICAgKSkge1xyXG4gICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2U6IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpc1RpbWVOdWxsID0gKHRpbWU6IFRpYmFUaW1lKSA9PiB0aW1lID09PSBudWxsIHx8XHJcbiAgICAodGltZS5ob3VycyA9PT0gbnVsbCAmJiB0aW1lLm1pbnV0ZXMgPT09IG51bGwgJiYgdGltZS5zZWNvbmRzID09PSBudWxsKTtcclxuXHJcbiAgc3RhdGljIG5vV2hpdGVzcGFjZVZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+XHJcbiAgICAhaXNOdWxsT3JFbXB0eShjb250cm9sLnZhbHVlKSAmJiBpc051bGxPckVtcHR5KGNvbnRyb2w/LnZhbHVlPy50cmltKCkpID8geyByZXF1aXJlZDogdHJ1ZSB9IDogbnVsbDtcclxuXHJcbiAgc3RhdGljIG5vV2hpdGVzcGFjZVdpdGhpblNlbnRlbmNlVmFsaWRhdG9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT5cclxuICAgICEoY29udHJvbD8udmFsdWU/LnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDEpID8geyBub1doaXRlc3BhY2VXaXRoaW5TZW50ZW5jZTogdHJ1ZSB9IDogbnVsbDtcclxuXHJcbiAgc3RhdGljIHRlcm1zUG9saWN5Q2hlY2tib3goKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7IGludmFsaWRUZXJtczogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmF1bHRBY2Nlc3NQcm9maWxlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xyXG4gICAgaWYgKCFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmICFjb250cm9sLnZhbHVlPy5kZWZhdWx0QWNjZXNzUHJvZmlsZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vRGVmYXVsdEFjY2Vzc1Byb2ZpbGU6IHtcclxuICAgICAgICAgIGNvbXBhbnlOYW1lOiBjb250cm9sLnZhbHVlLm5hbWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHpSYW5nZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLCBmcm9tWkZpZWxkOiBzdHJpbmcsIHRvWkZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCBmcm9tWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21aRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgIGNvbnN0IHRvWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvWkZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG5cclxuICAgICAgaWYgKGZyb21aQ29udHJvbC52YWx1ZT8uaWQgPiB0b1pDb250cm9sLnZhbHVlPy5pZCkge1xyXG4gICAgICAgIHJldHVybiB7IHpSYW5nZTogdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5pbnZhbGlkX2ZpZWxkcykgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlcXVpcmVkQ3JlZGVudGlhbHModHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwgY2FyUGxhdGVGaWVsZDogc3RyaW5nID0gJ2NhclBsYXRlJywgbW9iaWxlRmllbGQ6IHN0cmluZyA9ICdtb2JpbGUnLCBiYWRnZUZpZWxkOiBzdHJpbmcgPSAnYmFkZ2UnLFxyXG4gICAgZW1haWxGaWVsZDogc3RyaW5nID0gJ2VtYWlsJywgc2VuZEVtYWlsRmllbGQ6IHN0cmluZyA9ICdzZW5kRW1haWwnKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCBudWxsID0+IHtcclxuICAgICAgbGV0IGNhclBsYXRlc0ludmFsaWQgPSBmYWxzZTtcclxuICAgICAgbGV0IGJhZGdlc0ludmFsaWQgPSBmYWxzZTtcclxuICAgICAgbGV0IGludGVycG9sYXRlZENyZWRlbnRpYWxzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgLy8gQ2FyZHNcclxuICAgICAgY29uc3QgYmFkZ2VzRm9ybUFycmF5ID0gZm9ybUdyb3VwLmdldChiYWRnZUZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICBpZiAoYmFkZ2VzRm9ybUFycmF5KSB7XHJcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhcmQpKTtcclxuICAgICAgICBiYWRnZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoYmFkZ2VzRm9ybUFycmF5LnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpc0NhcmRzSW52YWxpZCA9IGJhZGdlc0ludmFsaWQgfHwgIWJhZGdlc0Zvcm1BcnJheTtcclxuXHJcbiAgICAgIC8vQ2FyIHBsYXRlc1xyXG4gICAgICBjb25zdCBjYXJQbGF0ZXNGb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KGNhclBsYXRlRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgIGlmIChjYXJQbGF0ZXNGb3JtQXJyYXkpIHtcclxuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FyX3BsYXRlKSk7XHJcbiAgICAgICAgY2FyUGxhdGVzSW52YWxpZCA9IHRoaXMuaXNGb3JtQ29udHJvbExpc3RJbnZhbGlkKGNhclBsYXRlc0Zvcm1BcnJheS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaXNDYXJQbGF0ZXNJbnZhbGlkID0gY2FyUGxhdGVzSW52YWxpZCB8fCAhY2FyUGxhdGVzRm9ybUFycmF5O1xyXG5cclxuICAgICAgLy8gTW9iaWxlXHJcbiAgICAgIGNvbnN0IG1vYmlsZUZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChtb2JpbGVGaWVsZCk7XHJcbiAgICAgIGlmIChtb2JpbGVGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5tb2JpbGUpKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpc01vYmlsZUludmFsaWQgPSAhbW9iaWxlRm9ybUNvbnRyb2w/LnZhbHVlO1xyXG5cclxuICAgICAgLy8gRW1haWxcclxuICAgICAgY29uc3QgZW1haWxGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZW1haWxGaWVsZCk7XHJcbiAgICAgIGNvbnN0IHNlbmRFbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChzZW5kRW1haWxGaWVsZCk7XHJcbiAgICAgIGlmIChlbWFpbEZvcm1Db250cm9sICYmIHNlbmRFbWFpbEZvcm1Db250cm9sPy52YWx1ZSkge1xyXG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5lbWFpbCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlzRW1haWxJbnZhbGlkID0gIShzZW5kRW1haWxGb3JtQ29udHJvbD8udmFsdWUgJiYgZW1haWxGb3JtQ29udHJvbD8udmFsdWUpXHJcblxyXG4gICAgICBjb25zdCBpc1JlcXVpcmVkQ3JlZGVudGlhbHMgPSBpc0NhclBsYXRlc0ludmFsaWQgJiYgaXNDYXJkc0ludmFsaWQgJiYgaXNNb2JpbGVJbnZhbGlkICYmIGlzRW1haWxJbnZhbGlkO1xyXG5cclxuICAgICAgaWYgKGlzUmVxdWlyZWRDcmVkZW50aWFscykge1xyXG4gICAgICAgIGNvbnN0IGxhc3RDcmVkZW50aWFsID0gaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucG9wKCk7XHJcbiAgICAgICAgbGV0IGludGVycG9sYXRlUGFyYW1zID0gYCR7aW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMuam9pbignLCAnKX0gJHt0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLm9yKX0gJHtsYXN0Q3JlZGVudGlhbH1gO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZXF1aXJlZENyZWRlbnRpYWxzOiB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnJlcXVpcmVkX2NyZWRlbnRpYWxzX21lc3NhZ2UsIHsgY3JlZGVudGlhbHM6IGludGVycG9sYXRlUGFyYW1zIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChsaXN0OiBVbnR5cGVkRm9ybUNvbnRyb2xbXSkge1xyXG4gICAgbGV0IGlzSW52YWxpZCA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGxpc3QpIHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgaXNJbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0ludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVxdWlyZWREYXlzKHNwZWNpYWxEYXlzRmllbGQ6IHN0cmluZywgd2Vla0RheXNGaWVsZDogc3RyaW5nLCBlcnJvck5hbWU6IHN0cmluZyA9ICdyZXF1aXJlZERheXMnKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XHJcbiAgICAgIGNvbnN0IHNwZWNpYWxEYXlzOiBudW1iZXIgPSBmb3JtR3JvdXAuZ2V0KHNwZWNpYWxEYXlzRmllbGQpLnZhbHVlO1xyXG4gICAgICBjb25zdCB3ZWVrRGF5czogbnVtYmVyID0gZm9ybUdyb3VwLmdldCh3ZWVrRGF5c0ZpZWxkKS52YWx1ZTtcclxuICAgICAgaWYgKHNwZWNpYWxEYXlzID4gMCB8fCB3ZWVrRGF5cyA+IDApIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNSb2xlTmFtZUV4aXN0cyhyb2xlU2VydmljZVByb3h5OiBDbG91ZC5Sb2xlU2VydmljZVByb3h5LCByb2xlSWQ6IG51bWJlcik6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnM+ID0+IHtcclxuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXHJcbiAgICAgICAgZGVsYXkoNTAwKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoSU5QVVRfU0VBUkNIX0RFQk9VTkNFX1RJTUUpLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiByb2xlU2VydmljZVByb3h5LmlzRXhpc3RzKGNvbnRyb2wudmFsdWUsIHJvbGVJZCA/PyB1bmRlZmluZWQpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzID0+IHJlcy5kYXRhID09PSB0cnVlIHx8ICFyZXMuaXNTdWNjZXNzID8geyByb2xlTmFtZUFscmVhZHlFeGlzdHM6IHRydWUgfSA6IG51bGwpKSkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0aWJhVGltZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWw6IFRpYmFUaW1lID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAodmFsICYmICh2YWwuaG91cnMgPT09IG51bGwgfHwgdmFsLm1pbnV0ZXMgPT09IG51bGwpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaW52YWxpZFRpbWU6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0aW1lVmFsaWRhdG9yKGZyb21Ib3VyOiBudW1iZXIsIGZyb21NaW51dGVzOiBudW1iZXIsIHRvSG91cjogbnVtYmVyLCB0b01pbnV0ZXM6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBpZiAoISFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoICE9PSA0KSB7IC8vIEFzc3VtaW5nIHlvdXIgdGltZSBmb3JtYXQgaXMgJ0hITU0nXHJcbiAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX2Zvcm1hdDogdHJ1ZSB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBob3VyczogbnVtYmVyID0gcGFyc2VJbnQoY29udHJvbC52YWx1ZS5zbGljZSgwLCAyKSk7XHJcbiAgICAgICAgICBjb25zdCBtaW51dGVzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDIpKTtcclxuICAgICAgICAgIGNvbnN0IGlzVmFsaWRUaW1lID1cclxuICAgICAgICAgICAgKGhvdXJzID4gZnJvbUhvdXIgfHwgKGhvdXJzID09PSBmcm9tSG91ciAmJiBtaW51dGVzID49IGZyb21NaW51dGVzKSkgJiZcclxuICAgICAgICAgICAgKGhvdXJzIDwgdG9Ib3VyIHx8IChob3VycyA9PT0gdG9Ib3VyICYmIG1pbnV0ZXMgPD0gdG9NaW51dGVzKSk7XHJcbiAgICAgICAgICBpZiAoIWlzVmFsaWRUaW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZToge1xyXG4gICAgICAgICAgICAgICAgZnJvbTogYCR7ZnJvbUhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke2Zyb21NaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gLFxyXG4gICAgICAgICAgICAgICAgdG86IGAke3RvSG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7dG9NaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRpbWVSYW5nZUFycmF5VmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbC52YWxpZCAmJiBjb250cm9sLmVuYWJsZWQpIHtcclxuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1BcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudFJhbmdlID0gZm9ybUFycmF5W2ldO1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEZyb20gPSB0aW1lVG9Nb21lbnQoY3VycmVudFJhbmdlLmZyb20pO1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudFRvID0gdGltZVRvTW9tZW50KGN1cnJlbnRSYW5nZS50byk7XHJcblxyXG4gICAgICAgICAgaWYgKGN1cnJlbnRGcm9tICYmIGN1cnJlbnRUbykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBmb3JtQXJyYXkubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlUmFuZ2UgPSBmb3JtQXJyYXlbal07XHJcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZUZyb20gPSB0aW1lVG9Nb21lbnQoY29tcGFyZVJhbmdlLmZyb20pO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVUbyA9IHRpbWVUb01vbWVudChjb21wYXJlUmFuZ2UudG8pO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoY3VycmVudEZyb20uaXNCZWZvcmUoY29tcGFyZVRvKSAmJiBjdXJyZW50VG8uaXNBZnRlcihjb21wYXJlRnJvbSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl90aW1lX3JhbmdlX292ZXJsYXA6IHRydWUgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsdWVHcmVhdGVyVGhhbk9yRXF1YWxUbyhmcm9tQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCB0b0NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZnJvbVRpbWVJbk51bWJlcjogbnVtYmVyID0gZnJvbUNvbnRyb2wudmFsdWU7XHJcbiAgICBjb25zdCB0b1RpbWVJbk51bWJlcjogbnVtYmVyID0gdG9Db250cm9sLnZhbHVlO1xyXG4gICAgcmV0dXJuIGZyb21UaW1lSW5OdW1iZXIgIT09IG51bGwgJiYgdG9UaW1lSW5OdW1iZXIgIT09IG51bGwgJiYgK2Zyb21UaW1lSW5OdW1iZXIgPiArdG9UaW1lSW5OdW1iZXI7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWx1ZUxlbmd0aFZhbGlkKGZyb21Db250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHRvQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmcm9tVGltZUluTnVtYmVyOiBudW1iZXIgPSBmcm9tQ29udHJvbC52YWx1ZTtcclxuICAgIGNvbnN0IHRvVGltZUluTnVtYmVyOiBudW1iZXIgPSB0b0NvbnRyb2wudmFsdWU7XHJcbiAgICByZXR1cm4gZnJvbVRpbWVJbk51bWJlci50b1N0cmluZygpLmxlbmd0aCA9PT0gVkFMSURfVElNRV9NQVhfTEVOR1RIICYmXHJcbiAgICAgIHRvVGltZUluTnVtYmVyLnRvU3RyaW5nKCkubGVuZ3RoID09PSBWQUxJRF9USU1FX01BWF9MRU5HVEg7XHJcbiAgfVxyXG59XHJcbiJdfQ==
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsT0FBTyxFQUFvQixZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0QsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx5SEFBeUgsQ0FBQztBQUN2SixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyw0QkFBNEIsQ0FBQztBQUNoRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLHVGQUF1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QUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUUxRixNQUFNLEtBQUssR0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBRTdDLE1BQU0sV0FBVyxHQUNmLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xGLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFckYsMkNBQTJDO1FBQzNDLElBQUksV0FBVyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELG1FQUFtRTtRQUNuRSxPQUFPO1lBQ0wsNEJBQTRCLEVBQUU7Z0JBQzVCLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUN6QixFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUN4QjtTQUNGLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtR3JvdXAsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGVib3VuY2VUaW1lLCBkZWxheSwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElOUFVUX1NFQVJDSF9ERUJPVU5DRV9USU1FLCBWQUxJRF9USU1FX01BWF9MRU5HVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi9lbnVtcyc7XHJcbmltcG9ydCB7IENsb3VkIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eSc7XHJcbmltcG9ydCB7IFRpbWUgYXMgVGliYVRpbWUsIHRpbWVUb01vbWVudCB9IGZyb20gJy4vZGF0ZS51dGlsJztcclxuXHJcbmNvbnN0IE1JTl9BTExPV0VEX0JBTEFOQ0UgPSAwO1xyXG5jb25zdCBNQVhfQUxMT1dFRF9CQUxBTkNFID0gMjU1O1xyXG5leHBvcnQgY29uc3Qgbm9FbW9qaVJlZ2V4ID0gL1teYS16QS1aMC05IF0vZ207XHJcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl0pW0EtWmEtelxcZCFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX5dezQsfSQvZztcclxuZXhwb3J0IGNvbnN0IHBvc2l0aXZlTnVtYmVyc1JlZ2V4ID0gL15bMC05XSsoXFwuP1swLTldKyk/JC87XHJcbmV4cG9ydCBjb25zdCBwb3NpdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm9SZWdleCA9IC9eKD89LipbMS05XSlcXGQqKD86XFwuXFxkKyk/JC87XHJcbmV4cG9ydCBjb25zdCBhbHBoYW51bWVyaWNSZWdleCA9IC9eW2EtekEtWjAtOV0rJC87XHJcbmV4cG9ydCBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzAtOV0rJC87XHJcbmV4cG9ydCBjb25zdCBpbnRlZ2VyTnVtYmVyc1JlZ2V4ID0gL15bLV0/KFxcZCspPyQvO1xyXG5leHBvcnQgY29uc3QgZGVjaW1hbFBvc2l0aXZlUmVnZXggPSAvXihcXGQrKShcXC5cXGR7MSwyfSk/JC87XHJcbmV4cG9ydCBjb25zdCBkZWNpbWFsUmVnZXggPSAvXi0/KFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcclxuZXhwb3J0IGNvbnN0IHJlZ2V4RXhwID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kLztcclxuZXhwb3J0IGNvbnN0IHBvc2l0aXZlSW50ZWdlck51bWJlcnNJbmNsdWRlWmVyb1JlZ2V4ID0gL14oMHxbMS05XVxcZCopJC87XHJcbmV4cG9ydCBjb25zdCBwb3NpdGl2ZUludGVnZXJOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXggPSAvXlsxLTldXFxkKiQvO1xyXG5leHBvcnQgY29uc3QgcGVyY2VudGFnZVJlZ2V4ID0gL14oMTAwKFxcLjArKT98WzEtOV0/XFxkKFxcLlxcZCspPykkLztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KHZhbDogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUaWJhVmFsaWRhdG9ycyB7XHJcblxyXG4gIC8vIE5vIGVtb2ppIHZhbGlkYXRpb25cclxuICBzdGF0aWMgbm9FbW9qaShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmIHZhbC50b1N0cmluZygpLm1hdGNoKG5vRW1vamlSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBub0Vtb2ppOiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBub0Vtb2ppUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcGVyY2VudGFnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwZXJjZW50YWdlUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcGVyY2VudGFnZVJlZ2V4OiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwZXJjZW50YWdlUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBNb2JpbGUgb25seSB2YWxpZGF0aW9uXHJcbiAgc3RhdGljIG1vYmlsZU51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2gobW9iaWxlUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9iaWxlTnVtYmVyczoge1xyXG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxyXG4gICAgICAgICAgcGF0dGVybjogbW9iaWxlUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaG90ZWxSb29uTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChhbHBoYW51bWVyaWNSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBhbHBoYW51bWVyaWNSZWdleDoge1xyXG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxyXG4gICAgICAgICAgcGF0dGVybjogYWxwaGFudW1lcmljUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcG9zaXRpdmVJbnRlZ2VyTnVtYmVyc0luY2x1ZGVaZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKHBvc2l0aXZlSW50ZWdlck51bWJlcnNJbmNsdWRlWmVyb1JlZ2V4KSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHBvc2l0aXZlSW50ZWdlck51bWJlcnNJbmNsdWRlWmVyb1JlZ2V4OiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwb3NpdGl2ZUludGVnZXJOdW1iZXJzSW5jbHVkZVplcm9SZWdleFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwb3NpdGl2ZUludGVnZXJOdW1iZXJzV2l0aG91dFplcm9SZWdleChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwb3NpdGl2ZUludGVnZXJOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcG9zaXRpdmVJbnRlZ2VyTnVtYmVyc0dyZWF0ZXJUaGFuWmVyb1JlZ2V4OiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwb3NpdGl2ZUludGVnZXJOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBEZWNpbWFsIFBvc2l0aXZlIE51bWJlcnMgb25seSB2YWxpZGF0aW9uXHJcbiAgc3RhdGljIGRlY2ltYWxQb3NpdGl2ZU51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChkZWNpbWFsUG9zaXRpdmVSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkZWNpbWFsUG9zaXRpdmVOdW1iZXJzOiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBkZWNpbWFsUmVnZXhcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIERlY2ltYWwgTnVtYmVycyBvbmx5IHZhbGlkYXRpb25cclxuICBzdGF0aWMgZGVjaW1hbE51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbFJlZ2V4KSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRlY2ltYWxQb3NpdGl2ZU51bWJlcnM6IHtcclxuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcclxuICAgICAgICAgIHBhdHRlcm46IGRlY2ltYWxSZWdleFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFBvc2l0aXZlIE51bWJlcnMgb25seSB2YWxpZGF0aW9uXHJcbiAgc3RhdGljIHBvc2l0aXZlTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwb3NpdGl2ZU51bWJlcnNSZWdleCkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBwb3NpdGl2ZU51bWJlcnM6IHtcclxuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcclxuICAgICAgICAgIHBhdHRlcm46IHBvc2l0aXZlTnVtYmVyc1JlZ2V4XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gUG9zaXRpdmUgTnVtYmVycyB3aXRob3V0IHplcm8gdmFsaWRhdGlvblxyXG4gIHN0YXRpYyBwb3NpdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2gocG9zaXRpdmVOdW1iZXJzR3JlYXRlclRoYW5aZXJvUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcG9zaXRpdmVOdW1iZXJzR3JlYXRlclRoYW5aZXJvOiB7XHJcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXHJcbiAgICAgICAgICBwYXR0ZXJuOiBwb3NpdGl2ZU51bWJlcnNHcmVhdGVyVGhhblplcm9SZWdleFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFBvc2l0aXZlIC8gTmVnZXRpdmUgTnVtYmVycyBvbmx5IHZhbGlkYXRpb25cclxuICBzdGF0aWMgaW50ZWdlck51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goaW50ZWdlck51bWJlcnNSZWdleCkpIHJldHVybiB7XHJcbiAgICAgIGludGVnZXJOdW1iZXJzOiB7XHJcbiAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxyXG4gICAgICAgIHBhdHRlcm46IGludGVnZXJOdW1iZXJzUmVnZXhcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIE51bWJlciBsZW5ndGhcclxuICBzdGF0aWMgbnVtZXJpY0xlbmd0aChsZW5ndGg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgdmFsLnRvU3RyaW5nKCkubGVuZ3RoICE9PSBsZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaW52YWxpZE51bWJlckxlbmd0aDoge1xyXG4gICAgICAgICAgICBhY3R1YWxMZW5ndGg6IHZhbCxcclxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGg6IGxlbmd0aFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBQYXNzd29yZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWU/Lm1hdGNoKHBhc3N3b3JkUmVnZXgpKSB7XHJcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkUG9saWN5UmVxdWlyZW1lbnRzOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggPCA4KSB7XHJcbiAgICAgIHJldHVybiB7IG1pbmxlbmd0aDogeyByZXF1aXJlZExlbmd0aDogOCB9IH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHdWlkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmICghcmVnZXhFeHAudGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4geyBndWlkSXNWYWxpZDogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgUGFzc3dvcmRGb3JtTWF0Y2hWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgncGFzc3dvcmQnKTtcclxuICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdjb25maXJtUGFzc3dvcmQnKTtcclxuICAgIGlmICgobmV3UGFzc3dvcmQuZXJyb3JzIHx8IGNvbmZpcm1QYXNzd29yZC5lcnJvcnMpIHx8XHJcbiAgICAgIG5ld1Bhc3N3b3JkLnZhbHVlID09PSBjb25maXJtUGFzc3dvcmQudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7IC8vIFBhc3N3b3JkcyBtYXRjaCBvciBmb3JtIGZpZWxkcyBoYXMgaXRzIG93biBlcnJvcnNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkTm90TWF0Y2g6IHRydWUgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tVG9OdW1iZXJWYWxpZGF0b3IoZnJvbUNvbnRyb2xOYW1lOiBzdHJpbmcsIHRvQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xyXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcclxuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21Db250cm9sTmFtZSk7XHJcbiAgICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b0NvbnRyb2xOYW1lKTtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiYgIXRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlJykpIHtcclxuICAgICAgICAgIC8vIFJldHVybiB2YWxpZGF0aW9uIGVycm9yIGlmICdmcm9tJyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJ3RvJyB2YWx1ZVxyXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZTogdHJ1ZSB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2UnKSkge1xyXG4gICAgICAgICAgLy8gcmVzZXQgdGhlIGVycm9yIG9mIOKAmHRv4oCZIGNvbnRyb2wgd2hlbiDigJhmcm9t4oCZIGNvbnRyb2wgaXMgdmFsaWQgYW5kIHRvIGNvbnRyb2wgY29udGFpbnMgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlXHJcbiAgICAgICAgICB0b0NvbnRyb2wuc2V0RXJyb3JzKHt9KTtcclxuICAgICAgICAgIHRvQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVCYWxhbmNlID0gKHVuaXRzVmFsdWUsIGJhbGFuY2VWYWx1ZSkgPT4geyByZXR1cm4gdW5pdHNWYWx1ZSArIGJhbGFuY2VWYWx1ZSB9XHJcblxyXG4gIHN0YXRpYyB1bml0c0JhbGFuY2VWYWxpZGF0b3IodW5pdHNDb250cm9sTmFtZTogc3RyaW5nLCBiYWxhbmNlQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xyXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcclxuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgdW5pdHNDb250cm9sID0gZm9ybUdyb3VwLmdldCh1bml0c0NvbnRyb2xOYW1lKTtcclxuICAgICAgICBjb25zdCBiYWxhbmNlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoYmFsYW5jZUNvbnRyb2xOYW1lKTtcclxuICAgICAgICBjb25zdCB1bml0c1ZhbHVlID0gcGFyc2VJbnQodW5pdHNDb250cm9sLnZhbHVlKTtcclxuICAgICAgICBjb25zdCBiYWxhbmNlVmFsdWUgPSBiYWxhbmNlQ29udHJvbC52YWx1ZTtcclxuICAgICAgICBjb25zdCBiYWxhbmNlQ2FsY3VsYXRlZCA9IHRoaXMuY2FsY3VsYXRlQmFsYW5jZSh1bml0c1ZhbHVlLCBiYWxhbmNlVmFsdWUpXHJcbiAgICAgICAgaWYgKGJhbGFuY2VDYWxjdWxhdGVkID4gTUFYX0FMTE9XRURfQkFMQU5DRSkge1xyXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21heGltdW06IHRydWUgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2VDYWxjdWxhdGVkIDwgTUlOX0FMTE9XRURfQkFMQU5DRSkge1xyXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21pbmltdW06IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtaW5EYXRlVGltZShjb250cm9sTmFtZTogc3RyaW5nLCBtaW5EYXRlVGltZVZhbHVlOiBEYXRlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcclxuXHJcbiAgICAgIGlmIChjb250cm9sR3JvdXAucGFyZW50KSB7XHJcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbEdyb3VwLnBhcmVudCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZTogRGF0ZSA9IGNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2xEYXRlID0gbmV3IERhdGUoY29udHJvbFZhbHVlKS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZShtaW5EYXRlVGltZVZhbHVlKS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29udHJvbERhdGUgPCBtaW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9mcm9tX3RpbWU6IHRydWUgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbVRvRGF0ZShmcm9tRGF0ZUZpZWxkOiBzdHJpbmcsIHRvRGF0ZUZpZWxkOiBzdHJpbmcsIGZyb21UaW1lRmllbGQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICB0b1RpbWVGaWVsZDogc3RyaW5nID0gbnVsbCwgZXJyb3JOYW1lOiBzdHJpbmcgPSAnZnJvbVRvRGF0ZScpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcclxuICAgICAgY29uc3QgZnJvbURhdGU6IERhdGUgPSBmb3JtR3JvdXAuZ2V0KGZyb21EYXRlRmllbGQpPy52YWx1ZTtcclxuICAgICAgY29uc3QgdG9EYXRlOiBEYXRlID0gZm9ybUdyb3VwLmdldCh0b0RhdGVGaWVsZCk/LnZhbHVlO1xyXG4gICAgICBjb25zdCBmcm9tVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpPy52YWx1ZTtcclxuICAgICAgY29uc3QgdG9UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpPy52YWx1ZTtcclxuICAgICAgaWYgKGZyb21UaW1lKSB7XHJcbiAgICAgICAgZnJvbURhdGUuc2V0SG91cnMoZnJvbVRpbWUuaG91cnMpO1xyXG4gICAgICAgIGZyb21EYXRlLnNldE1pbnV0ZXMoZnJvbVRpbWUubWludXRlcyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRvVGltZSkge1xyXG4gICAgICAgIHRvRGF0ZS5zZXRIb3Vycyh0b1RpbWUuaG91cnMpO1xyXG4gICAgICAgIHRvRGF0ZS5zZXRNaW51dGVzKHRvVGltZS5taW51dGVzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoKGZyb21EYXRlICE9PSBudWxsICYmIHRvRGF0ZSAhPT0gbnVsbCkgJiYgZnJvbURhdGUgPiB0b0RhdGUpIHtcclxuICAgICAgICByZXR1cm4geyBbZXJyb3JOYW1lXTogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tVG9UaW1lUmFuZ2UoZnJvbVRpbWVGaWVsZDogc3RyaW5nLCB0b1RpbWVGaWVsZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXHJcbiAgICAgIGlmIChjb250cm9sLnBhcmVudCkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCB0b0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvVGltZUZpZWxkKTtcclxuICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmIHRoaXMuaXNWYWx1ZUxlbmd0aFZhbGlkKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmXHJcbiAgICAgICAgICAhdG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlJykpIHtcclxuICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlOiB0cnVlIH07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2UnKSkge1xyXG4gICAgICAgICAgLy8gcmVzZXQgdGhlIGVycm9yIG9mIOKAmHRv4oCZIGNvbnRyb2wgd2hlbiDigJhmcm9t4oCZIGNvbnRyb2wgaXMgdmFsaWQgYW5kIHRvIGNvbnRyb2wgY29udGFpbnMgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZVxyXG4gICAgICAgICAgdG9Db250cm9sLnNldEVycm9ycyh7fSk7XHJcbiAgICAgICAgICB0b0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tVG9UaW1lKGZyb21UaW1lRmllbGQ6IHN0cmluZywgdG9UaW1lRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCBmcm9tVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpLnZhbHVlO1xyXG4gICAgICBjb25zdCB0b1RpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCkudmFsdWU7XHJcbiAgICAgIGlmICghdGhpcy5pc1RpbWVOdWxsKGZyb21UaW1lKSAmJiAhdGhpcy5pc1RpbWVOdWxsKHRvVGltZSkgJiYgKFxyXG4gICAgICAgIChmcm9tVGltZS5ob3VycyA+IHRvVGltZS5ob3VycykgfHxcclxuICAgICAgICAoZnJvbVRpbWUuaG91cnMgPT0gdG9UaW1lLmhvdXJzICYmIGZyb21UaW1lLm1pbnV0ZXMgPiB0b1RpbWUubWludXRlcylcclxuICAgICAgKSkge1xyXG4gICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2U6IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpc1RpbWVOdWxsID0gKHRpbWU6IFRpYmFUaW1lKSA9PiB0aW1lID09PSBudWxsIHx8XHJcbiAgICAodGltZS5ob3VycyA9PT0gbnVsbCAmJiB0aW1lLm1pbnV0ZXMgPT09IG51bGwgJiYgdGltZS5zZWNvbmRzID09PSBudWxsKTtcclxuXHJcbiAgc3RhdGljIG5vV2hpdGVzcGFjZVZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+XHJcbiAgICAhaXNOdWxsT3JFbXB0eShjb250cm9sLnZhbHVlKSAmJiBpc051bGxPckVtcHR5KGNvbnRyb2w/LnZhbHVlPy50cmltKCkpID8geyByZXF1aXJlZDogdHJ1ZSB9IDogbnVsbDtcclxuXHJcbiAgc3RhdGljIG5vV2hpdGVzcGFjZVdpdGhpblNlbnRlbmNlVmFsaWRhdG9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT5cclxuICAgICEoY29udHJvbD8udmFsdWU/LnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDEpID8geyBub1doaXRlc3BhY2VXaXRoaW5TZW50ZW5jZTogdHJ1ZSB9IDogbnVsbDtcclxuXHJcbiAgc3RhdGljIHRlcm1zUG9saWN5Q2hlY2tib3goKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7IGludmFsaWRUZXJtczogdHJ1ZSB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmF1bHRBY2Nlc3NQcm9maWxlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xyXG4gICAgaWYgKCFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmICFjb250cm9sLnZhbHVlPy5kZWZhdWx0QWNjZXNzUHJvZmlsZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vRGVmYXVsdEFjY2Vzc1Byb2ZpbGU6IHtcclxuICAgICAgICAgIGNvbXBhbnlOYW1lOiBjb250cm9sLnZhbHVlLm5hbWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHpSYW5nZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLCBmcm9tWkZpZWxkOiBzdHJpbmcsIHRvWkZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xyXG4gICAgICBjb25zdCBmcm9tWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21aRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgIGNvbnN0IHRvWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvWkZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG5cclxuICAgICAgaWYgKGZyb21aQ29udHJvbC52YWx1ZT8uaWQgPiB0b1pDb250cm9sLnZhbHVlPy5pZCkge1xyXG4gICAgICAgIHJldHVybiB7IHpSYW5nZTogdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5pbnZhbGlkX2ZpZWxkcykgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlcXVpcmVkQ3JlZGVudGlhbHModHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwgY2FyUGxhdGVGaWVsZDogc3RyaW5nID0gJ2NhclBsYXRlJywgbW9iaWxlRmllbGQ6IHN0cmluZyA9ICdtb2JpbGUnLCBiYWRnZUZpZWxkOiBzdHJpbmcgPSAnYmFkZ2UnLFxyXG4gICAgZW1haWxGaWVsZDogc3RyaW5nID0gJ2VtYWlsJywgc2VuZEVtYWlsRmllbGQ6IHN0cmluZyA9ICdzZW5kRW1haWwnKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCBudWxsID0+IHtcclxuICAgICAgbGV0IGNhclBsYXRlc0ludmFsaWQgPSBmYWxzZTtcclxuICAgICAgbGV0IGJhZGdlc0ludmFsaWQgPSBmYWxzZTtcclxuICAgICAgbGV0IGludGVycG9sYXRlZENyZWRlbnRpYWxzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgLy8gQ2FyZHNcclxuICAgICAgY29uc3QgYmFkZ2VzRm9ybUFycmF5ID0gZm9ybUdyb3VwLmdldChiYWRnZUZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICBpZiAoYmFkZ2VzRm9ybUFycmF5KSB7XHJcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhcmQpKTtcclxuICAgICAgICBiYWRnZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoYmFkZ2VzRm9ybUFycmF5LnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpc0NhcmRzSW52YWxpZCA9IGJhZGdlc0ludmFsaWQgfHwgIWJhZGdlc0Zvcm1BcnJheTtcclxuXHJcbiAgICAgIC8vQ2FyIHBsYXRlc1xyXG4gICAgICBjb25zdCBjYXJQbGF0ZXNGb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KGNhclBsYXRlRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgIGlmIChjYXJQbGF0ZXNGb3JtQXJyYXkpIHtcclxuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FyX3BsYXRlKSk7XHJcbiAgICAgICAgY2FyUGxhdGVzSW52YWxpZCA9IHRoaXMuaXNGb3JtQ29udHJvbExpc3RJbnZhbGlkKGNhclBsYXRlc0Zvcm1BcnJheS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaXNDYXJQbGF0ZXNJbnZhbGlkID0gY2FyUGxhdGVzSW52YWxpZCB8fCAhY2FyUGxhdGVzRm9ybUFycmF5O1xyXG5cclxuICAgICAgLy8gTW9iaWxlXHJcbiAgICAgIGNvbnN0IG1vYmlsZUZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChtb2JpbGVGaWVsZCk7XHJcbiAgICAgIGlmIChtb2JpbGVGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5tb2JpbGUpKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpc01vYmlsZUludmFsaWQgPSAhbW9iaWxlRm9ybUNvbnRyb2w/LnZhbHVlO1xyXG5cclxuICAgICAgLy8gRW1haWxcclxuICAgICAgY29uc3QgZW1haWxGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZW1haWxGaWVsZCk7XHJcbiAgICAgIGNvbnN0IHNlbmRFbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChzZW5kRW1haWxGaWVsZCk7XHJcbiAgICAgIGlmIChlbWFpbEZvcm1Db250cm9sICYmIHNlbmRFbWFpbEZvcm1Db250cm9sPy52YWx1ZSkge1xyXG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5lbWFpbCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGlzRW1haWxJbnZhbGlkID0gIShzZW5kRW1haWxGb3JtQ29udHJvbD8udmFsdWUgJiYgZW1haWxGb3JtQ29udHJvbD8udmFsdWUpXHJcblxyXG4gICAgICBjb25zdCBpc1JlcXVpcmVkQ3JlZGVudGlhbHMgPSBpc0NhclBsYXRlc0ludmFsaWQgJiYgaXNDYXJkc0ludmFsaWQgJiYgaXNNb2JpbGVJbnZhbGlkICYmIGlzRW1haWxJbnZhbGlkO1xyXG5cclxuICAgICAgaWYgKGlzUmVxdWlyZWRDcmVkZW50aWFscykge1xyXG4gICAgICAgIGNvbnN0IGxhc3RDcmVkZW50aWFsID0gaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucG9wKCk7XHJcbiAgICAgICAgbGV0IGludGVycG9sYXRlUGFyYW1zID0gYCR7aW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMuam9pbignLCAnKX0gJHt0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLm9yKX0gJHtsYXN0Q3JlZGVudGlhbH1gO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZXF1aXJlZENyZWRlbnRpYWxzOiB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnJlcXVpcmVkX2NyZWRlbnRpYWxzX21lc3NhZ2UsIHsgY3JlZGVudGlhbHM6IGludGVycG9sYXRlUGFyYW1zIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChsaXN0OiBVbnR5cGVkRm9ybUNvbnRyb2xbXSkge1xyXG4gICAgbGV0IGlzSW52YWxpZCA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGxpc3QpIHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgaXNJbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0ludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVxdWlyZWREYXlzKHNwZWNpYWxEYXlzRmllbGQ6IHN0cmluZywgd2Vla0RheXNGaWVsZDogc3RyaW5nLCBlcnJvck5hbWU6IHN0cmluZyA9ICdyZXF1aXJlZERheXMnKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XHJcbiAgICAgIGNvbnN0IHNwZWNpYWxEYXlzOiBudW1iZXIgPSBmb3JtR3JvdXAuZ2V0KHNwZWNpYWxEYXlzRmllbGQpLnZhbHVlO1xyXG4gICAgICBjb25zdCB3ZWVrRGF5czogbnVtYmVyID0gZm9ybUdyb3VwLmdldCh3ZWVrRGF5c0ZpZWxkKS52YWx1ZTtcclxuICAgICAgaWYgKHNwZWNpYWxEYXlzID4gMCB8fCB3ZWVrRGF5cyA+IDApIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNSb2xlTmFtZUV4aXN0cyhyb2xlU2VydmljZVByb3h5OiBDbG91ZC5Sb2xlU2VydmljZVByb3h5LCByb2xlSWQ6IG51bWJlcik6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnM+ID0+IHtcclxuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXHJcbiAgICAgICAgZGVsYXkoNTAwKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoSU5QVVRfU0VBUkNIX0RFQk9VTkNFX1RJTUUpLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiByb2xlU2VydmljZVByb3h5LmlzRXhpc3RzKGNvbnRyb2wudmFsdWUsIHJvbGVJZCA/PyB1bmRlZmluZWQpLnBpcGUoXHJcbiAgICAgICAgICBtYXAocmVzID0+IHJlcy5kYXRhID09PSB0cnVlIHx8ICFyZXMuaXNTdWNjZXNzID8geyByb2xlTmFtZUFscmVhZHlFeGlzdHM6IHRydWUgfSA6IG51bGwpKSkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0aWJhVGltZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCB2YWw6IFRpYmFUaW1lID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAodmFsICYmICh2YWwuaG91cnMgPT09IG51bGwgfHwgdmFsLm1pbnV0ZXMgPT09IG51bGwpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaW52YWxpZFRpbWU6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZVZhbGlkYXRvcihtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY29udHJvbC52YWx1ZSwgbWluVGltZSwgbWF4VGltZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHZhbGlkYXRlU3RyaW5nSEhNTUluUmFuZ2VWYWxpZGF0b3IobWluVGltZTogVGliYVRpbWUsIG1heFRpbWU6IFRpYmFUaW1lKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgIGlmICghIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggIT09IDQpIHsgLy8gQXNzdW1pbmcgdGltZSBmb3JtYXQgaXMgJ0hITU0nXHJcbiAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX2Zvcm1hdDogdHJ1ZSB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBob3VyczogbnVtYmVyID0gcGFyc2VJbnQoY29udHJvbC52YWx1ZS5zbGljZSgwLCAyKSk7XHJcbiAgICAgICAgICBjb25zdCBtaW51dGVzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDIpKTtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lOiBUaWJhVGltZSA9IHsgaG91cnMsIG1pbnV0ZXMgfTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVGliYVRpbWVJblJhbmdlKGN1cnJlbnRUaW1lLCBtaW5UaW1lLCBtYXhUaW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRpbWVSYW5nZUFycmF5T3ZlcmxhcFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgaWYgKGNvbnRyb2wudmFsaWQgJiYgY29udHJvbC5lbmFibGVkKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSYW5nZSA9IGZvcm1BcnJheVtpXTtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRGcm9tID0gdGltZVRvTW9tZW50KGN1cnJlbnRSYW5nZS5mcm9tKTtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUbyA9IHRpbWVUb01vbWVudChjdXJyZW50UmFuZ2UudG8pO1xyXG5cclxuICAgICAgICAgIGlmIChjdXJyZW50RnJvbSAmJiBjdXJyZW50VG8pIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgZm9ybUFycmF5Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVJhbmdlID0gZm9ybUFycmF5W2pdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVGcm9tID0gdGltZVRvTW9tZW50KGNvbXBhcmVSYW5nZS5mcm9tKTtcclxuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlVG8gPSB0aW1lVG9Nb21lbnQoY29tcGFyZVJhbmdlLnRvKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmVGcm9tICYmIGNvbXBhcmVUbykge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJsYXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlc092ZXJsYXAgPSBjdXJyZW50RnJvbS5pc0JlZm9yZShjb21wYXJlVG8pICYmIGN1cnJlbnRUby5pc0FmdGVyKGNvbXBhcmVGcm9tKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VzT3ZlcmxhcCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25fdGltZV9yYW5nZV9vdmVybGFwOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdG9Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZyb21UaW1lSW5OdW1iZXI6IG51bWJlciA9IGZyb21Db250cm9sLnZhbHVlO1xyXG4gICAgY29uc3QgdG9UaW1lSW5OdW1iZXI6IG51bWJlciA9IHRvQ29udHJvbC52YWx1ZTtcclxuICAgIHJldHVybiBmcm9tVGltZUluTnVtYmVyICE9PSBudWxsICYmIHRvVGltZUluTnVtYmVyICE9PSBudWxsICYmICtmcm9tVGltZUluTnVtYmVyID4gK3RvVGltZUluTnVtYmVyO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsdWVMZW5ndGhWYWxpZChmcm9tQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCB0b0NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZnJvbVRpbWVJbk51bWJlcjogbnVtYmVyID0gZnJvbUNvbnRyb2wudmFsdWU7XHJcbiAgICBjb25zdCB0b1RpbWVJbk51bWJlcjogbnVtYmVyID0gdG9Db250cm9sLnZhbHVlO1xyXG4gICAgcmV0dXJuIGZyb21UaW1lSW5OdW1iZXIudG9TdHJpbmcoKS5sZW5ndGggPT09IFZBTElEX1RJTUVfTUFYX0xFTkdUSCAmJlxyXG4gICAgICB0b1RpbWVJbk51bWJlci50b1N0cmluZygpLmxlbmd0aCA9PT0gVkFMSURfVElNRV9NQVhfTEVOR1RIO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY3VycmVudFRpbWU6IFRpYmFUaW1lLCBtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWU6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0gfSB8IG51bGwge1xyXG4gICAgLy8gSWYgdGltZSBpcyB1bmRlZmluZWQsIHJldHVybiBudWxsIChubyBlcnJvcilcclxuICAgIGlmICghY3VycmVudFRpbWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBUaWJhVGltZSk6IHN0cmluZyA9PlxyXG4gICAgICBgJHt0aW1lLmhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHt0aW1lLm1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcblxyXG4gICAgY29uc3QgaG91cnM6IG51bWJlciA9ICtjdXJyZW50VGltZS5ob3VycztcclxuICAgIGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9ICtjdXJyZW50VGltZS5taW51dGVzO1xyXG5cclxuICAgIGNvbnN0IGlzVmFsaWRUaW1lID1cclxuICAgICAgKGhvdXJzID4gbWluVGltZS5ob3VycyB8fCAoaG91cnMgPT09IG1pblRpbWUuaG91cnMgJiYgbWludXRlcyA+PSBtaW5UaW1lLm1pbnV0ZXMpKSAmJlxyXG4gICAgICAoaG91cnMgPCBtYXhUaW1lLmhvdXJzIHx8IChob3VycyA9PT0gbWF4VGltZS5ob3VycyAmJiBtaW51dGVzIDw9IG1heFRpbWUubWludXRlcykpO1xyXG5cclxuICAgIC8vIElmIHRpbWUgaXMgdmFsaWQsIHJldHVybiBudWxsIChubyBlcnJvcilcclxuICAgIGlmIChpc1ZhbGlkVGltZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPdGhlcndpc2UsIHJldHVybiB0aGUgdmFsaWRhdGlvbiBlcnJvciB3aXRoIGZvcm1hdHRlZCB0aW1lIHJhbmdlXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lOiB7XHJcbiAgICAgICAgZnJvbTogZm9ybWF0VGltZShtaW5UaW1lKSxcclxuICAgICAgICB0bzogZm9ybWF0VGltZShtYXhUaW1lKSxcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
@@ -144,14 +144,14 @@ export function timeToMoment(time) {
144
144
  if (!time || time.hours == null || time.minutes == null) {
145
145
  return null;
146
146
  }
147
- let { hours, minutes, seconds = 0, middayPeriod } = time;
147
+ let { hours, minutes, seconds, middayPeriod } = time;
148
148
  if (middayPeriod === MiddayPeriod.PM && hours < 12) {
149
149
  hours += 12;
150
150
  }
151
151
  else if (middayPeriod === MiddayPeriod.AM && hours === 12) {
152
152
  hours = 0;
153
153
  }
154
- return moment().hours(hours).minutes(minutes).seconds(seconds);
154
+ return moment().hours(hours).minutes(minutes).seconds(seconds ?? 0);
155
155
  }
156
156
  // Wrapper method to format minutes with ":" as separator (e.g., "HH:mm")
157
157
  export function formatTimeWithSeparator(value, isMidnightEnable) {
@@ -170,4 +170,4 @@ function formatTime(value, isMidnightEnabled, separator = ':') {
170
170
  }
171
171
  return null;
172
172
  }
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9kYXRlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sTUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqSSxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQztBQUM1QyxNQUFNLDRCQUE0QixHQUFHLGtCQUFrQixDQUFDO0FBRXhELE1BQU0sQ0FBTixJQUFZLFlBRVg7QUFGRCxXQUFZLFlBQVk7SUFDdEIsMkNBQU0sQ0FBQTtJQUFFLDJDQUFNLENBQUE7QUFDaEIsQ0FBQyxFQUZXLFlBQVksS0FBWixZQUFZLFFBRXZCO0FBU0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWE7SUFDOUMsT0FBTyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxZQUFrQjtJQUM3RCxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMseUZBQXlGO0lBQ3pGLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN4QjtJQUVELE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFD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O0FBQ2pFLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEtBQWEsRUFBRSxnQkFBeUI7SUFDOUUsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxVQUFVLDBCQUEwQixDQUFDLEtBQWEsRUFBRSxnQkFBeUI7SUFDakYsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsU0FBUyxVQUFVLENBQUMsS0FBYSxFQUFFLGlCQUEwQixFQUFFLFlBQW9CLEdBQUc7SUFDcEYsSUFBSSxpQkFBaUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsT0FBTyxHQUFHLEtBQUssR0FBRyxTQUFTLEdBQUcsT0FBTyxFQUFFLENBQUM7S0FDekM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50LXRpbWV6b25lJztcclxuaW1wb3J0IHsgREVGQVVMVF9TTUFSVF9QQVJLX0RBVEVfVElNRSwgTUlOVVRFU19QRVJfSE9VUiwgTk9fUkVTVUxULCBURU5TX01VTFRJUExJRVIsIFZBTElEX1RJTUVfTUFYX0xFTkdUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcblxyXG5jb25zdCBEQVRFX0ZPUk1BVF9ZWVlZX01NX0REID0gJ1lZWVktTU0tREQnO1xyXG5jb25zdCBEQVRFX0ZPUk1BVF9ZWVlZX01NX0REX0hIX01NID0gJ1lZWVktTU0tREQgSEg6bW0nO1xyXG5cclxuZXhwb3J0IGVudW0gTWlkZGF5UGVyaW9kIHtcclxuICBBTSA9IDEsIFBNID0gMlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUaW1lID0ge1xyXG4gIGhvdXJzOiBudW1iZXI7XHJcbiAgbWludXRlczogbnVtYmVyO1xyXG4gIHNlY29uZHM/OiBudW1iZXI7XHJcbiAgbWlkZGF5UGVyaW9kPzogTWlkZGF5UGVyaW9kO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU21hcnRQYXJrVGltZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgcmV0dXJuIG1vbWVudChERUZBVUxUX1NNQVJUX1BBUktfREFURV9USU1FKS5zZWNvbmRzKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZVRpbWVUb1NwYXJrUGFya1RpbWUoc2VsZWN0ZWREYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICBpZiAoIXNlbGVjdGVkRGF0ZSkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdCBkYXRlMiA9IG1vbWVudChzZWxlY3RlZERhdGUpO1xyXG4gIC8vIElmIHRoZSBkYXRlIHdlIHdhbnQgaXMgaW4gRFNUIHRoZW4gdG8gYXZvaWQgaW5jb3JyZWN0IHJlc3VsdHMgd2UgbmVlZCB0byBhZGQgaXQgMSBob3VyXHJcbiAgaWYgKGRhdGUyLmlzRFNUKCkpIHtcclxuICAgIGRhdGUyLmFkZCh7IGhvdXI6IDEgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGF0ZURpZmZJblNlY29uZHMobW9tZW50KERFRkFVTFRfU01BUlRfUEFSS19EQVRFX1RJTUUpLCBkYXRlMik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlVGltZUluU2Vjb25kcyhkYXRlOiBEYXRlLCB0aW1lOiBUaW1lKTogbnVtYmVyIHtcclxuICBkYXRlLnNldE1pbnV0ZXModGltZS5taW51dGVzKTtcclxuICBkYXRlLnNldEhvdXJzKHRpbWUuaG91cnMpO1xyXG5cclxuICBjb25zdCBkYXRlVGltZUluU2Vjb25kczogbnVtYmVyID0gcGFyc2VEYXRlVGltZVRvU3BhcmtQYXJrVGltZShkYXRlKTtcclxuXHJcbiAgcmV0dXJuIGRhdGVUaW1lSW5TZWNvbmRzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZURpZmZJblNlY29uZHMoZGF0ZTE6IE1vbWVudCwgZGF0ZTI6IE1vbWVudCk6IG51bWJlciB7XHJcbiAgLy8gbW9tZW50IGlnbm9yZSBhbmQgcmV0dXJuIGRhdGUgd2l0aCBzeXN0ZW0gdGltZSB6b25lIC0gdXNpbmcgZm9ybWF0IGNvcnJlY3QgdGhlIGRhdGUgb2JqZWN0XHJcbiAgY29uc3QgZGVmYXVsdFNtYXJ0UGFya1RpbWVVVEMgPSBtb21lbnQudHooZGF0ZTEsICd1dGMnKTtcclxuXHJcbiAgY29uc3Qgc2VsZWN0ZWREYXRlRm9ybWF0dGVkID0gbW9tZW50KGRhdGUyLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIikpO1xyXG4gIHJldHVybiBzZWxlY3RlZERhdGVGb3JtYXR0ZWQuZGlmZihkZWZhdWx0U21hcnRQYXJrVGltZVVUQywgJ3NlY29uZHMnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplVGltZUVsYXBzZWQoZnJvbTogRGF0ZSwgdG86IERhdGUpIHtcclxuICByZXR1cm4gbW9tZW50LmR1cmF0aW9uKGFkanVzdEZvclRpbWV6b25lKGZyb20pLmdldFRpbWUoKSAtIHRvLmdldFRpbWUoKSkuaHVtYW5pemUoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplVXRjVGltZUVsYXBzZWQoZnJvbTogRGF0ZSwgdG86IERhdGUpIHtcclxuICByZXR1cm4gbW9tZW50LmR1cmF0aW9uKGZyb20uZ2V0VGltZSgpIC0gdG8uZ2V0VGltZSgpKS5odW1hbml6ZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlmZkluTWlsbGlzKHZhbHVlLCBpc0Fic29sdXRlKSB7XHJcbiAgY29uc3QgZGlmZiA9IG1vbWVudC5kdXJhdGlvbihtb21lbnQodmFsdWUpLmRpZmYobW9tZW50KCkpKS5hc01pbGxpc2Vjb25kcygpO1xyXG4gIGlmIChpc0Fic29sdXRlKSB7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoZGlmZik7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBkaWZmO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbWVudE51bGxhYmxlKGRhdGU6IERhdGUpIHtcclxuICByZXR1cm4gZGF0ZSA/IG1vbWVudChkYXRlKSA6IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRVdGNNb21lbnROdWxsYWJsZShkYXRlOiBEYXRlKSB7XHJcbiAgcmV0dXJuIGRhdGUgPyBtb21lbnQoZGF0ZSkudXRjKHRydWUpIDogbnVsbDtcclxufVxyXG5cclxuLy8gV2hlbiBzdWJ0cmFjdCB0aGUgb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQgZGF0ZSxcclxuLy8gV2UgZ2V0IGEgZGF0ZSB0aGF0IGlmIHlvdSByZW1vdmUgdGhlIG9mZnNldCB5b3Ugd2lsbCBnZXQgVVRDa2luZFxyXG4vLyBvZiB0aGUgdGltZSBzZWxlY3RlZFxyXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0Rm9yVGltZXpvbmUoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksXHJcbiAgICBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcclxufVxyXG5cclxuLy8gcmUtYWRqdXN0IG1ldGhvZCB3aGVuIG5lZWQgdG8gc2V0IGJhY2sgdGhlIHRpbWV6b25lb2Zmc2V0IGFmdGVyIHVzaW5nIGFkanVzdEZvclRpbWV6b25lXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkanVzdEZvclRpbWV6b25lKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICByZXR1cm4gIWRhdGUgPyBudWxsIDogbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSArIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc01heERheXNSYW5nZVZhbGlkKHZhbGlkRnJvbTogRGF0ZSwgdmFsaWRUbzogRGF0ZSwgYWxsb3dlZE51bWJlck9mRGF5czogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgbGV0IG1heERheXNSYW5nZVZhbGlkID0gdHJ1ZTtcclxuICBpZiAodmFsaWRGcm9tICYmIHZhbGlkVG8pIHtcclxuICAgIGNvbnN0IHZhbGlkRnJvbURhdGUgPSBtb21lbnQodmFsaWRGcm9tKTtcclxuICAgIGNvbnN0IHZhbGlkVG9EYXRlID0gbW9tZW50KHZhbGlkVG8pO1xyXG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gbW9tZW50LmR1cmF0aW9uKHZhbGlkVG9EYXRlLmRpZmYodmFsaWRGcm9tRGF0ZSkpLmFzRGF5cygpO1xyXG4gICAgbWF4RGF5c1JhbmdlVmFsaWQgPSAhKG51bWJlck9mRGF5cyA+IGFsbG93ZWROdW1iZXJPZkRheXMpO1xyXG4gIH1cclxuICByZXR1cm4gbWF4RGF5c1JhbmdlVmFsaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcmVEYXRlc0lkZW50aWNhbChmcm9tRGF0ZTogRGF0ZSwgdG9EYXRlOiBEYXRlKSB7XHJcbiAgaWYgKGZyb21EYXRlICYmIHRvRGF0ZSkge1xyXG4gICAgY29uc3QgdmFsaWRGcm9tRGF0ZTogRGF0ZSA9IGZyb21EYXRlO1xyXG4gICAgY29uc3QgdmFsaWRUb0RhdGU6IERhdGUgPSB0b0RhdGU7XHJcbiAgICB2YWxpZEZyb21EYXRlLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICB2YWxpZFRvRGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgcmV0dXJuIHZhbGlkRnJvbURhdGUuZ2V0VGltZSgpID09PSB2YWxpZFRvRGF0ZS5nZXRUaW1lKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlclRpbWVab25lKCk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIG1vbWVudC50ei5ndWVzcygpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEZvcm1hdFdpdGhvdXRUaW1lKGZvcm1hdDogc3RyaW5nKSB7XHJcbiAgbGV0IGZvcm1hdFZhbHVlcyA9IGZvcm1hdC5zcGxpdChcImhcIik7XHJcbiAgaWYgKGZvcm1hdFZhbHVlcy5sZW5ndGggPT09IE5PX1JFU1VMVCkge1xyXG4gICAgZm9ybWF0VmFsdWVzID0gZm9ybWF0LnNwbGl0KFwiSFwiKTtcclxuICB9XHJcbiAgcmV0dXJuIGZvcm1hdFZhbHVlc1swXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVXaXRob3V0VGltZShyb3dWYWx1ZVRpbWU6IE1vbWVudCwgZGF0ZUZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICBjb25zdCBkYXRlID0gcm93VmFsdWVUaW1lPy50b0RhdGUoKTtcclxuICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIGNvbnZlcnRGb3JtYXRXaXRob3V0VGltZShkYXRlRm9ybWF0KSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb21lbnRXaXRob3V0VGltZShtb21lbnREYXRlOiBNb21lbnQpOiBEYXRlIHtcclxuICBjb25zdCBmb3JtYXR0ZWREYXRlID0gbW9tZW50RGF0ZS5mb3JtYXQoREFURV9GT1JNQVRfWVlZWV9NTV9ERCk7XHJcbiAgcmV0dXJuIG5ldyBEYXRlKGZvcm1hdHRlZERhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9tZW5XaXRoVGltZShtb21lbnREYXRlOiBNb21lbnQpOiBEYXRlIHtcclxuICBjb25zdCBmb3JtYXR0ZWREYXRlID0gbW9tZW50RGF0ZS5mb3JtYXQoREFURV9GT1JNQVRfWVlZWV9NTV9ERF9ISF9NTSk7XHJcbiAgcmV0dXJuIGFkanVzdEZvclRpbWV6b25lKG5ldyBEYXRlKGZvcm1hdHRlZERhdGUpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXNUb1RpbWVOdW1iZXIodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgaWYgKHZhbHVlID4gMCkge1xyXG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IodmFsdWUgLyA2MCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSR7KHZhbHVlICUgNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRpbWVXaXRob3V0TWlkbmlnaHQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGZvcm1hdFRpbWVXaXRoU2VwYXJhdG9yKHZhbHVlLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lV2l0aE1pZG5pZ2h0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIHJldHVybiBmb3JtYXRUaW1lV2l0aFNlcGFyYXRvcih2YWx1ZSwgdHJ1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lV2l0aG91dFNlcGVyYXRvckFuZFdpdGhNaWRuaWdodCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICByZXR1cm4gZm9ybWF0VGltZVdpdGhvdXRTZXBhcmF0b3IodmFsdWUsIHRydWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZVdpdGhvdXRTZXBlcmF0b3JBbmRXaXRob3V0TWlkbmlnaHQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGZvcm1hdFRpbWVXaXRob3V0U2VwYXJhdG9yKHZhbHVlLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lVG9NaW51dGVzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIHZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk7XHJcbiAgaWYgKHZhbHVlPy5sZW5ndGggPT09IFZBTElEX1RJTUVfTUFYX0xFTkdUSCkge1xyXG4gICAgY29uc3QgaCA9ICgoK3ZhbHVlWzBdICogVEVOU19NVUxUSVBMSUVSKSArICt2YWx1ZVsxXSkgKiBNSU5VVEVTX1BFUl9IT1VSO1xyXG4gICAgY29uc3QgbSA9ICt2YWx1ZVsyXSAqIFRFTlNfTVVMVElQTElFUiArICt2YWx1ZVszXTtcclxuICAgIHJldHVybiBoICsgbTtcclxuICB9XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWludXRlc1RvVGltZShtaW51dGVzOiBudW1iZXIpOiBUaW1lIHtcclxuICByZXR1cm4gbWludXRlcyA+PSAwID8geyBob3VyczogTWF0aC5mbG9vcihtaW51dGVzIC8gTUlOVVRFU19QRVJfSE9VUiksIG1pbnV0ZXM6IG1pbnV0ZXMgJSBNSU5VVEVTX1BFUl9IT1VSIH0gOiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9NaW51dGVzKHRpbWU6IFRpbWUpOiBudW1iZXIge1xyXG4gIHJldHVybiB0aW1lID8gKHRpbWUuaG91cnMgKiBNSU5VVEVTX1BFUl9IT1VSKSArIHRpbWUubWludXRlcyA6IDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9Nb21lbnQodGltZTogVGltZSk6IG1vbWVudC5Nb21lbnQgfCBudWxsIHtcclxuICBpZiAoIXRpbWUgfHwgdGltZS5ob3VycyA9PSBudWxsIHx8IHRpbWUubWludXRlcyA9PSBudWxsKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGxldCB7IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzID0gMCwgbWlkZGF5UGVyaW9kIH0gPSB0aW1lO1xyXG5cclxuICBpZiAobWlkZGF5UGVyaW9kID09PSBNaWRkYXlQZXJpb2QuUE0gJiYgaG91cnMgPCAxMikge1xyXG4gICAgaG91cnMgKz0gMTI7XHJcbiAgfSBlbHNlIGlmIChtaWRkYXlQZXJpb2QgPT09IE1pZGRheVBlcmlvZC5BTSAmJiBob3VycyA9PT0gMTIpIHtcclxuICAgIGhvdXJzID0gMDtcclxuICB9XHJcblxyXG4gIHJldHVybiBtb21lbnQoKS5ob3Vycyhob3VycykubWludXRlcyhtaW51dGVzKS5zZWNvbmRzKHNlY29uZHMpO1xyXG59XHJcblxyXG4vLyBXcmFwcGVyIG1ldGhvZCB0byBmb3JtYXQgbWludXRlcyB3aXRoIFwiOlwiIGFzIHNlcGFyYXRvciAoZS5nLiwgXCJISDptbVwiKVxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZVdpdGhTZXBhcmF0b3IodmFsdWU6IG51bWJlciwgaXNNaWRuaWdodEVuYWJsZTogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xyXG4gIHJldHVybiBmb3JtYXRUaW1lKHZhbHVlLCBpc01pZG5pZ2h0RW5hYmxlLCAnOicpO1xyXG59XHJcblxyXG4vLyBXcmFwcGVyIG1ldGhvZCB0byBmb3JtYXQgbWludXRlcyB3aXRob3V0IHNlcGFyYXRvciAoZS5nLiwgXCJISG1tXCIpXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lV2l0aG91dFNlcGFyYXRvcih2YWx1ZTogbnVtYmVyLCBpc01pZG5pZ2h0RW5hYmxlOiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgcmV0dXJuIGZvcm1hdFRpbWUodmFsdWUsIGlzTWlkbmlnaHRFbmFibGUsICcnKTtcclxufVxyXG5cclxuLy8gQ29yZSBtZXRob2QgZm9yIGZvcm1hdHRpbmcgbWludXRlcyB3aXRoIGZsZXhpYmlsaXR5IGluIG91dHB1dCBmb3JtYXRcclxuZnVuY3Rpb24gZm9ybWF0VGltZSh2YWx1ZTogbnVtYmVyLCBpc01pZG5pZ2h0RW5hYmxlZDogYm9vbGVhbiwgc2VwYXJhdG9yOiBzdHJpbmcgPSAnOicpOiBzdHJpbmcgfCBudWxsIHtcclxuICBpZiAoaXNNaWRuaWdodEVuYWJsZWQgfHwgdmFsdWUgPiAwKSB7XHJcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IodmFsdWUgLyBNSU5VVEVTX1BFUl9IT1VSKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBtaW51dGVzID0gKHZhbHVlICUgTUlOVVRFU19QRVJfSE9VUikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgcmV0dXJuIGAke2hvdXJzfSR7c2VwYXJhdG9yfSR7bWludXRlc31gO1xyXG4gIH1cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG4iXX0=
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9kYXRlLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sTUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqSSxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQztBQUM1QyxNQUFNLDRCQUE0QixHQUFHLGtCQUFrQixDQUFDO0FBRXhELE1BQU0sQ0FBTixJQUFZLFlBRVg7QUFGRCxXQUFZLFlBQVk7SUFDdEIsMkNBQU0sQ0FBQTtJQUFFLDJDQUFNLENBQUE7QUFDaEIsQ0FBQyxFQUZXLFlBQVksS0FBWixZQUFZLFFBRXZCO0FBU0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWE7SUFDOUMsT0FBTyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxZQUFrQjtJQUM3RCxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMseUZBQXlGO0lBQ3pGLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN4QjtJQUVELE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFD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O0FBQ3RFLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEtBQWEsRUFBRSxnQkFBeUI7SUFDOUUsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxVQUFVLDBCQUEwQixDQUFDLEtBQWEsRUFBRSxnQkFBeUI7SUFDakYsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsU0FBUyxVQUFVLENBQUMsS0FBYSxFQUFFLGlCQUEwQixFQUFFLFlBQW9CLEdBQUc7SUFDcEYsSUFBSSxpQkFBaUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsT0FBTyxHQUFHLEtBQUssR0FBRyxTQUFTLEdBQUcsT0FBTyxFQUFFLENBQUM7S0FDekM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50LXRpbWV6b25lJztcclxuaW1wb3J0IHsgREVGQVVMVF9TTUFSVF9QQVJLX0RBVEVfVElNRSwgTUlOVVRFU19QRVJfSE9VUiwgTk9fUkVTVUxULCBURU5TX01VTFRJUExJRVIsIFZBTElEX1RJTUVfTUFYX0xFTkdUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcblxyXG5jb25zdCBEQVRFX0ZPUk1BVF9ZWVlZX01NX0REID0gJ1lZWVktTU0tREQnO1xyXG5jb25zdCBEQVRFX0ZPUk1BVF9ZWVlZX01NX0REX0hIX01NID0gJ1lZWVktTU0tREQgSEg6bW0nO1xyXG5cclxuZXhwb3J0IGVudW0gTWlkZGF5UGVyaW9kIHtcclxuICBBTSA9IDEsIFBNID0gMlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUaW1lID0ge1xyXG4gIGhvdXJzOiBudW1iZXI7XHJcbiAgbWludXRlczogbnVtYmVyO1xyXG4gIHNlY29uZHM/OiBudW1iZXI7XHJcbiAgbWlkZGF5UGVyaW9kPzogTWlkZGF5UGVyaW9kO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU21hcnRQYXJrVGltZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgcmV0dXJuIG1vbWVudChERUZBVUxUX1NNQVJUX1BBUktfREFURV9USU1FKS5zZWNvbmRzKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZVRpbWVUb1NwYXJrUGFya1RpbWUoc2VsZWN0ZWREYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICBpZiAoIXNlbGVjdGVkRGF0ZSkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdCBkYXRlMiA9IG1vbWVudChzZWxlY3RlZERhdGUpO1xyXG4gIC8vIElmIHRoZSBkYXRlIHdlIHdhbnQgaXMgaW4gRFNUIHRoZW4gdG8gYXZvaWQgaW5jb3JyZWN0IHJlc3VsdHMgd2UgbmVlZCB0byBhZGQgaXQgMSBob3VyXHJcbiAgaWYgKGRhdGUyLmlzRFNUKCkpIHtcclxuICAgIGRhdGUyLmFkZCh7IGhvdXI6IDEgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGF0ZURpZmZJblNlY29uZHMobW9tZW50KERFRkFVTFRfU01BUlRfUEFSS19EQVRFX1RJTUUpLCBkYXRlMik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlVGltZUluU2Vjb25kcyhkYXRlOiBEYXRlLCB0aW1lOiBUaW1lKTogbnVtYmVyIHtcclxuICBkYXRlLnNldE1pbnV0ZXModGltZS5taW51dGVzKTtcclxuICBkYXRlLnNldEhvdXJzKHRpbWUuaG91cnMpO1xyXG5cclxuICBjb25zdCBkYXRlVGltZUluU2Vjb25kczogbnVtYmVyID0gcGFyc2VEYXRlVGltZVRvU3BhcmtQYXJrVGltZShkYXRlKTtcclxuXHJcbiAgcmV0dXJuIGRhdGVUaW1lSW5TZWNvbmRzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZURpZmZJblNlY29uZHMoZGF0ZTE6IE1vbWVudCwgZGF0ZTI6IE1vbWVudCk6IG51bWJlciB7XHJcbiAgLy8gbW9tZW50IGlnbm9yZSBhbmQgcmV0dXJuIGRhdGUgd2l0aCBzeXN0ZW0gdGltZSB6b25lIC0gdXNpbmcgZm9ybWF0IGNvcnJlY3QgdGhlIGRhdGUgb2JqZWN0XHJcbiAgY29uc3QgZGVmYXVsdFNtYXJ0UGFya1RpbWVVVEMgPSBtb21lbnQudHooZGF0ZTEsICd1dGMnKTtcclxuXHJcbiAgY29uc3Qgc2VsZWN0ZWREYXRlRm9ybWF0dGVkID0gbW9tZW50KGRhdGUyLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIikpO1xyXG4gIHJldHVybiBzZWxlY3RlZERhdGVGb3JtYXR0ZWQuZGlmZihkZWZhdWx0U21hcnRQYXJrVGltZVVUQywgJ3NlY29uZHMnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplVGltZUVsYXBzZWQoZnJvbTogRGF0ZSwgdG86IERhdGUpIHtcclxuICByZXR1cm4gbW9tZW50LmR1cmF0aW9uKGFkanVzdEZvclRpbWV6b25lKGZyb20pLmdldFRpbWUoKSAtIHRvLmdldFRpbWUoKSkuaHVtYW5pemUoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplVXRjVGltZUVsYXBzZWQoZnJvbTogRGF0ZSwgdG86IERhdGUpIHtcclxuICByZXR1cm4gbW9tZW50LmR1cmF0aW9uKGZyb20uZ2V0VGltZSgpIC0gdG8uZ2V0VGltZSgpKS5odW1hbml6ZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlmZkluTWlsbGlzKHZhbHVlLCBpc0Fic29sdXRlKSB7XHJcbiAgY29uc3QgZGlmZiA9IG1vbWVudC5kdXJhdGlvbihtb21lbnQodmFsdWUpLmRpZmYobW9tZW50KCkpKS5hc01pbGxpc2Vjb25kcygpO1xyXG4gIGlmIChpc0Fic29sdXRlKSB7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoZGlmZik7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBkaWZmO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbWVudE51bGxhYmxlKGRhdGU6IERhdGUpIHtcclxuICByZXR1cm4gZGF0ZSA/IG1vbWVudChkYXRlKSA6IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRVdGNNb21lbnROdWxsYWJsZShkYXRlOiBEYXRlKSB7XHJcbiAgcmV0dXJuIGRhdGUgPyBtb21lbnQoZGF0ZSkudXRjKHRydWUpIDogbnVsbDtcclxufVxyXG5cclxuLy8gV2hlbiBzdWJ0cmFjdCB0aGUgb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQgZGF0ZSxcclxuLy8gV2UgZ2V0IGEgZGF0ZSB0aGF0IGlmIHlvdSByZW1vdmUgdGhlIG9mZnNldCB5b3Ugd2lsbCBnZXQgVVRDa2luZFxyXG4vLyBvZiB0aGUgdGltZSBzZWxlY3RlZFxyXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0Rm9yVGltZXpvbmUoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksXHJcbiAgICBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcclxufVxyXG5cclxuLy8gcmUtYWRqdXN0IG1ldGhvZCB3aGVuIG5lZWQgdG8gc2V0IGJhY2sgdGhlIHRpbWV6b25lb2Zmc2V0IGFmdGVyIHVzaW5nIGFkanVzdEZvclRpbWV6b25lXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkanVzdEZvclRpbWV6b25lKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICByZXR1cm4gIWRhdGUgPyBudWxsIDogbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSArIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc01heERheXNSYW5nZVZhbGlkKHZhbGlkRnJvbTogRGF0ZSwgdmFsaWRUbzogRGF0ZSwgYWxsb3dlZE51bWJlck9mRGF5czogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgbGV0IG1heERheXNSYW5nZVZhbGlkID0gdHJ1ZTtcclxuICBpZiAodmFsaWRGcm9tICYmIHZhbGlkVG8pIHtcclxuICAgIGNvbnN0IHZhbGlkRnJvbURhdGUgPSBtb21lbnQodmFsaWRGcm9tKTtcclxuICAgIGNvbnN0IHZhbGlkVG9EYXRlID0gbW9tZW50KHZhbGlkVG8pO1xyXG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gbW9tZW50LmR1cmF0aW9uKHZhbGlkVG9EYXRlLmRpZmYodmFsaWRGcm9tRGF0ZSkpLmFzRGF5cygpO1xyXG4gICAgbWF4RGF5c1JhbmdlVmFsaWQgPSAhKG51bWJlck9mRGF5cyA+IGFsbG93ZWROdW1iZXJPZkRheXMpO1xyXG4gIH1cclxuICByZXR1cm4gbWF4RGF5c1JhbmdlVmFsaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcmVEYXRlc0lkZW50aWNhbChmcm9tRGF0ZTogRGF0ZSwgdG9EYXRlOiBEYXRlKSB7XHJcbiAgaWYgKGZyb21EYXRlICYmIHRvRGF0ZSkge1xyXG4gICAgY29uc3QgdmFsaWRGcm9tRGF0ZTogRGF0ZSA9IGZyb21EYXRlO1xyXG4gICAgY29uc3QgdmFsaWRUb0RhdGU6IERhdGUgPSB0b0RhdGU7XHJcbiAgICB2YWxpZEZyb21EYXRlLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICB2YWxpZFRvRGF0ZS5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgcmV0dXJuIHZhbGlkRnJvbURhdGUuZ2V0VGltZSgpID09PSB2YWxpZFRvRGF0ZS5nZXRUaW1lKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlclRpbWVab25lKCk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIG1vbWVudC50ei5ndWVzcygpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEZvcm1hdFdpdGhvdXRUaW1lKGZvcm1hdDogc3RyaW5nKSB7XHJcbiAgbGV0IGZvcm1hdFZhbHVlcyA9IGZvcm1hdC5zcGxpdChcImhcIik7XHJcbiAgaWYgKGZvcm1hdFZhbHVlcy5sZW5ndGggPT09IE5PX1JFU1VMVCkge1xyXG4gICAgZm9ybWF0VmFsdWVzID0gZm9ybWF0LnNwbGl0KFwiSFwiKTtcclxuICB9XHJcbiAgcmV0dXJuIGZvcm1hdFZhbHVlc1swXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVXaXRob3V0VGltZShyb3dWYWx1ZVRpbWU6IE1vbWVudCwgZGF0ZUZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcclxuICBjb25zdCBkYXRlID0gcm93VmFsdWVUaW1lPy50b0RhdGUoKTtcclxuICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIGNvbnZlcnRGb3JtYXRXaXRob3V0VGltZShkYXRlRm9ybWF0KSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNb21lbnRXaXRob3V0VGltZShtb21lbnREYXRlOiBNb21lbnQpOiBEYXRlIHtcclxuICBjb25zdCBmb3JtYXR0ZWREYXRlID0gbW9tZW50RGF0ZS5mb3JtYXQoREFURV9GT1JNQVRfWVlZWV9NTV9ERCk7XHJcbiAgcmV0dXJuIG5ldyBEYXRlKGZvcm1hdHRlZERhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9tZW5XaXRoVGltZShtb21lbnREYXRlOiBNb21lbnQpOiBEYXRlIHtcclxuICBjb25zdCBmb3JtYXR0ZWREYXRlID0gbW9tZW50RGF0ZS5mb3JtYXQoREFURV9GT1JNQVRfWVlZWV9NTV9ERF9ISF9NTSk7XHJcbiAgcmV0dXJuIGFkanVzdEZvclRpbWV6b25lKG5ldyBEYXRlKGZvcm1hdHRlZERhdGUpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXNUb1RpbWVOdW1iZXIodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgaWYgKHZhbHVlID4gMCkge1xyXG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IodmFsdWUgLyA2MCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSR7KHZhbHVlICUgNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRpbWVXaXRob3V0TWlkbmlnaHQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGZvcm1hdFRpbWVXaXRoU2VwYXJhdG9yKHZhbHVlLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lV2l0aE1pZG5pZ2h0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIHJldHVybiBmb3JtYXRUaW1lV2l0aFNlcGFyYXRvcih2YWx1ZSwgdHJ1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lV2l0aG91dFNlcGVyYXRvckFuZFdpdGhNaWRuaWdodCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICByZXR1cm4gZm9ybWF0VGltZVdpdGhvdXRTZXBhcmF0b3IodmFsdWUsIHRydWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZVdpdGhvdXRTZXBlcmF0b3JBbmRXaXRob3V0TWlkbmlnaHQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGZvcm1hdFRpbWVXaXRob3V0U2VwYXJhdG9yKHZhbHVlLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lVG9NaW51dGVzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIHZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk7XHJcbiAgaWYgKHZhbHVlPy5sZW5ndGggPT09IFZBTElEX1RJTUVfTUFYX0xFTkdUSCkge1xyXG4gICAgY29uc3QgaCA9ICgoK3ZhbHVlWzBdICogVEVOU19NVUxUSVBMSUVSKSArICt2YWx1ZVsxXSkgKiBNSU5VVEVTX1BFUl9IT1VSO1xyXG4gICAgY29uc3QgbSA9ICt2YWx1ZVsyXSAqIFRFTlNfTVVMVElQTElFUiArICt2YWx1ZVszXTtcclxuICAgIHJldHVybiBoICsgbTtcclxuICB9XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWludXRlc1RvVGltZShtaW51dGVzOiBudW1iZXIpOiBUaW1lIHtcclxuICByZXR1cm4gbWludXRlcyA+PSAwID8geyBob3VyczogTWF0aC5mbG9vcihtaW51dGVzIC8gTUlOVVRFU19QRVJfSE9VUiksIG1pbnV0ZXM6IG1pbnV0ZXMgJSBNSU5VVEVTX1BFUl9IT1VSIH0gOiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9NaW51dGVzKHRpbWU6IFRpbWUpOiBudW1iZXIge1xyXG4gIHJldHVybiB0aW1lID8gKHRpbWUuaG91cnMgKiBNSU5VVEVTX1BFUl9IT1VSKSArIHRpbWUubWludXRlcyA6IDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9Nb21lbnQodGltZTogVGltZSk6IG1vbWVudC5Nb21lbnQgfCBudWxsIHtcclxuICBpZiAoIXRpbWUgfHwgdGltZS5ob3VycyA9PSBudWxsIHx8IHRpbWUubWludXRlcyA9PSBudWxsKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGxldCB7IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWRkYXlQZXJpb2QgfSA9IHRpbWU7XHJcblxyXG4gIGlmIChtaWRkYXlQZXJpb2QgPT09IE1pZGRheVBlcmlvZC5QTSAmJiBob3VycyA8IDEyKSB7XHJcbiAgICBob3VycyArPSAxMjtcclxuICB9IGVsc2UgaWYgKG1pZGRheVBlcmlvZCA9PT0gTWlkZGF5UGVyaW9kLkFNICYmIGhvdXJzID09PSAxMikge1xyXG4gICAgaG91cnMgPSAwO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1vbWVudCgpLmhvdXJzKGhvdXJzKS5taW51dGVzKG1pbnV0ZXMpLnNlY29uZHMoc2Vjb25kcyA/PyAwKTtcclxufVxyXG5cclxuLy8gV3JhcHBlciBtZXRob2QgdG8gZm9ybWF0IG1pbnV0ZXMgd2l0aCBcIjpcIiBhcyBzZXBhcmF0b3IgKGUuZy4sIFwiSEg6bW1cIilcclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRpbWVXaXRoU2VwYXJhdG9yKHZhbHVlOiBudW1iZXIsIGlzTWlkbmlnaHRFbmFibGU6IGJvb2xlYW4pOiBzdHJpbmcgfCBudWxsIHtcclxuICByZXR1cm4gZm9ybWF0VGltZSh2YWx1ZSwgaXNNaWRuaWdodEVuYWJsZSwgJzonKTtcclxufVxyXG5cclxuLy8gV3JhcHBlciBtZXRob2QgdG8gZm9ybWF0IG1pbnV0ZXMgd2l0aG91dCBzZXBhcmF0b3IgKGUuZy4sIFwiSEhtbVwiKVxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZVdpdGhvdXRTZXBhcmF0b3IodmFsdWU6IG51bWJlciwgaXNNaWRuaWdodEVuYWJsZTogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xyXG4gIHJldHVybiBmb3JtYXRUaW1lKHZhbHVlLCBpc01pZG5pZ2h0RW5hYmxlLCAnJyk7XHJcbn1cclxuXHJcbi8vIENvcmUgbWV0aG9kIGZvciBmb3JtYXR0aW5nIG1pbnV0ZXMgd2l0aCBmbGV4aWJpbGl0eSBpbiBvdXRwdXQgZm9ybWF0XHJcbmZ1bmN0aW9uIGZvcm1hdFRpbWUodmFsdWU6IG51bWJlciwgaXNNaWRuaWdodEVuYWJsZWQ6IGJvb2xlYW4sIHNlcGFyYXRvcjogc3RyaW5nID0gJzonKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgaWYgKGlzTWlkbmlnaHRFbmFibGVkIHx8IHZhbHVlID4gMCkge1xyXG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHZhbHVlIC8gTUlOVVRFU19QRVJfSE9VUikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgbWludXRlcyA9ICh2YWx1ZSAlIE1JTlVURVNfUEVSX0hPVVIpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIHJldHVybiBgJHtob3Vyc30ke3NlcGFyYXRvcn0ke21pbnV0ZXN9YDtcclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuIl19