ng-virtual-list 16.7.2 → 16.7.3

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.
@@ -566,7 +566,7 @@ export class TrackBox extends CacheMap {
566
566
  const { width, height, normalizedItemWidth, normalizedItemHeight, dynamicSize, itemsOnDisplayLength, itemsFromStartToScrollEnd, isVertical, renderItems: renderItemsLength, scrollSize, sizeProperty, snap, snippedPos, startPosition, totalLength, startIndex, typicalItemSize, } = metrics, displayItems = [];
567
567
  if (items.length) {
568
568
  const actualSnippedPosition = snippedPos, isSnappingMethodAdvanced = this.isSnappingMethodAdvanced, boundsSize = isVertical ? height : width, actualEndSnippedPosition = boundsSize;
569
- let pos = startPosition, renderItems = renderItemsLength, stickyItem, nextSticky, stickyItemIndex = -1, stickyItemSize = 0, endStickyItem, nextEndSticky, endStickyItemIndex = -1, endStickyItemSize = 0;
569
+ let pos = startPosition, renderItems = renderItemsLength, stickyItem, nextSticky, stickyItemIndex = -1, stickyItemSize = 0, endStickyItem, nextEndSticky, endStickyItemIndex = -1, endStickyItemSize = 0, count = 1;
570
570
  if (snap) {
571
571
  for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {
572
572
  if (!items[i]) {
@@ -591,6 +591,7 @@ export class TrackBox extends CacheMap {
591
591
  snappedOut: false,
592
592
  dynamic: dynamicSize,
593
593
  isSnappingMethodAdvanced,
594
+ tabIndex: count,
594
595
  zIndex: '1',
595
596
  };
596
597
  const itemData = items[i];
@@ -598,6 +599,7 @@ export class TrackBox extends CacheMap {
598
599
  stickyItemIndex = i;
599
600
  stickyItemSize = size;
600
601
  displayItems.push(stickyItem);
602
+ count++;
601
603
  break;
602
604
  }
603
605
  }
@@ -629,6 +631,7 @@ export class TrackBox extends CacheMap {
629
631
  snappedOut: false,
630
632
  dynamic: dynamicSize,
631
633
  isSnappingMethodAdvanced,
634
+ tabIndex: count,
632
635
  zIndex: '1',
633
636
  };
634
637
  const itemData = items[i];
@@ -636,6 +639,7 @@ export class TrackBox extends CacheMap {
636
639
  endStickyItemIndex = i;
637
640
  endStickyItemSize = size;
638
641
  displayItems.push(endStickyItem);
642
+ count++;
639
643
  break;
640
644
  }
641
645
  }
@@ -667,6 +671,7 @@ export class TrackBox extends CacheMap {
667
671
  snappedOut: false,
668
672
  dynamic: dynamicSize,
669
673
  isSnappingMethodAdvanced,
674
+ tabIndex: count,
670
675
  zIndex: '0',
671
676
  };
672
677
  if (snapped) {
@@ -691,6 +696,7 @@ export class TrackBox extends CacheMap {
691
696
  nextEndSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);
692
697
  }
693
698
  displayItems.push(item);
699
+ count++;
694
700
  }
695
701
  renderItems -= 1;
696
702
  pos += size;
@@ -768,4 +774,4 @@ export class TrackBox extends CacheMap {
768
774
  }
769
775
  }
770
776
  }
771
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tCb3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja0JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsUUFBUSxFQUFRLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFFBQVEsQ0FBQztBQWdFcEQsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUMxQiwrREFBTSxDQUFBO0lBQ04sK0RBQU0sQ0FBQTtJQUNOLCtEQUFNLENBQUE7SUFDTix5RUFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUFTRCxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsRUFDeEMsa0NBQWtDLEdBQUcsRUFBRSxFQUN2QyxpQ0FBaUMsR0FBRyxLQUFLLENBQUM7QUFFOUM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sUUFDVCxTQUFRLFFBQXdGO0lBRXRGLFFBQVEsQ0FBYztJQUV0QixNQUFNLENBQWtEO0lBRWxFLElBQUksS0FBSyxDQUFDLENBQWtEO1FBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVTLGtCQUFrQixDQUE0QztJQUV4RSxJQUFJLGlCQUFpQixDQUFDLENBQTRDO1FBQzlELElB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LGFBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDakYsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN0QixTQUFTO2FBQ1o7WUFDRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVRLE9BQU87UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItaXRlbS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJZCB9IGZyb20gXCIuLi90eXBlcy9pZFwiO1xyXG5pbXBvcnQgeyBDYWNoZU1hcCwgQ01hcCB9IGZyb20gXCIuL2NhY2hlTWFwXCI7XHJcbmltcG9ydCB7IFRyYWNrZXIgfSBmcm9tIFwiLi90cmFja2VyXCI7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IEhFSUdIVF9QUk9QX05BTUUsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSwgWF9QUk9QX05BTUUsIFlfUFJPUF9OQU1FIH0gZnJvbSBcIi4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XHJcbmltcG9ydCB7IGJ1ZmZlckludGVycG9sYXRpb24gfSBmcm9tIFwiLi9idWZmZXItaW50ZXJwb2xhdGlvblwiO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL21vZGVscy9iYXNlLXZpcnR1YWwtbGlzdC1pdGVtLWNvbXBvbmVudFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSA9ICdjaGFuZ2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWV0cmljcyB7XHJcbiAgICBkZWx0YTogbnVtYmVyO1xyXG4gICAgbm9ybWFsaXplZEl0ZW1XaWR0aDogbnVtYmVyO1xyXG4gICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQ6IG51bWJlcjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIGR5bmFtaWNTaXplOiBib29sZWFuO1xyXG4gICAgaXRlbVNpemU6IG51bWJlcjtcclxuICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQ6IG51bWJlcjtcclxuICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kOiBudW1iZXI7XHJcbiAgICBpdGVtc09uRGlzcGxheVdlaWdodDogbnVtYmVyO1xyXG4gICAgaXRlbXNPbkRpc3BsYXlMZW5ndGg6IG51bWJlcjtcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIGxlZnRJdGVtTGVuZ3RoOiBudW1iZXI7XHJcbiAgICBsZWZ0SXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIHJlbmRlckl0ZW1zOiBudW1iZXI7XHJcbiAgICByaWdodEl0ZW1MZW5ndGg6IG51bWJlcjtcclxuICAgIHJpZ2h0SXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIHNjcm9sbFNpemU6IG51bWJlcjtcclxuICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zOiBudW1iZXI7XHJcbiAgICBzaXplUHJvcGVydHk6IHR5cGVvZiBIRUlHSFRfUFJPUF9OQU1FIHwgdHlwZW9mIFdJRFRIX1BST1BfTkFNRTtcclxuICAgIHNuYXA6IGJvb2xlYW47XHJcbiAgICBzbmlwcGVkUG9zOiBudW1iZXI7XHJcbiAgICBzdGFydEluZGV4OiBudW1iZXI7XHJcbiAgICBzdGFydFBvc2l0aW9uOiBudW1iZXI7XHJcbiAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0OiBudW1iZXI7XHJcbiAgICB0b3RhbExlbmd0aDogbnVtYmVyO1xyXG4gICAgdG90YWxTaXplOiBudW1iZXI7XHJcbiAgICB0eXBpY2FsSXRlbVNpemU6IG51bWJlcjtcclxuICAgIGlzRnJvbUl0ZW1JZEZvdW5kOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+IHtcclxuICAgIGJvdW5kczogSVNpemU7XHJcbiAgICBjb2xsZWN0aW9uOiBDO1xyXG4gICAgaXNWZXJ0aWNhbDogYm9vbGVhbjtcclxuICAgIGl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICBidWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICBtYXhCdWZmZXJTaXplOiBudW1iZXI7XHJcbiAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjtcclxuICAgIHNjcm9sbFNpemU6IG51bWJlcjtcclxuICAgIHNuYXA6IGJvb2xlYW47XHJcbiAgICBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuO1xyXG4gICAgZnJvbUl0ZW1JZD86IElkO1xyXG4gICAgcHJldmlvdXNUb3RhbFNpemU6IG51bWJlcjtcclxuICAgIGNydWREZXRlY3RlZDogYm9vbGVhbjtcclxuICAgIGRlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplOyB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHZXRJdGVtUG9zaXRpb25PcHRpb25zPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+XHJcbiAgICBleHRlbmRzIE9taXQ8SVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSwgQz4sICdwcmV2aW91c1RvdGFsU2l6ZScgfCAnY3J1ZERldGVjdGVkJyB8ICdkZWxldGVkSXRlbXNNYXAnPiB7IH1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+XHJcbiAgICBleHRlbmRzIE9taXQ8SVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSwgQz4sICdjb2xsZWN0aW9uJyB8ICdwcmV2aW91c1RvdGFsU2l6ZScgfCAnY3J1ZERldGVjdGVkJyB8ICdkZWxldGVkSXRlbXNNYXAnPiB7IH1cclxuXHJcbmV4cG9ydCB0eXBlIENhY2hlTWFwRXZlbnRzID0gdHlwZW9mIFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRTtcclxuXHJcbmV4cG9ydCB0eXBlIE9uQ2hhbmdlRXZlbnRMaXN0ZW5lciA9ICh2ZXJzaW9uOiBudW1iZXIpID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgdHlwZSBDYWNoZU1hcExpc3RlbmVycyA9IE9uQ2hhbmdlRXZlbnRMaXN0ZW5lcjtcclxuXHJcbmV4cG9ydCBlbnVtIEl0ZW1EaXNwbGF5TWV0aG9kcyB7XHJcbiAgICBDUkVBVEUsXHJcbiAgICBVUERBVEUsXHJcbiAgICBERUxFVEUsXHJcbiAgICBOT1RfQ0hBTkdFRCxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXBkYXRlQ29sbGVjdGlvblJldHVybnMge1xyXG4gICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uO1xyXG4gICAgdG90YWxTaXplOiBudW1iZXI7XHJcbiAgICBkZWx0YTogbnVtYmVyO1xyXG4gICAgY3J1ZERldGVjdGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX0JVRkZFUl9FWFRSRU1VTV9USFJFU0hPTEQgPSAxNSxcclxuICAgIERFRkFVTFRfTUFYX0JVRkZFUl9TRVFVRU5DRV9MRU5HVEggPSAzMCxcclxuICAgIERFRkFVTFRfUkVTRVRfQlVGRkVSX1NJWkVfVElNRU9VVCA9IDEwMDAwO1xyXG5cclxuLyoqXHJcbiAqIEFuIG9iamVjdCB0aGF0IHBlcmZvcm1zIHRyYWNraW5nLCBjYWxjdWxhdGlvbnMgYW5kIGNhY2hpbmcuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvdHJhY2tCb3gudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRyYWNrQm94PEMgZXh0ZW5kcyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50ID0gYW55PlxyXG4gICAgZXh0ZW5kcyBDYWNoZU1hcDxJZCwgSVNpemUgJiB7IG1ldGhvZD86IEl0ZW1EaXNwbGF5TWV0aG9kcyB9LCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnM+IHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RyYWNrZXIhOiBUcmFja2VyPEM+O1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHNldCBpdGVtcyh2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcyA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGRpc3BsYXlDb21wb25lbnRzKHY6IEFycmF5PENvbXBvbmVudFJlZjxDPj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NuYXBlZERpc3BsYXlDb21wb25lbnQ6IENvbXBvbmVudFJlZjxDPiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IHNuYXBlZERpc3BsYXlDb21wb25lbnQodjogQ29tcG9uZW50UmVmPEM+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB0cmFja0J5IHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHNldCB0cmFja2luZ1Byb3BlcnR5TmFtZSh2OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSA9IHRoaXMuX3RyYWNrZXIudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gICAgY29uc3RydWN0b3IodHJhY2tpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lID0gdHJhY2tpbmdQcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIgPSBuZXcgVHJhY2tlcih0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgc2V0KGlkOiBJZCwgYm91bmRzOiBJU2l6ZSk6IENNYXA8SWQsIElTaXplPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGIgPSB0aGlzLl9tYXAuZ2V0KGlkKTtcclxuICAgICAgICAgICAgaWYgKGI/LndpZHRoID09PSBib3VuZHMud2lkdGggJiYgYi5oZWlnaHQgPT09IGJvdW5kcy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl9tYXAuc2V0KGlkLCBib3VuZHMpO1xyXG5cclxuICAgICAgICB0aGlzLmJ1bXBWZXJzaW9uKCk7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c0NvbGxlY3Rpb246IEFycmF5PHsgaWQ6IElkOyB9PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWxldGVkSXRlbXNNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJU2l6ZSB9ID0ge307XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jcnVkRGV0ZWN0ZWQgPSBmYWxzZTtcclxuICAgIGdldCBjcnVkRGV0ZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9jcnVkRGV0ZWN0ZWQ7IH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyZUNoYW5nZUlmTmVlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGFuZ2VzRGV0ZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fdmVyc2lvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJldmlvdXNUb3RhbFNpemUgPSAwO1xyXG5cclxuICAgIHByb3RlY3RlZCBfc2Nyb2xsRGVsdGE6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgc2Nyb2xsRGVsdGEoKSB7IHJldHVybiB0aGlzLl9zY3JvbGxEZWx0YTsgfVxyXG5cclxuICAgIGlzQWRhcHRpdmVCdWZmZXIgPSB0cnVlO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2VxdWVuY2VFeHRyYVRocmVzaG9sZCA9IERFRkFVTFRfQlVGRkVSX0VYVFJFTVVNX1RIUkVTSE9MRDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNlcXVlbmNlTGVuZ3RoID0gREVGQVVMVF9NQVhfQlVGRkVSX1NFUVVFTkNFX0xFTkdUSDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2J1ZmZlclNpemVTZXF1ZW5jZTogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuICAgIGdldCBidWZmZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fYnVmZmVyU2l6ZTsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZGVmYXVsdEJ1ZmZlclNpemU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9tYXhCdWZmZXJTaXplOiBudW1iZXIgPSB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Jlc2V0QnVmZmVyU2l6ZVRpbWVvdXQ6IG51bWJlciA9IERFRkFVTFRfUkVTRVRfQlVGRkVSX1NJWkVfVElNRU9VVDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Jlc2V0QnVmZmVyU2l6ZVRpbWVyOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGxpZmVDaXJjbGUoKSB7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlSWZOZWVkKCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlmZUNpcmNsZURvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FucyB0aGUgY29sbGVjdGlvbiBmb3IgZGVsZXRlZCBpdGVtcyBhbmQgZmx1c2hlcyB0aGUgZGVsZXRlZCBpdGVtIGNhY2hlLlxyXG4gICAgICovXHJcbiAgICByZXNldENvbGxlY3Rpb248SSBleHRlbmRzIHsgaWQ6IElkOyB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGN1cnJlbnRDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCwgaXRlbVNpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChjdXJyZW50Q29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRDb2xsZWN0aW9uICE9PSBudWxsICYmIGN1cnJlbnRDb2xsZWN0aW9uID09PSB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdBdHRlbnRpb24hIFRoZSBjb2xsZWN0aW9uIG11c3QgYmUgaW1tdXRhYmxlLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKHRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiwgY3VycmVudENvbGxlY3Rpb24sIGl0ZW1TaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uID0gY3VycmVudENvbGxlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIGNhY2hlIG9mIGl0ZW1zIGZyb20gdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNhY2hlPEkgZXh0ZW5kcyB7IGlkOiBJZDsgfSwgQyBleHRlbmRzIEFycmF5PEk+PihwcmV2aW91c0NvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLCBjdXJyZW50Q29sbGVjdGlvbjogQyB8IG51bGwgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgaXRlbVNpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGxldCBjcnVkRGV0ZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCFjdXJyZW50Q29sbGVjdGlvbiB8fCBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHByZXZpb3VzQ29sbGVjdGlvbltpXSwgaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5kZWxldGUoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcHJldmlvdXNDb2xsZWN0aW9uIHx8IHByZXZpb3VzQ29sbGVjdGlvbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhZGRlZFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdXJyZW50Q29sbGVjdGlvbltpXSwgaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uRGljdDogeyBbaWQ6IElkXTogSSB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbkRpY3RbaXRlbS5pZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5vdENoYW5nZWRNYXA6IHsgW2lkOiBJZF06IEkgfSA9IHt9LCBkZWxldGVkTWFwOiB7IFtpZDogSWRdOiBJIH0gPSB7fSwgZGVsZXRlZEl0ZW1zTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSVNpemUgfSA9IHt9LCB1cGRhdGVkTWFwOiB7IFtpZDogSWRdOiBJIH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHByZXZpb3VzQ29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHByZXZpb3VzQ29sbGVjdGlvbltpXSwgaWQgPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25EaWN0Lmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBjb2xsZWN0aW9uRGljdFtpZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90Q2hhbmdlZE1hcFtpdGVtLmlkXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgLi4uKHRoaXMuX21hcC5nZXQoaWQpIHx8IHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplIH0pLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5OT1RfQ0hBTkdFRCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTWFwW2l0ZW0uaWRdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldChpZCwgeyAuLi4odGhpcy5fbWFwLmdldChpZCkgfHwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUgfSksIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLlVQREFURSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGRlbGV0ZWRcclxuICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkTWFwW2l0ZW0uaWRdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcFtpXSA9IHRoaXMuX21hcC5nZXQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgIGlmIChpdGVtICYmICFkZWxldGVkTWFwLmhhc093blByb3BlcnR5KGlkKSAmJiAhdXBkYXRlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgIW5vdENoYW5nZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhZGRlZFxyXG4gICAgICAgICAgICAgICAgY3J1ZERldGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY3J1ZERldGVjdGVkID0gY3J1ZERldGVjdGVkO1xyXG4gICAgICAgIHRoaXMuX2RlbGV0ZWRJdGVtc01hcCA9IGRlbGV0ZWRJdGVtc01hcDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIHRoZSBwb3NpdGlvbiBvZiBhIGNvbGxlY3Rpb24gZWxlbWVudCBieSB0aGUgZ2l2ZW4gSWRcclxuICAgICAqL1xyXG4gICAgZ2V0SXRlbVBvc2l0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGlkOiBJZCwgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICBvcHRpb25zOiBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJLCBDPik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3Qgb3B0ID0geyBmcm9tSXRlbUlkOiBpZCwgaXRlbUNvbmZpZ01hcCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCB7IHNjcm9sbFNpemUsIGlzRnJvbUl0ZW1JZEZvdW5kIH0gPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemU6IHRoaXMuX2NydWREZXRlY3RlZCB8fCBvcHQuZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcDogdGhpcy5fZGVsZXRlZEl0ZW1zTWFwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpc0Zyb21JdGVtSWRGb3VuZCA/IHNjcm9sbFNpemUgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGNvbGxlY3Rpb24gb2YgZGlzcGxheSBvYmplY3RzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUNvbGxlY3Rpb248SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSVVwZGF0ZUNvbGxlY3Rpb25SZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgY3J1ZERldGVjdGVkID0gdGhpcy5fY3J1ZERldGVjdGVkLCBkZWxldGVkSXRlbXNNYXAgPSB0aGlzLl9kZWxldGVkSXRlbXNNYXA7XHJcbiAgICAgICAgaWYgKG9wdC5keW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgPSBvcHQuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLl9tYXhCdWZmZXJTaXplID0gb3B0Lm1heEJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbjogaXRlbXMsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVsdGEgKz0gbWV0cmljcy5kZWx0YTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVBZGFwdGl2ZUJ1ZmZlclBhcmFtcyhtZXRyaWNzLCBpdGVtcy5sZW5ndGgpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSA9IG1ldHJpY3MudG90YWxTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl9kZWxldGVkSXRlbXNNYXAgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5fY3J1ZERldGVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChvcHQuZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGlzcGxheUl0ZW1zID0gdGhpcy5nZW5lcmF0ZURpc3BsYXlDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm1ldHJpY3MsIH0pO1xyXG4gICAgICAgIHJldHVybiB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplOiBtZXRyaWNzLnRvdGFsU2l6ZSwgZGVsdGE6IG1ldHJpY3MuZGVsdGEsIGNydWREZXRlY3RlZCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgdGhlIGNsb3Nlc3QgZWxlbWVudCBpbiB0aGUgY29sbGVjdGlvbiBieSBzY3JvbGxTaXplXHJcbiAgICAgKi9cclxuICAgIGdldE5lYXJlc3RJdGVtPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KHNjcm9sbFNpemU6IG51bWJlciwgaXRlbXM6IEMsIGl0ZW1TaXplOiBudW1iZXIsIGlzVmVydGljYWw6IGJvb2xlYW4pOiBJIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50RnJvbVN0YXJ0KHNjcm9sbFNpemUsIGl0ZW1zLCB0aGlzLl9tYXAsIGl0ZW1TaXplLCBpc1ZlcnRpY2FsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzU2Nyb2xsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFkYXB0aXZlQnVmZmVyUGFyYW1zKG1ldHJpY3M6IElNZXRyaWNzLCB0b3RhbEl0ZW1zTGVuZ3RoOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2VDbGVhckJ1ZmZlclNpemVUaW1lcigpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JvbGxTaXplID0gbWV0cmljcy5zY3JvbGxTaXplICsgdGhpcy5fZGVsdGEsIGRlbHRhID0gTWF0aC5hYnModGhpcy5fcHJldmlvdXNTY3JvbGxTaXplIC0gc2Nyb2xsU2l6ZSk7XHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICBjb25zdCBidWZmZXJSYXdTaXplID0gTWF0aC5taW4oTWF0aC5mbG9vcihkZWx0YSAvIG1ldHJpY3MudHlwaWNhbEl0ZW1TaXplKSAqIDUsIHRvdGFsSXRlbXNMZW5ndGgpLFxyXG4gICAgICAgICAgICBtaW5CdWZmZXJTaXplID0gYnVmZmVyUmF3U2l6ZSA8IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID8gdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgOiBidWZmZXJSYXdTaXplLFxyXG4gICAgICAgICAgICBidWZmZXJWYWx1ZSA9IG1pbkJ1ZmZlclNpemUgPiB0aGlzLl9tYXhCdWZmZXJTaXplID8gdGhpcy5fbWF4QnVmZmVyU2l6ZSA6IG1pbkJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuX2J1ZmZlclNpemUgPSBidWZmZXJJbnRlcnBvbGF0aW9uKHRoaXMuX2J1ZmZlclNpemUsIHRoaXMuX2J1ZmZlclNpemVTZXF1ZW5jZSwgYnVmZmVyVmFsdWUsIHtcclxuICAgICAgICAgICAgZXh0cmVtdW1UaHJlc2hvbGQ6IHRoaXMuX2J1ZmZlclNlcXVlbmNlRXh0cmFUaHJlc2hvbGQsXHJcbiAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuX21heEJ1ZmZlclNlcXVlbmNlTGVuZ3RoLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0UmVzZXRCdWZmZXJTaXplVGltZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc3RhcnRSZXNldEJ1ZmZlclNpemVUaW1lcigpIHtcclxuICAgICAgICB0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTaXplID0gdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemU7XHJcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNpemVTZXF1ZW5jZSA9IFtdO1xyXG4gICAgICAgIH0sIHRoaXMuX3Jlc2V0QnVmZmVyU2l6ZVRpbWVvdXQpIGFzIHVua25vd24gYXMgbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0QnVmZmVyU2l6ZVRpbWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgYmFzZWQgb24gdGhlIGdpdmVuIHNjcm9sbFNpemVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEVsZW1lbnRGcm9tU3RhcnQ8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oc2Nyb2xsU2l6ZTogbnVtYmVyLCBjb2xsZWN0aW9uOiBDLCBtYXA6IENNYXA8SWQsIElTaXplPiwgdHlwaWNhbEl0ZW1TaXplOiBudW1iZXIsXHJcbiAgICAgICAgaXNWZXJ0aWNhbDogYm9vbGVhbik6IEkgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FO1xyXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25baV07XHJcbiAgICAgICAgICAgIGxldCBpdGVtU2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGlmIChtYXAuaGFzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBib3VuZHMgPyBib3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzY3JvbGxTaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvZmZzZXQgKz0gaXRlbVNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBlbnRyeSBpbnRvIHRoZSBvdmVyc2Nyb2xsIGFyZWEgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBvdmVyc2Nyb2xsIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50TnVtVG9FbmQ8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaTogbnVtYmVyLCBjb2xsZWN0aW9uOiBDLCBtYXA6IENNYXA8SWQsIElTaXplPiwgdHlwaWNhbEl0ZW1TaXplOiBudW1iZXIsXHJcbiAgICAgICAgc2l6ZTogbnVtYmVyLCBpc1ZlcnRpY2FsOiBib29sZWFuLCBpbmRleE9mZnNldDogbnVtYmVyID0gMCk6IHsgbnVtOiBudW1iZXIsIG9mZnNldDogbnVtYmVyIH0ge1xyXG4gICAgICAgIGNvbnN0IHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FO1xyXG4gICAgICAgIGxldCBvZmZzZXQgPSAwLCBudW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGogPSBjb2xsZWN0aW9uLmxlbmd0aCAtIGluZGV4T2Zmc2V0IC0gMTsgaiA+PSBpOyBqLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25bal07XHJcbiAgICAgICAgICAgIGxldCBpdGVtU2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGlmIChtYXAuaGFzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBib3VuZHMgPyBib3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW06IDAsIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KG9wdGlvbnM6IElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+KTogSU1ldHJpY3Mge1xyXG4gICAgICAgIGNvbnN0IHsgZnJvbUl0ZW1JZCwgYm91bmRzLCBjb2xsZWN0aW9uLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGJ1ZmZlclNpemU6IG1pbkJ1ZmZlclNpemUsIHNjcm9sbFNpemUsIHNuYXAsIGl0ZW1Db25maWdNYXAsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplLCBjcnVkRGV0ZWN0ZWQsIGRlbGV0ZWRJdGVtc01hcCB9ID0gb3B0aW9ucyBhcyBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiAmIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSBNYXRoLm1heChtaW5CdWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplKSxcclxuICAgICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMsIHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICAgICAgICBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLCB0b3RhbExlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCB0eXBpY2FsSXRlbVNpemUgPSBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyB3aWR0aCA6IHR5cGljYWxJdGVtU2l6ZSwgaCA9IGlzVmVydGljYWwgPyB0eXBpY2FsSXRlbVNpemUgOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIG1hcCA9IHRoaXMuX21hcCwgc25hcHNob3QgPSB0aGlzLl9zbmFwc2hvdCwgY2hlY2tPdmVyc2Nyb2xsSXRlbXNMaW1pdCA9IE1hdGguY2VpbChzaXplIC8gdHlwaWNhbEl0ZW1TaXplKSxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyA9IE1hdGguZmxvb3Ioc2Nyb2xsU2l6ZSksIGxlZnRJdGVtc1dlaWdodHM6IEFycmF5PG51bWJlcj4gPSBbXSxcclxuICAgICAgICAgICAgaXNGcm9tSWQgPSBmcm9tSXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBmcm9tSXRlbUlkID09PSAnbnVtYmVyJyAmJiBmcm9tSXRlbUlkID4gLTEpXHJcbiAgICAgICAgICAgICAgICB8fCAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdzdHJpbmcnICYmIGZyb21JdGVtSWQgPiAnLTEnKTtcclxuXHJcbiAgICAgICAgbGV0IGxlZnRJdGVtc09mZnNldCA9IDAsIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmIChlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zY3JvbGxEaXJlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXNlIC0xOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQ6IG51bWJlciA9IC0xLCBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSAwLCBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IC0xLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IDAsIHJpZ2h0SXRlbUxlbmd0aCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCA9IDAsIHJpZ2h0SXRlbXNXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGl0ZW1CeUlkOiBJIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBpdGVtQnlJZFBvczogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgdGFyZ2V0RGlzcGxheUl0ZW1JbmRleDogbnVtYmVyID0gLTEsXHJcbiAgICAgICAgICAgIGlzVGFyZ2V0SW5PdmVyc2Nyb2xsOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBpdGVtQnlJZFBvcyxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gMCxcclxuICAgICAgICAgICAgc3RhcnRJbmRleDogbnVtYmVyLFxyXG4gICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgbGlzdCBpcyBkeW5hbWljIG9yIHRoZXJlIGFyZSBuZXcgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb24sIHRoZW4gaXQgc3dpdGNoZXMgdG8gdGhlIGxvbmcgYWxnb3JpdGhtLlxyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICBsZXQgeSA9IDAsIHN0aWNreUNvbGxlY3Rpb25JdGVtOiBJIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBzdGlja3lDb21wb25lbnRTaXplID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMSwgY29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uW2ldLCBpZCA9IGNvbGxlY3Rpb25JdGVtLmlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRTaXplID0gMCwgY29tcG9uZW50U2l6ZURlbHRhID0gMCwgaXRlbURpc3BsYXlNZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcyA9IEl0ZW1EaXNwbGF5TWV0aG9kcy5OT1RfQ0hBTkdFRDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG1hcC5nZXQoaWQpIHx8IHsgd2lkdGg6IHR5cGljYWxJdGVtU2l6ZSwgaGVpZ2h0OiB0eXBpY2FsSXRlbVNpemUgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplID0gYm91bmRzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbURpc3BsYXlNZXRob2QgPSBib3VuZHM/Lm1ldGhvZCA/PyBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFO1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdEJvdW5kcyA9IHNuYXBzaG90LmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRTbmFwc2hvdFNpemUgPSBjb21wb25lbnRTaXplIC0gKHNuYXBzaG90Qm91bmRzID8gc25hcHNob3RCb3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplRGVsdGEgPSBjb21wb25lbnRTbmFwc2hvdFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmJvdW5kcywgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNpemVEZWx0YSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoaWQsIHsgLi4uYm91bmRzLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5OT1RfQ0hBTkdFRCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZWxldGVkSXRlbXNNYXAuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBkZWxldGVkSXRlbXNNYXBbaV0sIHNpemUgPSBib3VuZHM/LltzaXplUHJvcGVydHldID8/IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHNjcm9sbFNpemUgLSBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKz0gc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdG90YWxTaXplICs9IGNvbXBvbmVudFNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1CeUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9PSBmcm9tSXRlbUlkICYmIGl0ZW1Db25maWdNYXAgJiYgaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lDb2xsZWN0aW9uSXRlbSA9IGNvbGxlY3Rpb25JdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT09IGZyb21JdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnJvbUl0ZW1JZEZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERpc3BsYXlJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreUNvbGxlY3Rpb25JdGVtICYmIGl0ZW1Db25maWdNYXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG51bSB9ID0gdGhpcy5nZXRFbGVtZW50TnVtVG9FbmQoaSwgY29sbGVjdGlvbiwgbWFwLCB0eXBpY2FsSXRlbVNpemUsIHNpemUsIGlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFyZ2V0SW5PdmVyc2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBzaXplIC0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUNvbmZpZ01hcCAmJiAhaXRlbUNvbmZpZ01hcFtjb2xsZWN0aW9uSXRlbS5pZF0gJiYgeSA+PSBzY3JvbGxTaXplICYmIHkgPCBzY3JvbGxTaXplICsgc3RpY2t5Q29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc25hcHBlZFkgPSBzY3JvbGxTaXplIC0gc3RpY2t5Q29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCAtPSAoc25hcHBlZFkgLSB5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBzbmFwcGVkWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgLT0gc3RpY2t5Q29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCAtPSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWQgPSBjb2xsZWN0aW9uSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1CeUlkUG9zID0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodHMucHVzaChjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5IDw9IHNjcm9sbFNpemUgLSBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5wdXNoKGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSBpaTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUJ5SWQgPT09IHVuZGVmaW5lZCB8fCB5IDwgaXRlbUJ5SWRQb3MgKyBzaXplICsgY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgcmlnaHRJdGVtc09mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPD0gc2Nyb2xsU2l6ZSArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBpaTtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoeSA8PSBzY3JvbGxTaXplIC0gY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGl0ZW1EaXNwbGF5TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyArPSBjb21wb25lbnRTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkRFTEVURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKz0gY29tcG9uZW50U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHkgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzVGFyZ2V0SW5PdmVyc2Nyb2xsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IG51bSB9ID0gdGhpcy5nZXRFbGVtZW50TnVtVG9FbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5sZW5ndGggLSAoY2hlY2tPdmVyc2Nyb2xsSXRlbXNMaW1pdCA8IDAgPyAwIDogY29sbGVjdGlvbi5sZW5ndGggLSBjaGVja092ZXJzY3JvbGxJdGVtc0xpbWl0KSxcclxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCwgY29sbGVjdGlvbi5sZW5ndGggLSAoY29sbGVjdGlvbi5sZW5ndGggLSAodGFyZ2V0RGlzcGxheUl0ZW1JbmRleCArIDEpKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLT0gbnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA8PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDw9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzRnJvbUlkID8gaXRlbUJ5SWRQb3MgOiBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5zcGxpY2UoMCwgbGVmdEl0ZW1zV2VpZ2h0cy5sZW5ndGggLSBsZWZ0SXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgKz0gdjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsIGxlZnRJdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgcmlnaHRJdGVtc09mZnNldCA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiByaWdodEl0ZW1zT2Zmc2V0O1xyXG5cclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAvLyBCdWZmZXIgb3B0aW1pemF0aW9uIGRvZXMgbm90IHdvcmsgb24gZmFzdCBsaW5lYXIgYWxnb3JpdGhtXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAoY3J1ZERldGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uW2ldLCBpZCA9IGNvbGxlY3Rpb25JdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRTaXplID0gdHlwaWNhbEl0ZW1TaXplLCBpdGVtRGlzcGxheU1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzID0gSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGlkKSE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EaXNwbGF5TWV0aG9kID0gYm91bmRzPy5tZXRob2QgPz8gSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1EaXNwbGF5TWV0aG9kID09PSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmJvdW5kcywgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVkSXRlbXNNYXAuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gZGVsZXRlZEl0ZW1zTWFwW2ldLCBzaXplID0gYm91bmRzPy5bc2l6ZVByb3BlcnR5XSA/PyB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5IDwgc2Nyb2xsU2l6ZSAtIHNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKz0gc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCBzY3JvbGxTaXplIC0gY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGl0ZW1EaXNwbGF5TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5ERUxFVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgeSArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSBNYXRoLmZsb29yKHNjcm9sbFNpemUgLyB0eXBpY2FsSXRlbVNpemUpO1xyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IE1hdGguY2VpbCgoc2Nyb2xsU2l6ZSArIHNpemUpIC8gdHlwaWNhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLCBidWZmZXJTaXplKTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyBidWZmZXJTaXplID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IGJ1ZmZlclNpemU7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCA9IGxlZnRJdGVtTGVuZ3RoICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ID0gcmlnaHRJdGVtTGVuZ3RoICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgPSBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRvdGFsTGVuZ3RoICogdHlwaWNhbEl0ZW1TaXplO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgayA9IHRvdGFsU2l6ZSAhPT0gMCA/IHByZXZpb3VzVG90YWxTaXplIC8gdG90YWxTaXplIDogMDtcclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAtIGxlZnRJdGVtTGVuZ3RoLCB0b3RhbExlbmd0aCA+IDAgPyB0b3RhbExlbmd0aCAtIDEgOiAwKTtcclxuXHJcbiAgICAgICAgY29uc3QgaXRlbXNPbkRpc3BsYXlXZWlnaHQgPSB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0IC0gbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIC0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxlZnRIaWRkZW5JdGVtc1dlaWdodCAtIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgcmVuZGVySXRlbXMgPSBpdGVtc09uRGlzcGxheUxlbmd0aCArIGxlZnRJdGVtTGVuZ3RoICsgcmlnaHRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICBkZWx0YSA9IGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKyBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyAtIGxlZnRTaXplT2ZEZWxldGVkSXRlbXM7XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3M6IElNZXRyaWNzID0ge1xyXG4gICAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1XaWR0aDogdyxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQ6IGgsXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5V2VpZ2h0LFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtcyxcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyxcclxuICAgICAgICAgICAgc2l6ZVByb3BlcnR5LFxyXG4gICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICBzbmlwcGVkUG9zLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4LFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0LFxyXG4gICAgICAgICAgICB0b3RhbExlbmd0aCxcclxuICAgICAgICAgICAgdG90YWxTaXplLFxyXG4gICAgICAgICAgICB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgICAgIGlzRnJvbUl0ZW1JZEZvdW5kLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBtZXRyaWNzO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRGVsdGFEaXJlY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhclNjcm9sbERpcmVjdGlvbkNhY2hlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEZWx0YShjbGVhckRpcmVjdGlvbkRldGVjdG9yID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZWx0YSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChjbGVhckRpcmVjdGlvbkRldGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTY3JvbGxEaXJlY3Rpb25DYWNoZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpdGVtczogQywgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICBtZXRyaWNzOiBJTWV0cmljcyk6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24ge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1XaWR0aCxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgcmVuZGVySXRlbXM6IHJlbmRlckl0ZW1zTGVuZ3RoLFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgIHNuaXBwZWRQb3MsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgIHRvdGFsTGVuZ3RoLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4LFxyXG4gICAgICAgICAgICB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgfSA9IG1ldHJpY3MsXHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0dWFsU25pcHBlZFBvc2l0aW9uID0gc25pcHBlZFBvcywgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdGhpcy5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICBib3VuZHNTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLCBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gPSBib3VuZHNTaXplO1xyXG4gICAgICAgICAgICBsZXQgcG9zID0gc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIHJlbmRlckl0ZW1zID0gcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBzdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0U3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBzdGlja3lJdGVtSW5kZXggPSAtMSxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1TaXplID0gMCwgZW5kU3RpY2t5SXRlbTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgbmV4dEVuZFN0aWNreTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW1JbmRleCA9IC0xLCBlbmRTdGlja3lJdGVtU2l6ZSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoc25hcCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPiAwID8gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA6IDAsIHRvdGFsTGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtc1tpXS5pZCwgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLCBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplID8gdGhpcy5nZXQoaWQpPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IGkgJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpc1ZlcnRpY2FsID8gMCA6IGFjdHVhbFNuaXBwZWRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IGlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkT3V0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goc3RpY2t5SXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kICsgaXRlbXNPbkRpc3BsYXlMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWluKHN0YXJ0SW5kZXgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApLCBsID0gdG90YWxMZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1zW2ldLmlkLCBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZHluYW1pY1NpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXQoaWQpPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSBpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSwgaCA9IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsIG1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyAwIDogYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gaCA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogIWlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICcxJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbSA9IHsgaW5kZXg6IGksIGlkLCBtZWFzdXJlcywgZGF0YTogaXRlbURhdGEsIGNvbmZpZyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtU2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChlbmRTdGlja3lJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaSA9IHN0YXJ0SW5kZXg7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAocmVuZGVySXRlbXMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+PSB0b3RhbExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbXNbaV0uaWQsIHNpemUgPSBkeW5hbWljU2l6ZSA/IHRoaXMuZ2V0KGlkKT8uW3NpemVQcm9wZXJ0eV0gfHwgdHlwaWNhbEl0ZW1TaXplIDogdHlwaWNhbEl0ZW1TaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpZCAhPT0gc3RpY2t5SXRlbT8uaWQgJiYgaWQgIT09IGVuZFN0aWNreUl0ZW0/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSBpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkID0gc25hcCAmJiAoc3RpY2t5ID09PSAxICYmIHBvcyA8PSBzY3JvbGxTaXplIHx8IHN0aWNreSA9PT0gMiAmJiBwb3MgPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBzaXplKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpc1ZlcnRpY2FsID8gc3RpY2t5ID09PSAxID8gMCA6IGJvdW5kc1NpemUgLSBzaXplIDogcG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaXNWZXJ0aWNhbCA/IHBvcyA6IHN0aWNreSA9PT0gMiA/IGJvdW5kc1NpemUgLSBzaXplIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpc1ZlcnRpY2FsID8gbm9ybWFsaXplZEl0ZW1XaWR0aCA6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5OiBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkT3V0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzbmFwcGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy56SW5kZXggPSAnMic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtID0geyBpbmRleDogaSwgaWQsIG1lYXN1cmVzLCBkYXRhOiBpdGVtRGF0YSwgY29uZmlnIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0U3RpY2t5ICYmIHN0aWNreUl0ZW1JbmRleCA8IGkgJiYgc3RpY2t5ID09PSAxICYmIChwb3MgPD0gc2Nyb2xsU2l6ZSArIHNpemUgKyBzdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy54ID0gaXNWZXJ0aWNhbCA/IDAgOiBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnkgPSBpc1ZlcnRpY2FsID8gc25hcHBlZCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IHBvcyA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gc25hcHBlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IGlzVmVydGljYWwgPyAoaXRlbS5tZWFzdXJlcy55IC0gc2Nyb2xsU2l6ZSkgOiAoaXRlbS5tZWFzdXJlcy54IC0gc2Nyb2xsU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnpJbmRleCA9ICczJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFuZXh0RW5kU3RpY2t5ICYmIGVuZFN0aWNreUl0ZW1JbmRleCA+IGkgJiYgc3RpY2t5ID09PSAyICYmIChwb3MgPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBzaXplIC0gZW5kU3RpY2t5SXRlbVNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueCA9IGlzVmVydGljYWwgPyAwIDogc25hcHBlZCA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHNpemUgOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcyA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5LmNvbmZpZy56SW5kZXggPSAnMyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IChpdGVtLm1lYXN1cmVzLnkgLSBzY3JvbGxTaXplKSA6IChpdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlckl0ZW1zIC09IDE7XHJcbiAgICAgICAgICAgICAgICBwb3MgKz0gc2l6ZTtcclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYXhpcyA9IGlzVmVydGljYWwgPyBZX1BST1BfTkFNRSA6IFhfUFJPUF9OQU1FO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5leHRTdGlja3kgJiYgc3RpY2t5SXRlbSAmJiBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIDw9IHNjcm9sbFNpemUgKyBzdGlja3lJdGVtU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPiBzY3JvbGxTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gLSBzdGlja3lJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkID0gbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnN0aWNreSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IGlzVmVydGljYWwgPyBzdGlja3lJdGVtLm1lYXN1cmVzLnkgLSBzY3JvbGxTaXplIDogc3RpY2t5SXRlbS5tZWFzdXJlcy54IC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IGlzVmVydGljYWwgPyBuZXh0U3RpY2t5Lm1lYXN1cmVzLnkgLSBzY3JvbGxTaXplIDogbmV4dFN0aWNreS5tZWFzdXJlcy54IC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5leHRFbmRTdGlja3kgJiYgZW5kU3RpY2t5SXRlbSAmJiBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdID49IHNjcm9sbFNpemUgKyBib3VuZHNTaXplIC0gZW5kU3RpY2t5SXRlbVNpemUgLSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdIDwgc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdICsgbmV4dEVuZFN0aWNreS5tZWFzdXJlc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0RW5kU3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMjtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IG5leHRFbmRTdGlja3kubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaXNwbGF5SXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB0cmFja2luZyBieSBwcm9wTmFtZVxyXG4gICAgICovXHJcbiAgICB0cmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2l0ZW1zIHx8ICF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFja2VyLnRyYWNrKHRoaXMuX2l0ZW1zLCB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cywgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCwgdGhpcy5zY3JvbGxEaXJlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQodjogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci5kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkID0gdjtcclxuICAgIH1cclxuXHJcbiAgICB1bnRyYWNrQ29tcG9uZW50QnlJZFByb3BlcnR5KGNvbXBvbmVudD86IEMgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLnVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNhY2hlRWxlbWVudHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50c1tpXSwgaXRlbUlkID0gY29tcG9uZW50Lmluc3RhbmNlLml0ZW1JZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSBjb21wb25lbnQuaW5zdGFuY2UuZ2V0Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0KGl0ZW1JZCwgYm91bmRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgZGlzcG9zZSgpIHtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90cmFja2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
777
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tCb3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja0JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsUUFBUSxFQUFRLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFFBQVEsQ0FBQztBQWdFcEQsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUMxQiwrREFBTSxDQUFBO0lBQ04sK0RBQU0sQ0FBQTtJQUNOLCtEQUFNLENBQUE7SUFDTix5RUFBVyxDQUFBO0FBQ2YsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUFTRCxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsRUFDeEMsa0NBQWtDLEdBQUcsRUFBRSxFQUN2QyxpQ0FBaUMsR0FBRyxLQUFLLENBQUM7QUFFOUM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sUUFDVCxTQUFRLFFBQXdGO0lBRXRGLFFBQVEsQ0FBYztJQUV0QixNQUFNLENBQWtEO0lBRWxFLElBQUksS0FBSyxDQUFDLENBQWtEO1FBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVTLGtCQUFrQixDQUE0QztJQUV4RSxJQUFJLGlCQUFpQixDQUFDLENBQTRDO1FBQzlELElB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QUFhLENBQUMsRUFBTTtRQUNoQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRVMsYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNqRixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLFNBQVM7YUFDWjtZQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBRVEsT0FBTztRQUNaLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVoQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgfSBmcm9tIFwiLi4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfSBmcm9tIFwiLi4vbW9kZWxzL3JlbmRlci1pdGVtLm1vZGVsXCI7XHJcbmltcG9ydCB7IElkIH0gZnJvbSBcIi4uL3R5cGVzL2lkXCI7XHJcbmltcG9ydCB7IENhY2hlTWFwLCBDTWFwIH0gZnJvbSBcIi4vY2FjaGVNYXBcIjtcclxuaW1wb3J0IHsgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuaW1wb3J0IHsgSVNpemUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgSEVJR0hUX1BST1BfTkFNRSwgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSwgV0lEVEhfUFJPUF9OQU1FLCBYX1BST1BfTkFNRSwgWV9QUk9QX05BTUUgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgYnVmZmVySW50ZXJwb2xhdGlvbiB9IGZyb20gXCIuL2J1ZmZlci1pbnRlcnBvbGF0aW9uXCI7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgY29uc3QgVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FID0gJ2NoYW5nZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNZXRyaWNzIHtcclxuICAgIGRlbHRhOiBudW1iZXI7XHJcbiAgICBub3JtYWxpemVkSXRlbVdpZHRoOiBudW1iZXI7XHJcbiAgICBub3JtYWxpemVkSXRlbUhlaWdodDogbnVtYmVyO1xyXG4gICAgd2lkdGg6IG51bWJlcjtcclxuICAgIGhlaWdodDogbnVtYmVyO1xyXG4gICAgZHluYW1pY1NpemU6IGJvb2xlYW47XHJcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZDogbnVtYmVyO1xyXG4gICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQ6IG51bWJlcjtcclxuICAgIGl0ZW1zT25EaXNwbGF5V2VpZ2h0OiBudW1iZXI7XHJcbiAgICBpdGVtc09uRGlzcGxheUxlbmd0aDogbnVtYmVyO1xyXG4gICAgaXNWZXJ0aWNhbDogYm9vbGVhbjtcclxuICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgbGVmdEl0ZW1MZW5ndGg6IG51bWJlcjtcclxuICAgIGxlZnRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgcmVuZGVySXRlbXM6IG51bWJlcjtcclxuICAgIHJpZ2h0SXRlbUxlbmd0aDogbnVtYmVyO1xyXG4gICAgcmlnaHRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xyXG4gICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IG51bWJlcjtcclxuICAgIHNpemVQcm9wZXJ0eTogdHlwZW9mIEhFSUdIVF9QUk9QX05BTUUgfCB0eXBlb2YgV0lEVEhfUFJPUF9OQU1FO1xyXG4gICAgc25hcDogYm9vbGVhbjtcclxuICAgIHNuaXBwZWRQb3M6IG51bWJlcjtcclxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcclxuICAgIHN0YXJ0UG9zaXRpb246IG51bWJlcjtcclxuICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IG51bWJlcjtcclxuICAgIHRvdGFsTGVuZ3RoOiBudW1iZXI7XHJcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcclxuICAgIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgaXNGcm9tSXRlbUlkRm91bmQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ge1xyXG4gICAgYm91bmRzOiBJU2l6ZTtcclxuICAgIGNvbGxlY3Rpb246IEM7XHJcbiAgICBpc1ZlcnRpY2FsOiBib29sZWFuO1xyXG4gICAgaXRlbVNpemU6IG51bWJlcjtcclxuICAgIGJ1ZmZlclNpemU6IG51bWJlcjtcclxuICAgIG1heEJ1ZmZlclNpemU6IG51bWJlcjtcclxuICAgIGR5bmFtaWNTaXplOiBib29sZWFuO1xyXG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xyXG4gICAgc25hcDogYm9vbGVhbjtcclxuICAgIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IGJvb2xlYW47XHJcbiAgICBmcm9tSXRlbUlkPzogSWQ7XHJcbiAgICBwcmV2aW91c1RvdGFsU2l6ZTogbnVtYmVyO1xyXG4gICAgY3J1ZERldGVjdGVkOiBib29sZWFuO1xyXG4gICAgZGVsZXRlZEl0ZW1zTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSVNpemU7IH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj5cclxuICAgIGV4dGVuZHMgT21pdDxJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiwgJ3ByZXZpb3VzVG90YWxTaXplJyB8ICdjcnVkRGV0ZWN0ZWQnIHwgJ2RlbGV0ZWRJdGVtc01hcCc+IHsgfVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj5cclxuICAgIGV4dGVuZHMgT21pdDxJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiwgJ2NvbGxlY3Rpb24nIHwgJ3ByZXZpb3VzVG90YWxTaXplJyB8ICdjcnVkRGV0ZWN0ZWQnIHwgJ2RlbGV0ZWRJdGVtc01hcCc+IHsgfVxyXG5cclxuZXhwb3J0IHR5cGUgQ2FjaGVNYXBFdmVudHMgPSB0eXBlb2YgVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FO1xyXG5cclxuZXhwb3J0IHR5cGUgT25DaGFuZ2VFdmVudExpc3RlbmVyID0gKHZlcnNpb246IG51bWJlcikgPT4gdm9pZDtcclxuXHJcbmV4cG9ydCB0eXBlIENhY2hlTWFwTGlzdGVuZXJzID0gT25DaGFuZ2VFdmVudExpc3RlbmVyO1xyXG5cclxuZXhwb3J0IGVudW0gSXRlbURpc3BsYXlNZXRob2RzIHtcclxuICAgIENSRUFURSxcclxuICAgIFVQREFURSxcclxuICAgIERFTEVURSxcclxuICAgIE5PVF9DSEFOR0VELFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyB7XHJcbiAgICBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb247XHJcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcclxuICAgIGRlbHRhOiBudW1iZXI7XHJcbiAgICBjcnVkRGV0ZWN0ZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfQlVGRkVSX0VYVFJFTVVNX1RIUkVTSE9MRCA9IDE1LFxyXG4gICAgREVGQVVMVF9NQVhfQlVGRkVSX1NFUVVFTkNFX0xFTkdUSCA9IDMwLFxyXG4gICAgREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUID0gMTAwMDA7XHJcblxyXG4vKipcclxuICogQW4gb2JqZWN0IHRoYXQgcGVyZm9ybXMgdHJhY2tpbmcsIGNhbGN1bGF0aW9ucyBhbmQgY2FjaGluZy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja0JveC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVHJhY2tCb3g8QyBleHRlbmRzIEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgPSBhbnk+XHJcbiAgICBleHRlbmRzIENhY2hlTWFwPElkLCBJU2l6ZSAmIHsgbWV0aG9kPzogSXRlbURpc3BsYXlNZXRob2RzIH0sIENhY2hlTWFwRXZlbnRzLCBDYWNoZU1hcExpc3RlbmVycz4ge1xyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tlciE6IFRyYWNrZXI8Qz47XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGl0ZW1zKHY6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8Qz4+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgZGlzcGxheUNvbXBvbmVudHModjogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc25hcGVkRGlzcGxheUNvbXBvbmVudDogQ29tcG9uZW50UmVmPEM+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgc25hcGVkRGlzcGxheUNvbXBvbmVudCh2OiBDb21wb25lbnRSZWY8Qz4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzZXQgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHY6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHRyYWNrQnkgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgc2V0IHRyYWNraW5nUHJvcGVydHlOYW1lKHY6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lID0gdGhpcy5fdHJhY2tlci50cmFja2luZ1Byb3BlcnR5TmFtZSA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBib3VuZHM6IElTaXplKTogQ01hcDxJZCwgSVNpemU+IHtcclxuICAgICAgICBpZiAodGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29uc3QgYiA9IHRoaXMuX21hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoYj8ud2lkdGggPT09IGJvdW5kcy53aWR0aCAmJiBiLmhlaWdodCA9PT0gYm91bmRzLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuX21hcC5zZXQoaWQsIGJvdW5kcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzQ29sbGVjdGlvbjogQXJyYXk8eyBpZDogSWQ7IH0+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG4gICAgZ2V0IGNydWREZXRlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2NydWREZXRlY3RlZDsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlSWZOZWVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl92ZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1RvdGFsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zY3JvbGxEZWx0YTogbnVtYmVyID0gMDtcclxuICAgIGdldCBzY3JvbGxEZWx0YSgpIHsgcmV0dXJuIHRoaXMuX3Njcm9sbERlbHRhOyB9XHJcblxyXG4gICAgaXNBZGFwdGl2ZUJ1ZmZlciA9IHRydWU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkID0gREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xEO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGggPSBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RIO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZVNlcXVlbmNlOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl9idWZmZXJTaXplOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0QnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNpemU6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbGlmZUNpcmNsZSgpIHtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VJZk5lZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlQ2lyY2xlRG8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBjb2xsZWN0aW9uIGZvciBkZWxldGVkIGl0ZW1zIGFuZCBmbHVzaGVzIHRoZSBkZWxldGVkIGl0ZW0gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sbGVjdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQ7IH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLCBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb2xsZWN0aW9uICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENvbGxlY3Rpb24gIT09IG51bGwgJiYgY3VycmVudENvbGxlY3Rpb24gPT09IHRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0F0dGVudGlvbiEgVGhlIGNvbGxlY3Rpb24gbXVzdCBiZSBpbW11dGFibGUuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUodGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uLCBjdXJyZW50Q29sbGVjdGlvbiwgaXRlbVNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24gPSBjdXJyZW50Q29sbGVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgY2FjaGUgb2YgaXRlbXMgZnJvbSB0aGUgbGlzdFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQ2FjaGU8SSBleHRlbmRzIHsgaWQ6IElkOyB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KHByZXZpb3VzQ29sbGVjdGlvbjogQyB8IG51bGwgfCB1bmRlZmluZWQsIGN1cnJlbnRDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICAgICAgICBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGNydWREZXRlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnRDb2xsZWN0aW9uIHx8IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHByZXZpb3VzQ29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZERldGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c0NvbGxlY3Rpb24gfHwgcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIGFkZGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldChpZCwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUsIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25EaWN0OiB7IFtpZDogSWRdOiBJIH0gPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3VycmVudENvbGxlY3Rpb25baV07XHJcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGljdFtpdGVtLmlkXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgbm90Q2hhbmdlZE1hcDogeyBbaWQ6IElkXTogSSB9ID0ge30sIGRlbGV0ZWRNYXA6IHsgW2lkOiBJZF06IEkgfSA9IHt9LCBkZWxldGVkSXRlbXNNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJU2l6ZSB9ID0ge30sIHVwZGF0ZWRNYXA6IHsgW2lkOiBJZF06IEkgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbkRpY3QuaGFzT3duUHJvcGVydHkoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT09IGNvbGxlY3Rpb25EaWN0W2lkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgY2hhbmdlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RDaGFuZ2VkTWFwW2l0ZW0uaWRdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldChpZCwgeyAuLi4odGhpcy5fbWFwLmdldChpZCkgfHwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUgfSksIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNYXBbaXRlbS5pZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IC4uLih0aGlzLl9tYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSB9KSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgY3J1ZERldGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWRNYXBbaXRlbS5pZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwW2ldID0gdGhpcy5fbWFwLmdldChpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5kZWxldGUoaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3VycmVudENvbGxlY3Rpb25baV0sIGlkID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgIWRlbGV0ZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpICYmICF1cGRhdGVkTWFwLmhhc093blByb3BlcnR5KGlkKSAmJiAhbm90Q2hhbmdlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFkZGVkXHJcbiAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldChpZCwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUsIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jcnVkRGV0ZWN0ZWQgPSBjcnVkRGV0ZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZEl0ZW1zTWFwID0gZGVsZXRlZEl0ZW1zTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgdGhlIHBvc2l0aW9uIG9mIGEgY29sbGVjdGlvbiBlbGVtZW50IGJ5IHRoZSBnaXZlbiBJZFxyXG4gICAgICovXHJcbiAgICBnZXRJdGVtUG9zaXRpb248SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaWQ6IElkLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG9wdGlvbnM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPEksIEM+KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGZyb21JdGVtSWQ6IGlkLCBpdGVtQ29uZmlnTWFwLCAuLi5vcHRpb25zIH07XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgPSBvcHQuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLl9tYXhCdWZmZXJTaXplID0gb3B0Lm1heEJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsU2l6ZSwgaXNGcm9tSXRlbUlkRm91bmQgfSA9IHRoaXMucmVjYWxjdWxhdGVNZXRyaWNzKHtcclxuICAgICAgICAgICAgLi4ub3B0LFxyXG4gICAgICAgICAgICBkeW5hbWljU2l6ZTogdGhpcy5fY3J1ZERldGVjdGVkIHx8IG9wdC5keW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgcHJldmlvdXNUb3RhbFNpemU6IHRoaXMuX3ByZXZpb3VzVG90YWxTaXplLFxyXG4gICAgICAgICAgICBjcnVkRGV0ZWN0ZWQ6IHRoaXMuX2NydWREZXRlY3RlZCxcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwOiB0aGlzLl9kZWxldGVkSXRlbXNNYXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlzRnJvbUl0ZW1JZEZvdW5kID8gc2Nyb2xsU2l6ZSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ29sbGVjdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpdGVtczogQywgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICBvcHRpb25zOiBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SSwgQz4pOiBJVXBkYXRlQ29sbGVjdGlvblJldHVybnMge1xyXG4gICAgICAgIGNvbnN0IG9wdCA9IHsgaXRlbUNvbmZpZ01hcCwgLi4ub3B0aW9ucyB9LCBjcnVkRGV0ZWN0ZWQgPSB0aGlzLl9jcnVkRGV0ZWN0ZWQsIGRlbGV0ZWRJdGVtc01hcCA9IHRoaXMuX2RlbGV0ZWRJdGVtc01hcDtcclxuICAgICAgICBpZiAob3B0LmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVFbGVtZW50cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA9IG9wdC5idWZmZXJTaXplO1xyXG4gICAgICAgIHRoaXMuX21heEJ1ZmZlclNpemUgPSBvcHQubWF4QnVmZmVyU2l6ZTtcclxuXHJcbiAgICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMucmVjYWxjdWxhdGVNZXRyaWNzKHtcclxuICAgICAgICAgICAgLi4ub3B0LFxyXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBpdGVtcyxcclxuICAgICAgICAgICAgcHJldmlvdXNUb3RhbFNpemU6IHRoaXMuX3ByZXZpb3VzVG90YWxTaXplLFxyXG4gICAgICAgICAgICBjcnVkRGV0ZWN0ZWQ6IHRoaXMuX2NydWREZXRlY3RlZCxcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9kZWx0YSArPSBtZXRyaWNzLmRlbHRhO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUFkYXB0aXZlQnVmZmVyUGFyYW1zKG1ldHJpY3MsIGl0ZW1zLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzVG90YWxTaXplID0gbWV0cmljcy50b3RhbFNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlbGV0ZWRJdGVtc01hcCA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLl9jcnVkRGV0ZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKG9wdC5keW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkaXNwbGF5SXRlbXMgPSB0aGlzLmdlbmVyYXRlRGlzcGxheUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIHsgLi4ubWV0cmljcywgfSk7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IG1ldHJpY3MudG90YWxTaXplLCBkZWx0YTogbWV0cmljcy5kZWx0YSwgY3J1ZERldGVjdGVkIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgY2xvc2VzdCBlbGVtZW50IGluIHRoZSBjb2xsZWN0aW9uIGJ5IHNjcm9sbFNpemVcclxuICAgICAqL1xyXG4gICAgZ2V0TmVhcmVzdEl0ZW08SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oc2Nyb2xsU2l6ZTogbnVtYmVyLCBpdGVtczogQywgaXRlbVNpemU6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbik6IEkgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRGcm9tU3RhcnQoc2Nyb2xsU2l6ZSwgaXRlbXMsIHRoaXMuX21hcCwgaXRlbVNpemUsIGlzVmVydGljYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJldmlvdXNTY3JvbGxTaXplID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXMobWV0cmljczogSU1ldHJpY3MsIHRvdGFsSXRlbXNMZW5ndGg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSBtZXRyaWNzLnNjcm9sbFNpemUgKyB0aGlzLl9kZWx0YSwgZGVsdGEgPSBNYXRoLmFicyh0aGlzLl9wcmV2aW91c1Njcm9sbFNpemUgLSBzY3JvbGxTaXplKTtcclxuICAgICAgICB0aGlzLl9wcmV2aW91c1Njcm9sbFNpemUgPSBzY3JvbGxTaXplO1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlclJhd1NpemUgPSBNYXRoLm1pbihNYXRoLmZsb29yKGRlbHRhIC8gbWV0cmljcy50eXBpY2FsSXRlbVNpemUpICogNSwgdG90YWxJdGVtc0xlbmd0aCksXHJcbiAgICAgICAgICAgIG1pbkJ1ZmZlclNpemUgPSBidWZmZXJSYXdTaXplIDwgdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgPyB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA6IGJ1ZmZlclJhd1NpemUsXHJcbiAgICAgICAgICAgIGJ1ZmZlclZhbHVlID0gbWluQnVmZmVyU2l6ZSA+IHRoaXMuX21heEJ1ZmZlclNpemUgPyB0aGlzLl9tYXhCdWZmZXJTaXplIDogbWluQnVmZmVyU2l6ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZSA9IGJ1ZmZlckludGVycG9sYXRpb24odGhpcy5fYnVmZmVyU2l6ZSwgdGhpcy5fYnVmZmVyU2l6ZVNlcXVlbmNlLCBidWZmZXJWYWx1ZSwge1xyXG4gICAgICAgICAgICBleHRyZW11bVRocmVzaG9sZDogdGhpcy5fYnVmZmVyU2VxdWVuY2VFeHRyYVRocmVzaG9sZCxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5fbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGgsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRSZXNldEJ1ZmZlclNpemVUaW1lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzdGFydFJlc2V0QnVmZmVyU2l6ZVRpbWVyKCkge1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0QnVmZmVyU2l6ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNpemUgPSB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZVNlcXVlbmNlID0gW107XHJcbiAgICAgICAgfSwgdGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZW91dCkgYXMgdW5rbm93biBhcyBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGRpc3Bvc2VDbGVhckJ1ZmZlclNpemVUaW1lcigpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gc2Nyb2xsU2l6ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0RWxlbWVudEZyb21TdGFydDxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihzY3JvbGxTaXplOiBudW1iZXIsIGNvbGxlY3Rpb246IEMsIG1hcDogQ01hcDxJZCwgSVNpemU+LCB0eXBpY2FsSXRlbVNpemU6IG51bWJlcixcclxuICAgICAgICBpc1ZlcnRpY2FsOiBib29sZWFuKTogSSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY29sbGVjdGlvbltpXTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1TaXplID0gMDtcclxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoaXRlbS5pZCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG1hcC5nZXQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IGJvdW5kcyA/IGJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9mZnNldCA+IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGVudHJ5IGludG8gdGhlIG92ZXJzY3JvbGwgYXJlYSBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG92ZXJzY3JvbGwgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEVsZW1lbnROdW1Ub0VuZDxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpOiBudW1iZXIsIGNvbGxlY3Rpb246IEMsIG1hcDogQ01hcDxJZCwgSVNpemU+LCB0eXBpY2FsSXRlbVNpemU6IG51bWJlcixcclxuICAgICAgICBzaXplOiBudW1iZXIsIGlzVmVydGljYWw6IGJvb2xlYW4sIGluZGV4T2Zmc2V0OiBudW1iZXIgPSAwKTogeyBudW06IG51bWJlciwgb2Zmc2V0OiBudW1iZXIgfSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gaW5kZXhPZmZzZXQgLSAxOyBqID49IGk7IGotLSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY29sbGVjdGlvbltqXTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1TaXplID0gMDtcclxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoaXRlbS5pZCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG1hcC5nZXQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IGJvdW5kcyA/IGJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2Zmc2V0ICs9IGl0ZW1TaXplO1xyXG4gICAgICAgICAgICBudW0rKztcclxuICAgICAgICAgICAgaWYgKG9mZnNldCA+IHNpemUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG51bTogMCwgb2Zmc2V0IH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgbnVtLCBvZmZzZXQgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgbGlzdCBtZXRyaWNzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCByZWNhbGN1bGF0ZU1ldHJpY3M8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ob3B0aW9uczogSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSwgQz4pOiBJTWV0cmljcyB7XHJcbiAgICAgICAgY29uc3QgeyBmcm9tSXRlbUlkLCBib3VuZHMsIGNvbGxlY3Rpb24sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyU2l6ZTogbWluQnVmZmVyU2l6ZSwgc2Nyb2xsU2l6ZSwgc25hcCwgaXRlbUNvbmZpZ01hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgICAgcHJldmlvdXNUb3RhbFNpemUsIGNydWREZXRlY3RlZCwgZGVsZXRlZEl0ZW1zTWFwIH0gPSBvcHRpb25zIGFzIElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+ICYge1xyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9IE1hdGgubWF4KG1pbkJ1ZmZlclNpemUsIHRoaXMuX2J1ZmZlclNpemUpLFxyXG4gICAgICAgICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcywgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsXHJcbiAgICAgICAgICAgIHNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsIHRvdGFsTGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGgsIHR5cGljYWxJdGVtU2l6ZSA9IGl0ZW1TaXplLFxyXG4gICAgICAgICAgICB3ID0gaXNWZXJ0aWNhbCA/IHdpZHRoIDogdHlwaWNhbEl0ZW1TaXplLCBoID0gaXNWZXJ0aWNhbCA/IHR5cGljYWxJdGVtU2l6ZSA6IGhlaWdodCxcclxuICAgICAgICAgICAgbWFwID0gdGhpcy5fbWFwLCBzbmFwc2hvdCA9IHRoaXMuX3NuYXBzaG90LCBjaGVja092ZXJzY3JvbGxJdGVtc0xpbWl0ID0gTWF0aC5jZWlsKHNpemUgLyB0eXBpY2FsSXRlbVNpemUpLFxyXG4gICAgICAgICAgICBzbmlwcGVkUG9zID0gTWF0aC5mbG9vcihzY3JvbGxTaXplKSwgbGVmdEl0ZW1zV2VpZ2h0czogQXJyYXk8bnVtYmVyPiA9IFtdLFxyXG4gICAgICAgICAgICBpc0Zyb21JZCA9IGZyb21JdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdudW1iZXInICYmIGZyb21JdGVtSWQgPiAtMSlcclxuICAgICAgICAgICAgICAgIHx8ICh0eXBlb2YgZnJvbUl0ZW1JZCA9PT0gJ3N0cmluZycgJiYgZnJvbUl0ZW1JZCA+ICctMScpO1xyXG5cclxuICAgICAgICBsZXQgbGVmdEl0ZW1zT2Zmc2V0ID0gMCwgcmlnaHRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgaWYgKGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24pIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNjcm9sbERpcmVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgLTE6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGVmdEl0ZW1zT2Zmc2V0ID0gcmlnaHRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZDogbnVtYmVyID0gLTEsIGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IDAsIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gLTEsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gMCwgcmlnaHRJdGVtTGVuZ3RoID0gMCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0ID0gMCwgcmlnaHRJdGVtc1dlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgaXRlbUJ5SWQ6IEkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGl0ZW1CeUlkUG9zOiBudW1iZXIgPSAwLFxyXG4gICAgICAgICAgICB0YXJnZXREaXNwbGF5SXRlbUluZGV4OiBudW1iZXIgPSAtMSxcclxuICAgICAgICAgICAgaXNUYXJnZXRJbk92ZXJzY3JvbGw6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGl0ZW1CeUlkUG9zLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSAwLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4OiBudW1iZXIsXHJcbiAgICAgICAgICAgIGlzRnJvbUl0ZW1JZEZvdW5kID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBsaXN0IGlzIGR5bmFtaWMgb3IgdGhlcmUgYXJlIG5ldyBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvbiwgdGhlbiBpdCBzd2l0Y2hlcyB0byB0aGUgbG9uZyBhbGdvcml0aG0uXHJcbiAgICAgICAgaWYgKGR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIGxldCB5ID0gMCwgc3RpY2t5Q29sbGVjdGlvbkl0ZW06IEkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsIHN0aWNreUNvbXBvbmVudFNpemUgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxLCBjb2xsZWN0aW9uSXRlbSA9IGNvbGxlY3Rpb25baV0sIGlkID0gY29sbGVjdGlvbkl0ZW0uaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbXBvbmVudFNpemUgPSAwLCBjb21wb25lbnRTaXplRGVsdGEgPSAwLCBpdGVtRGlzcGxheU1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzID0gSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gbWFwLmdldChpZCkgfHwgeyB3aWR0aDogdHlwaWNhbEl0ZW1TaXplLCBoZWlnaHQ6IHR5cGljYWxJdGVtU2l6ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNpemUgPSBib3VuZHNbc2l6ZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtRGlzcGxheU1ldGhvZCA9IGJvdW5kcz8ubWV0aG9kID8/IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90Qm91bmRzID0gc25hcHNob3QuZ2V0KGlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFNuYXBzaG90U2l6ZSA9IGNvbXBvbmVudFNpemUgLSAoc25hcHNob3RCb3VuZHMgPyBzbmFwc2hvdEJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNpemVEZWx0YSA9IGNvbXBvbmVudFNuYXBzaG90U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoaWQsIHsgLi4uYm91bmRzLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5OT1RfQ0hBTkdFRCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZURlbHRhID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnNldChpZCwgeyAuLi5ib3VuZHMsIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRJdGVtc01hcC5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGRlbGV0ZWRJdGVtc01hcFtpXSwgc2l6ZSA9IGJvdW5kcz8uW3NpemVQcm9wZXJ0eV0gPz8gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDwgc2Nyb2xsU2l6ZSAtIHNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0b3RhbFNpemUgKz0gY29tcG9uZW50U2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUJ5SWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgIT09IGZyb21JdGVtSWQgJiYgaXRlbUNvbmZpZ01hcCAmJiBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lDb21wb25lbnRTaXplID0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUNvbGxlY3Rpb25JdGVtID0gY29sbGVjdGlvbkl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGlzcGxheUl0ZW1JbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RpY2t5Q29sbGVjdGlvbkl0ZW0gJiYgaXRlbUNvbmZpZ01hcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbnVtIH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChpLCBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYXJnZXRJbk92ZXJzY3JvbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IHNpemUgLSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQ29uZmlnTWFwICYmICFpdGVtQ29uZmlnTWFwW2NvbGxlY3Rpb25JdGVtLmlkXSAmJiB5ID49IHNjcm9sbFNpemUgJiYgeSA8IHNjcm9sbFNpemUgKyBzdGlja3lDb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwcGVkWSA9IHNjcm9sbFNpemUgLSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IChzbmFwcGVkWSAtIHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHNuYXBwZWRZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IHN0aWNreUNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZCA9IGNvbGxlY3Rpb25JdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWRQb3MgPSB5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5wdXNoKGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPD0gc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gdW5kZWZpbmVkIHx8IHkgPCBpdGVtQnlJZFBvcyArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA8PSBzY3JvbGxTaXplICsgc2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh5IDw9IHNjcm9sbFNpemUgLSBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zICs9IGNvbXBvbmVudFNpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLlVQREFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gY29tcG9uZW50U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuREVMRVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBjb21wb25lbnRTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgeSArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNUYXJnZXRJbk92ZXJzY3JvbGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbnVtIH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChcclxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmxlbmd0aCAtIChjaGVja092ZXJzY3JvbGxJdGVtc0xpbWl0IDwgMCA/IDAgOiBjb2xsZWN0aW9uLmxlbmd0aCAtIGNoZWNrT3ZlcnNjcm9sbEl0ZW1zTGltaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sIG1hcCwgdHlwaWNhbEl0ZW1TaXplLCBzaXplLCBpc1ZlcnRpY2FsLCBjb2xsZWN0aW9uLmxlbmd0aCAtIChjb2xsZWN0aW9uLmxlbmd0aCAtICh0YXJnZXREaXNwbGF5SXRlbUluZGV4ICsgMSkpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChudW0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAtPSBudW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIDw9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPD0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gaXNGcm9tSWQgPyBpdGVtQnlJZFBvcyA6IHNjcm9sbFNpemU7XHJcblxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLnNwbGljZSgwLCBsZWZ0SXRlbXNXZWlnaHRzLmxlbmd0aCAtIGxlZnRJdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodHMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCArPSB2O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgbGVmdEl0ZW1zT2Zmc2V0KTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgIC8vIEJ1ZmZlciBvcHRpbWl6YXRpb24gZG9lcyBub3Qgd29yayBvbiBmYXN0IGxpbmVhciBhbGdvcml0aG1cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChjcnVkRGV0ZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uSXRlbSA9IGNvbGxlY3Rpb25baV0sIGlkID0gY29sbGVjdGlvbkl0ZW0uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBvbmVudFNpemUgPSB0eXBpY2FsSXRlbVNpemUsIGl0ZW1EaXNwbGF5TWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMgPSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG1hcC5nZXQoaWQpITtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURpc3BsYXlNZXRob2QgPSBib3VuZHM/Lm1ldGhvZCA/PyBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbURpc3BsYXlNZXRob2QgPT09IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoaWQsIHsgLi4uYm91bmRzLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5OT1RfQ0hBTkdFRCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRJdGVtc01hcC5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBkZWxldGVkSXRlbXNNYXBbaV0sIHNpemUgPSBib3VuZHM/LltzaXplUHJvcGVydHldID8/IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCBzY3JvbGxTaXplIC0gc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHNjcm9sbFNpemUgLSBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLlVQREFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkRFTEVURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB5ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IE1hdGguZmxvb3Ioc2Nyb2xsU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gTWF0aC5jZWlsKChzY3JvbGxTaXplICsgc2l6ZSkgLyB0eXBpY2FsSXRlbVNpemUpO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsIGJ1ZmZlclNpemUpO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIGJ1ZmZlclNpemUgPiB0b3RhbExlbmd0aFxyXG4gICAgICAgICAgICAgICAgPyB0b3RhbExlbmd0aCAtIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDogYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0ID0gbGVmdEl0ZW1MZW5ndGggKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQgPSByaWdodEl0ZW1MZW5ndGggKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCA9IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgdG90YWxTaXplID0gdG90YWxMZW5ndGggKiB0eXBpY2FsSXRlbVNpemU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBrID0gdG90YWxTaXplICE9PSAwID8gcHJldmlvdXNUb3RhbFNpemUgLyB0b3RhbFNpemUgOiAwO1xyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZSAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXJ0SW5kZXggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gbGVmdEl0ZW1MZW5ndGgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApO1xyXG5cclxuICAgICAgICBjb25zdCBpdGVtc09uRGlzcGxheVdlaWdodCA9IHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgLSBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgLSBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC0gbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtcyA9IGl0ZW1zT25EaXNwbGF5TGVuZ3RoICsgbGVmdEl0ZW1MZW5ndGggKyByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIGRlbHRhID0gbGVmdFNpemVPZlVwZGF0ZWRJdGVtcyArIGxlZnRTaXplT2ZBZGRlZEl0ZW1zIC0gbGVmdFNpemVPZkRlbGV0ZWRJdGVtcztcclxuXHJcbiAgICAgICAgY29uc3QgbWV0cmljczogSU1ldHJpY3MgPSB7XHJcbiAgICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoOiB3LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodDogaCxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlXZWlnaHQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgIHNuaXBwZWRQb3MsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQsXHJcbiAgICAgICAgICAgIHRvdGFsTGVuZ3RoLFxyXG4gICAgICAgICAgICB0b3RhbFNpemUsXHJcbiAgICAgICAgICAgIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1ldHJpY3M7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEZWx0YURpcmVjdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsRGlyZWN0aW9uQ2FjaGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRlbHRhKGNsZWFyRGlyZWN0aW9uRGV0ZWN0b3IgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RlbHRhID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGNsZWFyRGlyZWN0aW9uRGV0ZWN0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNjcm9sbERpcmVjdGlvbkNhY2hlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpc3BsYXlDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG1ldHJpY3M6IElNZXRyaWNzKTogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtczogcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICB9ID0gbWV0cmljcyxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxTbmlwcGVkUG9zaXRpb24gPSBzbmlwcGVkUG9zLCBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgIGJvdW5kc1NpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsIGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiA9IGJvdW5kc1NpemU7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgPSByZW5kZXJJdGVtc0xlbmd0aCxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIG5leHRTdGlja3k6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIHN0aWNreUl0ZW1JbmRleCA9IC0xLFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSAwLCBlbmRTdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0RW5kU3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gLTEsIGVuZFN0aWNreUl0ZW1TaXplID0gMCwgY291bnQgPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID4gMCA/IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgOiAwLCB0b3RhbExlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbXNbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbXNbaV0uaWQsIHN0aWNreSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCwgc2VsZWN0YWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zZWxlY3RhYmxlID8/IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBkeW5hbWljU2l6ZSA/IHRoaXMuZ2V0KGlkKT8uW3NpemVQcm9wZXJ0eV0gfHwgdHlwaWNhbEl0ZW1TaXplIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSBpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogaXNWZXJ0aWNhbCA/IDAgOiBhY3R1YWxTbmlwcGVkUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaXNWZXJ0aWNhbCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiBjb3VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICcxJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbSA9IHsgaW5kZXg6IGksIGlkLCBtZWFzdXJlcywgZGF0YTogaXRlbURhdGEsIGNvbmZpZyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtU2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChzdGlja3lJdGVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kICsgaXRlbXNPbkRpc3BsYXlMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWluKHN0YXJ0SW5kZXgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApLCBsID0gdG90YWxMZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1zW2ldLmlkLCBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZHluYW1pY1NpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXQoaWQpPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSBpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSwgaCA9IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsIG1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyAwIDogYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gaCA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogIWlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goZW5kU3RpY2t5SXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpID0gc3RhcnRJbmRleDtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChyZW5kZXJJdGVtcyA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IHRvdGFsTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtc1tpXS5pZCwgc2l6ZSA9IGR5bmFtaWNTaXplID8gdGhpcy5nZXQoaWQpPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlkICE9PSBzdGlja3lJdGVtPy5pZCAmJiBpZCAhPT0gZW5kU3RpY2t5SXRlbT8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IGkgJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCwgc2VsZWN0YWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zZWxlY3RhYmxlID8/IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQgPSBzbmFwICYmIChzdGlja3kgPT09IDEgJiYgcG9zIDw9IHNjcm9sbFNpemUgfHwgc3RpY2t5ID09PSAyICYmIHBvcyA+PSBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIHNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyBzdGlja3kgPT09IDEgPyAwIDogYm91bmRzU2l6ZSAtIHNpemUgOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gcG9zIDogc3RpY2t5ID09PSAyID8gYm91bmRzU2l6ZSAtIHNpemUgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IGlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogIWlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3k6IHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnpJbmRleCA9ICcyJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gPSB7IGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRTdGlja3kgJiYgc3RpY2t5SXRlbUluZGV4IDwgaSAmJiBzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgc2l6ZSArIHN0aWNreUl0ZW1TaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnggPSBpc1ZlcnRpY2FsID8gMCA6IHNuYXBwZWQgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IChpdGVtLm1lYXN1cmVzLnkgLSBzY3JvbGxTaXplKSA6IChpdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuekluZGV4ID0gJzMnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW5leHRFbmRTdGlja3kgJiYgZW5kU3RpY2t5SXRlbUluZGV4ID4gaSAmJiBzdGlja3kgPT09IDIgJiYgKHBvcyA+PSBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIHNpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy54ID0gaXNWZXJ0aWNhbCA/IDAgOiBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy55ID0gaXNWZXJ0aWNhbCA/IHNuYXBwZWQgPyBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBzaXplIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnpJbmRleCA9ICczJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5jb25maWcuc25hcHBlZCA9IHNuYXBwZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gKGl0ZW0ubWVhc3VyZXMueSAtIHNjcm9sbFNpemUpIDogKGl0ZW0ubWVhc3VyZXMueCAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgLT0gMTtcclxuICAgICAgICAgICAgICAgIHBvcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBheGlzID0gaXNWZXJ0aWNhbCA/IFlfUFJPUF9OQU1FIDogWF9QUk9QX05BTUU7XHJcblxyXG4gICAgICAgICAgICBpZiAobmV4dFN0aWNreSAmJiBzdGlja3lJdGVtICYmIG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPD0gc2Nyb2xsU2l6ZSArIHN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA+IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gbmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSAtIHN0aWNreUl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IHN0aWNreUl0ZW0ubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBzdGlja3lJdGVtLm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gaXNWZXJ0aWNhbCA/IG5leHRTdGlja3kubWVhc3VyZXMueSAtIHNjcm9sbFNpemUgOiBuZXh0U3RpY2t5Lm1lYXN1cmVzLnggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobmV4dEVuZFN0aWNreSAmJiBlbmRTdGlja3lJdGVtICYmIG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSAtIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPCBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIGVuZFN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gKyBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc25hcHBlZCA9IG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zdGlja3kgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy55IC0gc2Nyb2xsU2l6ZSA6IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueCAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSBpc1ZlcnRpY2FsID8gbmV4dEVuZFN0aWNreS5tZWFzdXJlcy55IC0gc2Nyb2xsU2l6ZSA6IG5leHRFbmRTdGlja3kubWVhc3VyZXMueCAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXMgfHwgIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudHJhY2sodGhpcy5faXRlbXMsIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLCB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50LCB0aGlzLnNjcm9sbERpcmVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh2OiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLmRpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50PzogQyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVFbGVtZW50cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldLCBpdGVtSWQgPSBjb21wb25lbnQuaW5zdGFuY2UuaXRlbUlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGNvbXBvbmVudC5pbnN0YW5jZS5nZXRCb3VuZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXQoaXRlbUlkLCBib3VuZHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBkaXNwb3NlKCkge1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==