ng-virtual-list 18.12.0 → 18.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +1 -11
  2. package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +6 -6
  3. package/esm2022/lib/components/ng-scroll-view/const/index.mjs +2 -2
  4. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +9 -11
  5. package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-metrics.mjs +2 -0
  6. package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-params.mjs +2 -0
  7. package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-position-params.mjs +2 -0
  8. package/esm2022/lib/components/ng-scroller/utils/interfaces/index.mjs +2 -0
  9. package/esm2022/lib/components/ng-scroller/utils/scroll-box.mjs +1 -1
  10. package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +1 -1
  11. package/esm2022/lib/core/track-box.mjs +24 -19
  12. package/esm2022/lib/core/tracker.mjs +12 -9
  13. package/esm2022/lib/ng-virtual-list.component.mjs +49 -35
  14. package/esm2022/lib/utils/animator/animator.mjs +2 -2
  15. package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +1 -1
  16. package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +1 -1
  17. package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
  18. package/esm2022/lib/utils/event-emitter/event-emitter.mjs +2 -2
  19. package/esm2022/lib/utils/event-emitter/interfaces/event-emitter.mjs +1 -1
  20. package/fesm2022/ng-virtual-list.mjs +96 -77
  21. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  22. package/lib/components/ng-scroll-view/const/index.d.ts +1 -1
  23. package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-metrics.d.ts +11 -0
  24. package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-params.d.ts +19 -0
  25. package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-position-params.d.ts +10 -0
  26. package/lib/components/ng-scroller/utils/interfaces/index.d.ts +4 -0
  27. package/lib/components/ng-scroller/utils/scroll-box.d.ts +1 -18
  28. package/lib/core/interfaces/recalculate-metrics-options.d.ts +2 -1
  29. package/lib/ng-virtual-list.component.d.ts +1 -0
  30. package/lib/utils/animator/animator.d.ts +1 -1
  31. package/lib/utils/animator/interfaces/animator-params.d.ts +1 -1
  32. package/lib/utils/animator/interfaces/animator-update-data.d.ts +1 -1
  33. package/lib/utils/animator/types/easing.d.ts +1 -1
  34. package/lib/utils/event-emitter/event-emitter.d.ts +1 -1
  35. package/lib/utils/event-emitter/interfaces/event-emitter.d.ts +1 -1
  36. package/package.json +1 -1
@@ -9,6 +9,7 @@ import { DEFAULT_BUFFER_EXTREMUM_THRESHOLD, DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH,
9
9
  import { Z_INDEX_0, Z_INDEX_1, Z_INDEX_2, Z_INDEX_3, } from '../const';
10
10
  import { TrackBoxEvents } from "./events";
11
11
  import { ItemDisplayMethods } from "./enums";
12
+ import { Alignments } from "../enums";
12
13
  /**
13
14
  * An object that performs tracking, calculations and caching.
14
15
  * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/core/track-box.ts
@@ -392,7 +393,7 @@ export class TrackBox extends CacheMap {
392
393
  * Calculates list metrics
393
394
  */
394
395
  recalculateMetrics(options) {
395
- const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize, scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign, deletedItemsMap, itemTransform } = options, roundedScrollSize = Math.round(scrollSize);
396
+ const { alignment, fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize, scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign, deletedItemsMap, itemTransform } = options, roundedScrollSize = Math.round(scrollSize);
396
397
  const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize), { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize, w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height, map = this._map, snapshot = this._snapshot, divides = this._divides, stickyPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsOrRowsWeights = [], isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)
397
398
  || (typeof fromItemId === 'string' && fromItemId > '-1');
398
399
  let leftItemsOffset = 0, rightItemsOffset = 0;
@@ -532,15 +533,17 @@ export class TrackBox extends CacheMap {
532
533
  }
533
534
  if (id == fromItemId) {
534
535
  isFromItemIdFound = true;
535
- const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical), leftViewportSize = size - offset;
536
- if (leftViewportSize > 0) {
537
- const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true), deltaNum = (num1 - num), deltaOffset = (offset1 - offset);
538
- totalItemsToDisplayEndWeight += offset;
539
- itemsFromStartToScrollEnd -= deltaNum;
540
- rightItemsWeight = rightItemLength = 0;
541
- leftHiddenItemsWeight -= deltaOffset;
542
- leftItemsOrRowsWeights.splice(leftItemsOrRowsWeights.length - deltaNum, deltaNum);
543
- y -= deltaOffset;
536
+ if (alignment !== Alignments.CENTER) {
537
+ const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical), leftViewportSize = size - offset;
538
+ if (leftViewportSize > 0) {
539
+ const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true), deltaNum = (num1 - num), deltaOffset = (offset1 - offset);
540
+ totalItemsToDisplayEndWeight += offset;
541
+ itemsFromStartToScrollEnd -= deltaNum;
542
+ rightItemsWeight = rightItemLength = 0;
543
+ leftHiddenItemsWeight -= deltaOffset;
544
+ leftItemsOrRowsWeights.splice(leftItemsOrRowsWeights.length - deltaNum, deltaNum);
545
+ y -= deltaOffset;
546
+ }
544
547
  }
545
548
  itemById = collectionItem;
546
549
  itemByIdPos = y;
@@ -727,7 +730,7 @@ export class TrackBox extends CacheMap {
727
730
  rightItemsWeight = Math.floor(rightItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;
728
731
  leftHiddenItemsWeight = Math.floor(itemsFromStartToScrollEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;
729
732
  totalItemsToDisplayEndWeight = Math.floor(itemsFromStartToDisplayEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;
730
- totalSize = (totalLength * dividedTypicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;
733
+ totalSize = (Math.ceil(totalLength / divides) * divides * dividedTypicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;
731
734
  const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;
732
735
  if (isFromId) {
733
736
  const index = collection.findIndex(item => item[trackBy] == fromItemId);
@@ -1103,7 +1106,7 @@ export class TrackBox extends CacheMap {
1103
1106
  }
1104
1107
  if (!isDummy) {
1105
1108
  if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {
1106
- const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0, sticky = itemConfigMap[id]?.sticky ?? 0, fullSize = itemConfigMap[id]?.fullSize ?? false, selectable = itemConfigMap[id]?.selectable ?? true, collapsable = itemConfigMap[id]?.collapsable ?? false, snapped = stickyEnabled && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)), absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio, absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size), absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio), x = isVertical ? divSize * ((sticky || fullSize) ? 0 : ci) : pos, y = isVertical ? pos : divSize * ((sticky || fullSize) ? 0 : ci), measures = {
1109
+ const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0, sticky = itemConfigMap[id]?.sticky ?? 0, fullSize = itemConfigMap[id]?.fullSize ?? false, selectable = itemConfigMap[id]?.selectable ?? true, collapsable = itemConfigMap[id]?.collapsable ?? false, snapped = stickyEnabled && ((sticky === 1 && (pos <= scrollSize + this._scrollStartOffset)) || (sticky === 2 && (pos >= scrollSize + boundsSize - size))), absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio, absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size), absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio), x = isVertical ? divSize * ((sticky || fullSize) ? 0 : ci) : pos, y = isVertical ? pos : divSize * ((sticky || fullSize) ? 0 : ci), measures = {
1107
1110
  x,
1108
1111
  y,
1109
1112
  transformedX: x,
@@ -1131,7 +1134,7 @@ export class TrackBox extends CacheMap {
1131
1134
  maxWidth: maxItemSize,
1132
1135
  maxHeight: maxItemSize,
1133
1136
  scrollDirection,
1134
- delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,
1137
+ delta: sticky === 1 ? actualSnippedPosition : (sticky === 2 ? (actualEndSnippedPosition - deltaOffet - size) : 0),
1135
1138
  }, config = {
1136
1139
  isFirst: i === layoutIndexOffset,
1137
1140
  isLast: i === li,
@@ -1141,7 +1144,7 @@ export class TrackBox extends CacheMap {
1141
1144
  isVertical,
1142
1145
  collapsable,
1143
1146
  selectable,
1144
- sticky: sticky,
1147
+ sticky,
1145
1148
  snap: stickyEnabled,
1146
1149
  snapped: false,
1147
1150
  snappedOut: false,
@@ -1194,9 +1197,9 @@ export class TrackBox extends CacheMap {
1194
1197
  i++;
1195
1198
  }
1196
1199
  const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;
1197
- if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItemSize) {
1198
- if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {
1199
- stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;
1200
+ if (!!nextSticky && !!stickyItem && nextSticky.measures[axis] <= actualSnippedPosition + stickyItem.measures[sizeProperty]) {
1201
+ if (nextSticky.measures[axis] > actualSnippedPosition) {
1202
+ stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItem.measures[sizeProperty];
1200
1203
  stickyItem.config.snapped = nextSticky.config.snapped = false;
1201
1204
  stickyItem.config.snappedOut = true;
1202
1205
  stickyItem.config.sticky = 1;
@@ -1205,7 +1208,8 @@ export class TrackBox extends CacheMap {
1205
1208
  else {
1206
1209
  nextSticky.config.snapped = true;
1207
1210
  nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : nextSticky.measures.x) - scrollSize;
1208
- stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];
1211
+ stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItem.measures[sizeProperty];
1212
+ stickyItem.measures.delta = (isVertical ? stickyItem.measures.y : stickyItem.measures.x) - scrollSize;
1209
1213
  }
1210
1214
  }
1211
1215
  if (!!nextEndSticky && !!endStickyItem &&
@@ -1222,6 +1226,7 @@ export class TrackBox extends CacheMap {
1222
1226
  nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];
1223
1227
  nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;
1224
1228
  endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];
1229
+ endStickyItem.measures.delta = (isVertical ? endStickyItem.measures.y : endStickyItem.measures.x) - scrollSize;
1225
1230
  }
1226
1231
  }
1227
1232
  if (itemTransform !== null) {
@@ -1350,4 +1355,4 @@ export class TrackBox extends CacheMap {
1350
1355
  }
1351
1356
  }
1352
1357
  }
1353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2stYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS90cmFjay1ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFDSCxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUMxSCxXQUFXLEVBQUUsV0FBVyxHQUMzQixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsaUNBQWlDLEVBQUUsa0NBQWtDLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQ2xJLE1BQU0sRUFBRSwwQkFBMEIsR0FDckMsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUt2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3Qzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUNULFNBQVEsUUFBc0Q7SUFFcEQsUUFBUSxDQUFjO0lBRXRCLE1BQU0sQ0FBa0Q7SUFFbEUsSUFBSSxLQUFLLENBQUMs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LE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUNySixxQkFBcUIsR0FBRyxHQUFHLEdBQUcsVUFBVSxFQUFFLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUN6TCxtQkFBbUIsR0FBRyxVQUFVLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsRUFDeEUsMEJBQTBCLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFDeEksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFDaEUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDaEUsUUFBUSxHQUFtQzs0QkFDdkMsQ0FBQzs0QkFDRCxDQUFDOzRCQUNELFlBQVks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ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItaXRlbS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJZCB9IGZyb20gXCIuLi90eXBlcy9pZFwiO1xyXG5pbXBvcnQgeyBDQUNIRV9CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIENhY2hlTWFwIH0gZnJvbSBcIi4vY2FjaGUtbWFwXCI7XHJcbmltcG9ydCB7IFRyYWNrZXIgfSBmcm9tIFwiLi90cmFja2VyXCI7XHJcbmltcG9ydCB7IElSZWN0LCBJU2l6ZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBERUZBVUxUX0RJVklERVMsIEhFSUdIVF9QUk9QX05BTUUsIFNFUlZJQ0VfUFJPUF9EVU1NWSwgU0VSVklDRV9QUk9QX0RVTU1ZX0VOQUJMRUQsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSxcclxuICAgIFhfUFJPUF9OQU1FLCBZX1BST1BfTkFNRSxcclxufSBmcm9tIFwiLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZywgSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzLCBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQgeyBDTWFwIH0gZnJvbSAnLi4vdXRpbHMvY21hcCc7XHJcbmltcG9ydCB7IGJ1ZmZlckludGVycG9sYXRpb24gfSBmcm9tIFwiLi4vdXRpbHMvYnVmZmVyLWludGVycG9sYXRpb25cIjtcclxuaW1wb3J0IHsgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9iYXNlXCI7XHJcbmltcG9ydCB7IFByZXJlbmRlckNhY2hlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbmctcHJlcmVuZGVyLWNvbnRhaW5lci90eXBlcy9jYWNoZVwiO1xyXG5pbXBvcnQgeyBTY3JvbGxEaXJlY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgb2JqZWN0QXNSZWFkb25seSB9IGZyb20gXCIuLi91dGlscy9vYmplY3RcIjtcclxuaW1wb3J0IHsgZ2V0U2VydmljZUlkUHJvcCB9IGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBERUZBVUxUX0JVRkZFUl9FWFRSRU1VTV9USFJFU0hPTEQsIERFRkFVTFRfTUFYX0JVRkZFUl9TRVFVRU5DRV9MRU5HVEgsIERFRkFVTFRfUkVTRVRfQlVGRkVSX1NJWkVfVElNRU9VVCwgRU5EX0NPTExFQ1RJT05fUFJFRklYX0lELFxyXG4gICAgSVNfTkVXLCBTVEFSVF9DT0xMRUNUSU9OX1BSRUZJWF9JRCxcclxufSBmcm9tIFwiLi9jb25zdFwiO1xyXG5pbXBvcnQgeyBaX0lOREVYXzAsIFpfSU5ERVhfMSwgWl9JTkRFWF8yLCBaX0lOREVYXzMsIH0gZnJvbSAnLi4vY29uc3QnO1xyXG5pbXBvcnQge1xyXG4gICAgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElHZXRNZXRyaWNzUmV0dXJucywgSUl0ZW0sIElNZXRyaWNzLCBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9ucywgSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zLFxyXG4gICAgSVVwZGF0ZUNvbGxlY3Rpb25SZXR1cm5zLFxyXG59IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcclxuaW1wb3J0IHsgVHJhY2tCb3hFdmVudHMgfSBmcm9tIFwiLi9ldmVudHNcIjtcclxuaW1wb3J0IHsgQ2FjaGUsIENhY2hlTWFwRXZlbnRzLCBDYWNoZU1hcExpc3RlbmVycyB9IGZyb20gXCIuL3R5cGVzXCI7XHJcbmltcG9ydCB7IEl0ZW1EaXNwbGF5TWV0aG9kcyB9IGZyb20gXCIuL2VudW1zXCI7XHJcblxyXG4vKipcclxuICogQW4gb2JqZWN0IHRoYXQgcGVyZm9ybXMgdHJhY2tpbmcsIGNhbGN1bGF0aW9ucyBhbmQgY2FjaGluZy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb3JlL3RyYWNrLWJveC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja0JveDxDIGV4dGVuZHMgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCA9IGFueT5cclxuICAgIGV4dGVuZHMgQ2FjaGVNYXA8SWQsIENhY2hlLCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnM+IHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RyYWNrZXIhOiBUcmFja2VyPEM+O1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHNldCBpdGVtcyh2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcyA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGRpc3BsYXlDb21wb25lbnRzKHY6IEFycmF5PENvbXBvbmVudFJlZjxDPj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IHNuYXBwZWREaXNwbGF5Q29tcG9uZW50cyh2OiBBcnJheTxDb21wb25lbnRSZWY8Qz4+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uID0gMDtcclxuICAgIHNldCBzY3JvbGxEaXJlY3Rpb24odjogU2Nyb2xsRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbERpcmVjdGlvbiA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24gPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbERpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX3Njcm9sbERpcmVjdGlvbjsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tCeTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuICAgIHNldCB0cmFja0J5KHY6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLl90cmFja0J5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrQnkgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl90cmFja0J5OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXZpZGVzOiBudW1iZXIgPSBERUZBVUxUX0RJVklERVM7XHJcblxyXG4gICAgc2V0IGRpdmlkZXModjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RpdmlkZXMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGl2aWRlcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0luZmluaXR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzSW5maW5pdHkodjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzSW5maW5pdHkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNMYXp5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzTGF6eSh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzTGF6eSA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc0xhenkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB0cmFja0J5IHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHNldCB0cmFja2luZ1Byb3BlcnR5TmFtZSh2OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSA9IHRoaXMuX3RyYWNrZXIudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc1Njcm9sbFN0YXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsU3RhcnQodjogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB2O1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2Nyb2xsU25hcFRvU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsRW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsRW5kKHY6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9pc1Njcm9sbEVuZCA9IHY7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9FbmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsU25hcFRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9TdGFydCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxTdGFydCB8fCB0aGlzLl9pc1Njcm9sbFNuYXBUb1N0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTY3JvbGxTbmFwVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9FbmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2Nyb2xsRW5kIHx8IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2Nyb2xsU3RhcnRPZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgc2Nyb2xsU3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbEVuZE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzY3JvbGxFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0ID0gdjtcclxuICAgIH1cclxuICAgIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVuZE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBjYWNoZTogQ2FjaGUpOiBDTWFwPElkLCBJU2l6ZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9tYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICBjb25zdCBiID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgIGlmIChiPy53aWR0aCA9PT0gY2FjaGUud2lkdGggJiYgYj8uaGVpZ2h0ID09PSBjYWNoZS5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl9tYXAuc2V0KGlkLCBjYWNoZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzQ29sbGVjdGlvbjogQXJyYXk8SUl0ZW0+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG4gICAgZ2V0IGNydWREZXRlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2NydWREZXRlY3RlZDsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlSWZOZWVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl92ZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGZpcmVUaWNrKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuVElDSyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1RvdGFsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWx0YU9mTmV3SXRlbXM6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgZGVsdGFPZk5ld0l0ZW1zKCkgeyByZXR1cm4gdGhpcy5fZGVsdGFPZk5ld0l0ZW1zOyB9XHJcblxyXG4gICAgaXNBZGFwdGl2ZUJ1ZmZlciA9IHRydWU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkID0gREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xEO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGggPSBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RIO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZVNlcXVlbmNlOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl9idWZmZXJTaXplOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0QnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNpemU6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzUmVzZXRlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcmVuZGVyZWRDYWNoZTogUHJlcmVuZGVyQ2FjaGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIF9uZXdJdGVtczogQXJyYXk8SWQ+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGxpZmVDaXJjbGUoKSB7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlSWZOZWVkKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlyZVRpY2soKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlQ2lyY2xlRG8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBjb2xsZWN0aW9uIGZvciBkZWxldGVkIGl0ZW1zIGFuZCBmbHVzaGVzIHRoZSBkZWxldGVkIGl0ZW0gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q29sbGVjdGlvbiAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBjdXJyZW50Q29sbGVjdGlvbiA9PT0gdGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQXR0ZW50aW9uISBUaGUgY29sbGVjdGlvbiBtdXN0IGJlIGltbXV0YWJsZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRlZCA9ICgoIXRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiB8fCB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAgICAgICAoISFjdXJyZW50Q29sbGVjdGlvbiAmJiBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzUmVzZXRlZCA9IHJlc2V0ZWQ7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUodGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uLCBjdXJyZW50Q29sbGVjdGlvbiwgaXRlbVNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24gPSBbLi4uKGN1cnJlbnRDb2xsZWN0aW9uIHx8IFtdKV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIGNhY2hlIG9mIGl0ZW1zIGZyb20gdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNhY2hlPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihwcmV2aW91c0NvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1cnJlbnRDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICAgICAgICBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lO1xyXG4gICAgICAgIGxldCBjcnVkRGV0ZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9uZXdJdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnRDb2xsZWN0aW9uIHx8IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHByZXZpb3VzQ29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWl0ZW0gJiYgdGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c0NvbGxlY3Rpb24gfHwgcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIGFkZGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkRpY3Q6IElJdGVtPEk+ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldO1xyXG4gICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGljdFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgbm90Q2hhbmdlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZEl0ZW1zTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSVNpemUgfSA9IHt9LFxyXG4gICAgICAgICAgICB1cGRhdGVkTWFwOiBJSXRlbTxJPiA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25EaWN0Lmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBjb2xsZWN0aW9uRGljdFtpZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90Q2hhbmdlZE1hcFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0aGlzLl9tYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNYXBbaXRlbVt0cmFja0J5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odGhpcy5fbWFwLmdldChpZCkgfHwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZE1hcFtpZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwW2ldID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSAmJiAhZGVsZXRlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgIXVwZGF0ZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpICYmXHJcbiAgICAgICAgICAgICAgICAhbm90Q2hhbmdlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25ld0l0ZW1zLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGNydWREZXRlY3RlZDtcclxuICAgICAgICB0aGlzLl9kZWxldGVkSXRlbXNNYXAgPSBkZWxldGVkSXRlbXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgcG9zaXRpb24gb2YgYSBjb2xsZWN0aW9uIGVsZW1lbnQgYnkgdGhlIGdpdmVuIElkXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1Qb3NpdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaWQ6IElkLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG9wdGlvbnM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPEksIEM+KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGZyb21JdGVtSWQ6IGlkID8/IG9wdGlvbnMuZnJvbUl0ZW1JZCwgaXRlbUNvbmZpZ01hcCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCB7IHNjcm9sbFNpemUsIGlzRnJvbUl0ZW1JZEZvdW5kIH0gPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemU6IHRoaXMuX2NydWREZXRlY3RlZCB8fCBvcHQuZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcDogdGhpcy5fZGVsZXRlZEl0ZW1zTWFwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpc0Zyb21JdGVtSWRGb3VuZCA/IHNjcm9sbFNpemUgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2ZW50U2Nyb2xsU25hcHBpbmcoY2xlYXJCdWZmZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB0aGlzLl9pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoY2xlYXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9TdGFydCA9IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgZ2V0TWV0cmljczxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSUdldE1ldHJpY3NSZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgY3J1ZERldGVjdGVkID0gdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAgPSB0aGlzLl9kZWxldGVkSXRlbXNNYXA7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgPSBvcHQuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLl9tYXhCdWZmZXJTaXplID0gb3B0Lm1heEJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbjogaXRlbXMsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgdG90YWxTaXplOiBtZXRyaWNzLnRvdGFsU2l6ZSwgZGVsdGE6IG1ldHJpY3MuZGVsdGEsIGNydWREZXRlY3RlZCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSVVwZGF0ZUNvbGxlY3Rpb25SZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgZHluYW1pY1NpemUgPSBvcHQuZHluYW1pY1NpemUsIGNydWREZXRlY3RlZCA9IHRoaXMuX2NydWREZXRlY3RlZCxcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwID0gdGhpcy5fZGVsZXRlZEl0ZW1zTWFwO1xyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMob3B0LmlzVmVydGljYWwsIG9wdC5pdGVtU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGl0ZW1zLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlbHRhICs9IG1ldHJpY3MuZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXMobWV0cmljcywgaXRlbXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNUb3RhbFNpemUgPSBtZXRyaWNzLnRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZEl0ZW1zTWFwID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAob3B0LmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbihtZXRyaWNzLml0ZW1zLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5tZXRyaWNzLCB9KTtcclxuICAgICAgICByZXR1cm4geyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogbWV0cmljcy50b3RhbFNpemUsIGRlbHRhOiBtZXRyaWNzLmRlbHRhLCBjcnVkRGV0ZWN0ZWQsIGxlZnRMYXlvdXRPZmZzZXQ6IG1ldHJpY3MubGVmdExheW91dE9mZnNldCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJldmlvdXNTY3JvbGxTaXplID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXM8SSBleHRlbmRzIElJdGVtPihtZXRyaWNzOiBJTWV0cmljczxJPiwgdG90YWxJdGVtc0xlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IG1ldHJpY3Muc2Nyb2xsU2l6ZSArIHRoaXMuX2RlbHRhLCBkZWx0YSA9IE1hdGguYWJzKHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyUmF3U2l6ZSA9IE1hdGgubWluKE1hdGguZmxvb3IobWV0cmljcy50eXBpY2FsSXRlbVNpemUgIT09IDAgPyBkZWx0YSAvIG1ldHJpY3MudHlwaWNhbEl0ZW1TaXplIDogMCkgKiA1LCB0b3RhbEl0ZW1zTGVuZ3RoKSxcclxuICAgICAgICAgICAgbWluQnVmZmVyU2l6ZSA9IGJ1ZmZlclJhd1NpemUgPCB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA/IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplIDogYnVmZmVyUmF3U2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyVmFsdWUgPSBtaW5CdWZmZXJTaXplID4gdGhpcy5fbWF4QnVmZmVyU2l6ZSA/IHRoaXMuX21heEJ1ZmZlclNpemUgOiBtaW5CdWZmZXJTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl9idWZmZXJTaXplID0gYnVmZmVySW50ZXJwb2xhdGlvbih0aGlzLl9idWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UsIGJ1ZmZlclZhbHVlLCB7XHJcbiAgICAgICAgICAgIGV4dHJlbXVtVGhyZXNob2xkOiB0aGlzLl9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLl9tYXhCdWZmZXJTZXF1ZW5jZUxlbmd0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFJlc2V0QnVmZmVyU2l6ZVRpbWVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXJ0UmVzZXRCdWZmZXJTaXplVGltZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZSA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UgPSBbXTtcclxuICAgICAgICB9LCB0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lb3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBlbnRyeSBpbnRvIHRoZSBvdmVyc2Nyb2xsIGFyZWEgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBvdmVyc2Nyb2xsIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50TnVtVG9FbmQ8SSBleHRlbmRzIElJdGVtLCBDIGV4dGVuZHMgQXJyYXk8ST4+KGk6IG51bWJlciwgY29sbGVjdGlvbjogQywgbWFwOiBDTWFwPElkLCBJU2l6ZT4sIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyLFxyXG4gICAgICAgIHNpemU6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbiwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDAsIHJldmVyc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHsgbnVtOiBudW1iZXIsIG9mZnNldDogbnVtYmVyIH0ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gaW5kZXhPZmZzZXQgLSAxOyByZXZlcnNlID8gaiA+PSAwIDogaiA+PSBpOyBqLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25bal0sIGlkID0gaXRlbVt0cmFja0J5XTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1TaXplID0gMDtcclxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBjYWNoZSAmJiBjYWNoZVtzaXplUHJvcGVydHldID4gMCA/IGNhY2hlW3NpemVQcm9wZXJ0eV0gOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2Zmc2V0ICsgaXRlbVNpemUgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW0sIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihvcHRpb25zOiBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPik6IElNZXRyaWNzPEk+IHtcclxuICAgICAgICBjb25zdCB7IGZyb21JdGVtSWQsIGJvdW5kcywgY29sbGVjdGlvbiwgZHluYW1pY1NpemUsIGlzVmVydGljYWwsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSwgbWF4SXRlbVNpemUsIGJ1ZmZlclNpemU6IG1pbkJ1ZmZlclNpemUsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsIHN0aWNreUVuYWJsZWQsIGl0ZW1Db25maWdNYXAsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIHByZXZpb3VzVG90YWxTaXplLCBzbmFwVG9JdGVtLCBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcCwgaXRlbVRyYW5zZm9ybSB9ID0gb3B0aW9ucyBhcyBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiAmIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgICAgIH0sIHJvdW5kZWRTY3JvbGxTaXplID0gTWF0aC5yb3VuZChzY3JvbGxTaXplKTtcclxuXHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lLCBidWZmZXJTaXplID0gTWF0aC5tYXgobWluQnVmZmVyU2l6ZSwgdGhpcy5fYnVmZmVyU2l6ZSksXHJcbiAgICAgICAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzLCBzaXplUHJvcGVydHkgPSBpc1ZlcnRpY2FsID8gSEVJR0hUX1BST1BfTkFNRSA6IFdJRFRIX1BST1BfTkFNRSxcclxuICAgICAgICAgICAgc2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCwgdG90YWxMZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCwgdHlwaWNhbEl0ZW1TaXplID0gaXRlbVNpemUsXHJcbiAgICAgICAgICAgIHcgPSBpc1ZlcnRpY2FsID8gd2lkdGggOiB0eXBpY2FsSXRlbVNpemUsIGggPSBpc1ZlcnRpY2FsID8gdHlwaWNhbEl0ZW1TaXplIDogaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXAgPSB0aGlzLl9tYXAsIHNuYXBzaG90ID0gdGhpcy5fc25hcHNob3QsIGRpdmlkZXMgPSB0aGlzLl9kaXZpZGVzLFxyXG4gICAgICAgICAgICBzdGlja3lQb3MgPSBNYXRoLmZsb29yKHNjcm9sbFNpemUpICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQsIGxlZnRJdGVtc09yUm93c1dlaWdodHM6IEFycmF5PG51bWJlcj4gPSBbXSxcclxuICAgICAgICAgICAgaXNGcm9tSWQgPSBmcm9tSXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBmcm9tSXRlbUlkID09PSAnbnVtYmVyJyAmJiBmcm9tSXRlbUlkID4gLTEpXHJcbiAgICAgICAgICAgICAgICB8fCAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdzdHJpbmcnICYmIGZyb21JdGVtSWQgPiAnLTEnKTtcclxuXHJcbiAgICAgICAgbGV0IGxlZnRJdGVtc09mZnNldCA9IDAsIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmIChlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2Nyb2xsRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgLTE6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZSAqIGRpdmlkZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZSAqIGRpdmlkZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZDogbnVtYmVyID0gLTEsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IDAsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gLTEsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gMCwgcmlnaHRJdGVtTGVuZ3RoID0gMCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0ID0gMCwgcmlnaHRJdGVtc1dlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICBkZWx0YU9mTmV3SXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgaXRlbUJ5SWQ6IEkgfCBudWxsID0gbnVsbCxcclxuICAgICAgICAgICAgaXRlbUJ5SWRQb3M6IG51bWJlciA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0LFxyXG4gICAgICAgICAgICBpc1RhcmdldEluT3ZlcnNjcm9sbDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gaXRlbUJ5SWRQb3MsXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0LFxyXG4gICAgICAgICAgICBzdGFydEluZGV4OiBudW1iZXIsXHJcbiAgICAgICAgICAgIGlzRnJvbUl0ZW1JZEZvdW5kID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gPSAwLFxyXG4gICAgICAgICAgICBpc1VwZGF0aW5nID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGxlZnRZT2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRJbmRleE9mZnNldCA9IDAsXHJcbiAgICAgICAgICAgIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQgPSAwO1xyXG5cclxuICAgICAgICBjb25zdCBpc1N0YXJ0ID0gKChyb3VuZGVkU2Nyb2xsU2l6ZSA9PT0gMCkgfHwgdGhpcy5pc1NuYXBwZWRUb1N0YXJ0KTtcclxuICAgICAgICBsZXQgc3RpY2t5SXRlbUlkOiBJZCB8IHVuZGVmaW5lZCwgaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zOiBBcnJheTxJPjtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXMgZHluYW1pYyBvciB0aGVyZSBhcmUgbmV3IGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCB0aGVuIGl0IHN3aXRjaGVzIHRvIHRoZSBsb25nIGFsZ29yaXRobS5cclxuICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUlkUHJvcCA9IGdldFNlcnZpY2VJZFByb3AodHJhY2tCeSk7XHJcbiAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgc3RpY2t5SWQ6IElkIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25baV0sIGlkID0gaXRlbT8uW3RyYWNrQnldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUlkID0gaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtSWQgPSBzdGlja3lJZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkID09IGZyb21JdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgeSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IDAsXHJcbiAgICAgICAgICAgICAgICByb3c6IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydEl0ZW1JbmRleDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZEl0ZW1JbmRleDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdFNpemU6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtczogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHM6IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJdGVtSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb246IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGUgPSAoaTogbnVtYmVyLCBsOiBudW1iZXIsIGxpOiBudW1iZXIsIGlzUHJlY29sbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlLCBpZFByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWkgPiBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gY29sbGVjdGlvbkl0ZW1bdHJhY2tCeV0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcD8uW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNOZXdSb3cgPSBpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICBpc0xhc3RJdGVtSW5Sb3cgPSBpaSAlIGRpdmlkZXMgPT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlbSA9IGkgPT09IGxpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzUm93RW5kID0gKGlzTGFzdEl0ZW1JblJvdyB8fCAoIWlzTGFzdEl0ZW1JblJvdyAmJiBpc0xhc3RJdGVtKSk7XHJcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGlzUHJlY29sbGVjdGlvbiA/IHsgLi4uY29sbGVjdGlvbkl0ZW0sIFtzZXJ2aWNlSWRQcm9wXTogYF8ke2lkUHJlZml4fS0ke2lkfV9gIH0gOiBjb2xsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXdSb3cgfHwgcm93ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEl0ZW1JbmRleDogaSArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEl0ZW1JbmRleDogaSArIGRpdmlkZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90U2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50U2l6ZSA9IDAsIHJvd1NpemVEZWx0YSA9IDAsIGl0ZW1EaXNwbGF5TWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMgPSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNpemUgPSBjYWNoZVtzaXplUHJvcGVydHldID4gMCA/IGNhY2hlW3NpemVQcm9wZXJ0eV0gOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbURpc3BsYXlNZXRob2QgPSBjYWNoZT8ubWV0aG9kID8/IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJdGVtTmV3ID0gdGhpcy5fbmV3SXRlbXMuaW5kZXhPZihpZCkgPiAtMSB8fCAodGhpcy5faXNMYXp5ICYmIGlzU3RhcnQgJiYgIXRoaXMuX2lzUmVzZXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNOZXcgPSBpc0l0ZW1OZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdEJvdW5kcyA9IHNuYXBzaG90LmdldChpZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90U2l6ZSA9IHNuYXBzaG90Qm91bmRzID8gc25hcHNob3RCb3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNpemUgPSBNYXRoLm1heChyb3cuc2l6ZSwgY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNuYXBzaG90U2l6ZSA9IE1hdGgubWF4KHJvdy5zbmFwc2hvdFNpemUsIHNuYXBzaG90U2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IHJvdy5zaXplIC0gcm93LnNuYXBzaG90U2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoaWQsIHsgLi4uY2FjaGUsIG1ldGhvZDogaXNOZXcgPyBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFIDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VELCBbSVNfTkVXXTogaXNOZXcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQgJiYgaXNOZXcgJiYgeSA8PSAoc2Nyb2xsU2l6ZSArIHNpemUgKyBkZWx0YUZyb21TdGFydENyZWF0aW9uICsgY29tcG9uZW50U2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dTaXplRGVsdGEgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dTaXplRGVsdGEgPSB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmNhY2hlLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUsIFtJU19ORVddOiBpc05ldyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiBpc05ldyAmJiB5IDw9IChzY3JvbGxTaXplICsgc2l6ZSArIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gKyBjb21wb25lbnRTaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5kZWx0YUZyb21TdGFydENyZWF0aW9uID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICByb3cuc2l6ZSA9IE1hdGgubWF4KHJvdy5zaXplLCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICByb3cuc25hcHNob3RTaXplID0gcm93LnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U2l6ZURlbHRhID0gcm93LnNpemUgLSByb3cuc25hcHNob3RTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZWxldGVkSXRlbXNNYXAuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IGRlbGV0ZWRJdGVtc01hcFtpXSwgc2l6ZSA9IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSA/PyB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCBzY3JvbGxTaXplICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgLSBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gTWF0aC5tYXgocm93LmxlZnRTaXplT2ZEZWxldGVkSXRlbXMsIHNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUJ5SWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IGZyb21JdGVtSWQgJiYgaWQgPT09IHN0aWNreUl0ZW1JZCAmJiBzdGlja3kgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUNvbXBvbmVudFNpemUgPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbnVtLCBvZmZzZXQgfSA9IHRoaXMuZ2V0RWxlbWVudE51bVRvRW5kKGksIGNvbGxlY3Rpb24sIG1hcCwgdHlwaWNhbEl0ZW1TaXplLCBzaXplLCBpc1ZlcnRpY2FsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0Vmlld3BvcnRTaXplID0gc2l6ZSAtIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0Vmlld3BvcnRTaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbnVtOiBudW0xLCBvZmZzZXQ6IG9mZnNldDEgfSA9IHRoaXMuZ2V0RWxlbWVudE51bVRvRW5kKGkgKyBudW0sIGNvbGxlY3Rpb24sIG1hcCwgdHlwaWNhbEl0ZW1TaXplLCBzaXplLCBpc1ZlcnRpY2FsLCAwLCB0cnVlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFOdW0gPSAobnVtMSAtIG51bSksIGRlbHRhT2Zmc2V0ID0gKG9mZnNldDEgLSBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLT0gZGVsdGFOdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCA9IHJpZ2h0SXRlbUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IGRlbHRhT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHMuc3BsaWNlKGxlZnRJdGVtc09yUm93c1dlaWdodHMubGVuZ3RoIC0gZGVsdGFOdW0sIGRlbHRhTnVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IGRlbHRhT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1CeUlkID0gY29sbGVjdGlvbkl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZFBvcyA9IHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSByb3cuc3RhcnRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPD0gc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByb3cubGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cyA9IE1hdGgubWF4KHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzLCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICByb3cubGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gTWF0aC5tYXgocm93LmxlZnRIaWRkZW5JdGVtc1dlaWdodCwgY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ByZWNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IHJvdy5zdGFydEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1CeUlkID09PSBudWxsIHx8IHkgPCBpdGVtQnlJZFBvcyArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gcm93LmVuZEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIHJpZ2h0SXRlbXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5IDw9IHNjcm9sbFNpemUgKyBzaXplICsgY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNQcmVjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gcm93LmVuZEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByb3cudG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IE1hdGgubWF4KHJvdy50b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0LCBjb21wb25lbnRTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUm93RW5kICYmIHkgPD0gc2Nyb2xsU2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRTaXplT2ZBZGRlZEl0ZW1zID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubGVmdFNpemVPZlVwZGF0ZWRJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkRFTEVURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQgJiYgaXRlbURpc3BsYXlNZXRob2QgPT09IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmRlbHRhT2ZOZXdJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiBpIDwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5yaWdodEl0ZW1zV2VpZ2h0ID0gTWF0aC5tYXgocm93LnJpZ2h0SXRlbXNXZWlnaHQsIGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUHJlY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uICs9IHJvdy5kZWx0YUZyb21TdGFydENyZWF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyArPSByb3cubGVmdFNpemVPZkFkZGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gcm93LmxlZnRTaXplT2ZVcGRhdGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKz0gcm93LmxlZnRTaXplT2ZEZWxldGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtcyArPSByb3cuZGVsdGFPZk5ld0l0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ICs9IHJvdy5yaWdodEl0ZW1zV2VpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IHJvdy50b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgKz0gcm93LmxlZnRIaWRkZW5JdGVtc1dlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnB1c2gocm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSByb3cuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB5ICs9IHJvdy5zaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGg7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnVmZlNpemUgPSAtMTtcclxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplIDw9IHZpZXdwb3J0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgPiAwID8gKGwgLSAxKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gdmlld3BvcnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeSA8PSBsaW1pdCB8fCBidWZmU2l6ZSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZTaXplID0gbGVmdEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj0gbGltaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmU2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxjdWxhdGUobGkgLSBpLCBsLCBsaSwgdHJ1ZSwgU1RBUlRfQ09MTEVDVElPTl9QUkVGSVhfSUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRZT2Zmc2V0ID0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocm93IGFzIGFueSkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsIC0gMTsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjYWxjdWxhdGUoaSwgbCwgbGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAocm93IGFzIGFueSkgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHl5ID0geSwgY3VycmVudFRvdGFsU2l6ZSA9IHRvdGFsU2l6ZSwgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRUb3RhbFNpemUgPSB0b3RhbFNpemUgKyB2aWV3cG9ydFNpemU7XHJcbiAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJdGVtSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb246IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwLCBjb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoeSA8IG5vcm1hbGl6ZWRUb3RhbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FsY3VsYXRlKGksIGwsIGxpLCB0cnVlLCBFTkRfQ09MTEVDVElPTl9QUkVGSVhfSUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgeSA9IHl5O1xyXG4gICAgICAgICAgICAgICAgdG90YWxTaXplID0gY3VycmVudFRvdGFsU2l6ZTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQgPSBjb3VudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IChpc0Zyb21JZCA/IGl0ZW1CeUlkUG9zIDogc2Nyb2xsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA8PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDw9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHMuc3BsaWNlKDAsIGxlZnRJdGVtc09yUm93c1dlaWdodHMubGVuZ3RoIC0gYnVmZmVyU2l6ZSk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCArPSB2O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgbGVmdEl0ZW1zT2Zmc2V0KTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBzdGFydEluZGV4ID0gKE1hdGguY2VpbChNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gbGVmdEl0ZW1MZW5ndGgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApIC8gZGl2aWRlcykgKiBkaXZpZGVzKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAvLyBCdWZmZXIgb3B0aW1pemF0aW9uIGRvZXMgbm90IHdvcmsgb24gZmFzdCBsaW5lYXIgYWxnb3JpdGhtXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplIC8gZGl2aWRlcywgYnVmZmVySXRlbU51bWJlcnMgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IE1hdGguZmxvb3IoZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAhPT0gMCA/IChzY3JvbGxTaXplIC8gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgOiAwKTtcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBNYXRoLmNlaWwoZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAhPT0gMCA/ICgoc2Nyb2xsU2l6ZSArIHNpemUpIC8gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgOiAwKTtcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLCBidWZmZXJTaXplICogZGl2aWRlcyk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IChpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIGJ1ZmZlckl0ZW1OdW1iZXJzKSA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiBidWZmZXJJdGVtTnVtYmVycztcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihsZWZ0SXRlbUxlbmd0aCAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgLyB0eXBpY2FsSXRlbVNpemUpICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihyaWdodEl0ZW1MZW5ndGggKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplIC8gdHlwaWNhbEl0ZW1TaXplKSAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSkgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSBNYXRoLmZsb29yKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSkgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9ICh0b3RhbExlbmd0aCAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUpICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgKyB0aGlzLl9zY3JvbGxFbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGsgPSB0b3RhbFNpemUgIT09IDAgPyBwcmV2aW91c1RvdGFsU2l6ZSAvIHRvdGFsU2l6ZSA6IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY29sbGVjdGlvbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtW3RyYWNrQnldID09IGZyb21JdGVtSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZFBvcyA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgTWF0aC5mbG9vcihpbmRleCAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgLyBkaXZpZGVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSAoaXNGcm9tSWQgPyBpdGVtQnlJZFBvcyA6IHNjcm9sbFNpemUgKiBrKTtcclxuXHJcbiAgICAgICAgICAgIGl0ZW1zID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNJbmZpbml0eSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZTaXplID0gLTEsIHkgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplIDw9IHZpZXdwb3J0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgPiAwID8gKGwgLSAxKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gdmlld3BvcnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeSA8PSBsaW1pdCB8fCBidWZmU2l6ZSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZTaXplID0gbGVmdEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj0gbGltaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmU2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gbGkgLSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID4gaXRlbUluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChjb2xsZWN0aW9uW2l0ZW1JbmRleF0gYXMgSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0SXRlbUluUm93ID0gaWkgJSBkaXZpZGVzID09PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZW0gPSBpID09PSBsaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xhc3RJdGVtSW5Sb3cgfHwgKCFpc0xhc3RJdGVtSW5Sb3cgJiYgaXNMYXN0SXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICs9IGRpdmlkZWRUeXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRZT2Zmc2V0ID0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaXRlbXMucHVzaCguLi5jb2xsZWN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgeSA9IE1hdGguZmxvb3IodG90YWxTaXplIC8gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRUb3RhbFNpemUgPSB0b3RhbFNpemUgKyB2aWV3cG9ydFNpemU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gY29sbGVjdGlvbi5sZW5ndGgsIGxpID0gbCAtIDE7XHJcbiAgICAgICAgICAgICAgICBsZXQgaSA9IDAsIGNvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgIHdoaWxlICh5IDwgbm9ybWFsaXplZFRvdGFsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoIDw9IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY29sbGVjdGlvbltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0SXRlbUluUm93ID0gaWkgJSBkaXZpZGVzID09PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RJdGVtID0gaSA9PT0gbGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdEl0ZW1JblJvdyB8fCAoIWlzTGFzdEl0ZW1JblJvdyAmJiBpc0xhc3RJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB5ICs9IGRpdmlkZWRUeXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpaSA9PT0gbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByaWdodExheW91dEluZGV4T2Zmc2V0ID0gY291bnQ7XHJcbiAgICAgICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsIGxlZnRJdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgICAgICByaWdodEl0ZW1MZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIHJpZ2h0SXRlbXNPZmZzZXQgPiB0b3RhbExlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IChNYXRoLmNlaWwoTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAtIGxlZnRJdGVtTGVuZ3RoLCB0b3RhbExlbmd0aCA+IDAgPyB0b3RhbExlbmd0aCAtIDEgOiAwKSAvIGRpdmlkZXMpICogZGl2aWRlcyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAtIGxlZnRJdGVtTGVuZ3RoLCB0b3RhbExlbmd0aCA+IDAgPyB0b3RhbExlbmd0aCAtIDEgOiAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaXRlbXNPbkRpc3BsYXlXZWlnaHQgPSB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0IC0gbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIC0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC0gbGVmdEl0ZW1zV2VpZ2h0IC0gbGVmdFlPZmZzZXQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zID0gKE1hdGguY2VpbCgoaXRlbXNPbkRpc3BsYXlMZW5ndGggKyBsZWZ0SXRlbUxlbmd0aCArIHJpZ2h0SXRlbUxlbmd0aCkgLyBkaXZpZGVzKSAqIGRpdmlkZXMpICsgcmlnaHRMYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgc3RhcnRDcmVhdGlvbkRlbHRhID0gZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiA+IDAgPyBkZWx0YUZyb21TdGFydENyZWF0aW9uIDogMCxcclxuICAgICAgICAgICAgZGVsdGEgPSBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICsgbGVmdFNpemVPZkFkZGVkSXRlbXMgLSBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zICsgc3RhcnRDcmVhdGlvbkRlbHRhO1xyXG4gICAgICAgIHRoaXMuX2RlbHRhT2ZOZXdJdGVtcyA9IGRlbHRhT2ZOZXdJdGVtcztcclxuXHJcbiAgICAgICAgaWYgKGlzRnJvbUlkICYmICFpc1RhcmdldEluT3ZlcnNjcm9sbCkge1xyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplIC09IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbWV0cmljczogSU1ldHJpY3M8ST4gPSB7XHJcbiAgICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoOiB3LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodDogaCxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGRpdmlkZXMsXHJcbiAgICAgICAgICAgIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlXZWlnaHQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQsXHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgcmVuZGVySXRlbXMsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXMsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc3RpY2t5RW5hYmxlZCxcclxuICAgICAgICAgICAgc3RpY2t5UG9zLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4LFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0LFxyXG4gICAgICAgICAgICB0b3RhbExlbmd0aCxcclxuICAgICAgICAgICAgdG90YWxTaXplLFxyXG4gICAgICAgICAgICB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgICAgIGlzRnJvbUl0ZW1JZEZvdW5kLFxyXG4gICAgICAgICAgICBpc1VwZGF0aW5nLFxyXG4gICAgICAgICAgICBzbmFwVG9JdGVtLFxyXG4gICAgICAgICAgICBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgIGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1ldHJpY3M7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaENhY2hlKGNhY2hlOiBQcmVyZW5kZXJDYWNoZSkge1xyXG4gICAgICAgIHRoaXMuX3ByZXJlbmRlcmVkQ2FjaGUgPSBjYWNoZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRlbHRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RlbHRhID0gdGhpcy5fZGVsdGFPZk5ld0l0ZW1zID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VzKGltbWVkaWF0ZWx5OiBib29sZWFuID0gZmFsc2UsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaW1tZWRpYXRlbHkpIHtcclxuICAgICAgICAgICAgaWYgKGZvcmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bXBWZXJzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNWZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcclxuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChDQUNIRV9CT1hfQ0hBTkdFX0VWRU5UX05BTUUgYXMgQ2FjaGVNYXBFdmVudHMsIHRoaXMudmVyc2lvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGZvcmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1bXBWZXJzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hhbmdlc0RldGVjdGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJ1bXBWZXJzaW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBib3VuZHMgb2YgYXQgbGVhc3Qgb25lIHNjcmVlbiBvYmplY3QgaGF2ZSBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBjaGVja0JvdW5kc09mRWxlbWVudHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50c1tpXSwgaXRlbUlkID0gY29tcG9uZW50Lmluc3RhbmNlLml0ZW1JZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSBjb21wb25lbnQuaW5zdGFuY2UuZ2V0Qm91bmRzKCksIGNhY2hlID0gdGhpcy5nZXQoaXRlbUlkKTtcclxuICAgICAgICAgICAgaWYgKCEhYm91bmRzICYmICEhY2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChib3VuZHMud2lkdGggIT09IGNhY2hlLndpZHRoIHx8IGJvdW5kcy5oZWlnaHQgIT09IGNhY2hlLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGFjdHVhbEl0ZW1zOiBDLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG1ldHJpY3M6IElNZXRyaWNzPEk+KTogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGRpdmlkZXMsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0OiBsYXlvdXRPZmZzZXQsXHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRJbmRleE9mZnNldDogbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zOiByZW5kZXJJdGVtc0xlbmd0aCxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgc2l6ZVByb3BlcnR5LFxyXG4gICAgICAgICAgICBzdGlja3lFbmFibGVkLFxyXG4gICAgICAgICAgICBzdGlja3lQb3MsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgIHRvdGFsTGVuZ3RoLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4LFxyXG4gICAgICAgICAgICB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgICAgIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgIH0gPSBtZXRyaWNzLFxyXG4gICAgICAgICAgICBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUsIGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA9IHN0aWNreVBvcyxcclxuICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgIGRlbHRhT2ZmZXQgPSAoaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID8gc2Nyb2xsU2l6ZSA6IDApLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgYm91bmRzU2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCwgYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uID0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSB0aGlzLl9zY3JvbGxFbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgPSByZW5kZXJJdGVtc0xlbmd0aCxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIG5leHRTdGlja3k6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIHN0aWNreUl0ZW1JbmRleCA9IC0xLFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSAwLCBlbmRTdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0RW5kU3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gLTEsIGVuZFN0aWNreUl0ZW1TaXplID0gMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxpID0gbGF5b3V0SW5kZXhPZmZzZXQgKyBhY3R1YWxJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBpZiAoc3RpY2t5RW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPiAwID8gKGRpdmlkZXMgPiAxID8gKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSAxKSA6IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQpIDogMCwgdG90YWxMZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uSXRlbSA9IGl0ZW1zW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0R1bW15ID0gY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldICYmIChjb2xsZWN0aW9uSXRlbT8uW1NFUlZJQ0VfUFJPUF9EVU1NWV0gPT09IFNFUlZJQ0VfUFJPUF9EVU1NWV9FTkFCTEVEKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25JdGVtIHx8IGlzRHVtbXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gTWF0aC5mbG9vcigoKGl0ZW1zLmxlbmd0aCAtIGxheW91dEluZGV4T2Zmc2V0ICsgaSkgKyAxKSAvIGRpdmlkZXMpLCBpZCA9IGNvbGxlY3Rpb25JdGVtW3RyYWNrQnldLCBjYWNoZSA9IHRoaXMuZ2V0KGlkKSEsIHN0aWNreSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zZWxlY3RhYmxlID8/IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LmNvbGxhcHNhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZHluYW1pY1NpemUgPyBjYWNoZT8uW3NpemVQcm9wZXJ0eV0gPiAwID8gY2FjaGU/LltzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplIDogdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24gPSBwb3MgLSAoc2Nyb2xsU2l6ZSAtIHNpemUpIC0gc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmF0aW8gPSBzaXplICE9PSAwID8gYm91bmRzU2l6ZSAvIHNpemUgOiAwLCBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ID0gLShib3VuZHNTaXplICE9PSAwID8gYWJzb2x1dGVTdGFydFBvc2l0aW9uIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb24gPSBib3VuZHNTaXplIC0gKGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQgKyBzaXplKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQgPSAoYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCArIChib3VuZHNTaXplICE9PSAwID8gKGFic29sdXRlRW5kUG9zaXRpb24gKyBzaXplKSAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGlzVmVydGljYWwgPyAwIDogYWN0dWFsU25pcHBlZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0gaXNWZXJ0aWNhbCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXM6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1NZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRYOiB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkWTogeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25aOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVaOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpc1ZlcnRpY2FsID8gbm9ybWFsaXplZEl0ZW1XaWR0aCA6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gc2l6ZSA6IG5vcm1hbGl6ZWRJdGVtSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogcm93SW5kZXggJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46IHJvd0luZGV4ICUgMiA9PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IHN0aWNreSA9PT0gMSA/IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0IDogc3RpY2t5ID09PSAyID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gZGVsdGFPZmZldCAtIHNpemUgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTaXplOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3Q6IGkgPT09IGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdDogaSA9PT0gbGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3OiAoY2FjaGUgYXMgQ2FjaGUpPy5bSVNfTkVXXSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IGlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXA6IHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkT3V0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGl0ZW1zLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogaSAtIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IFpfSU5ERVhfMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGNvbGxlY3Rpb25JdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBwcmV2aW91c2VEYXRhOiBpID4gMCA/IGl0ZW1zW2kgLSAxXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RGF0YTogaSA8IHRvdGFsTGVuZ3RoID8gaXRlbXNbaSArIDFdIDogbnVsbCwgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtU2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChzdGlja3lJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RpY2t5RW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2kgPSBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kICsgaXRlbXNPbkRpc3BsYXlMZW5ndGggLSAxLCBzdGFydEluZGV4ID0gc2kgPCAwID8gc2kgOiBzaTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihzdGFydEluZGV4LCB0b3RhbExlbmd0aCA+IDAgPyB0b3RhbExlbmd0aCAtIDEgOiAwKSxcclxuICAgICAgICAgICAgICAgICAgICByb3dJbmRleCA9IE1hdGguZmxvb3IoKChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICsgMSkgLyBkaXZpZGVzKSxcclxuICAgICAgICAgICAgICAgICAgICBsID0gdG90YWxMZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uSXRlbSA9IGl0ZW1zW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0R1bW15ID0gY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldICYmIChjb2xsZWN0aW9uSXRlbT8uW1NFUlZJQ0VfUFJPUF9EVU1NWV0gPT09IFNFUlZJQ0VfUFJPUF9EVU1NWV9FTkFCTEVEKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25JdGVtIHx8IGlzRHVtbXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gY29sbGVjdGlvbkl0ZW1bdHJhY2tCeV0sIGNhY2hlID0gdGhpcy5nZXQoaWQpISwgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uY29sbGFwc2FibGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBkeW5hbWljU2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjYWNoZT8uW3NpemVQcm9wZXJ0eV0gfHwgdHlwaWNhbEl0ZW1TaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RpY2t5ID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT2RkID0gKGl0ZW1zLmxlbmd0aCAtIGxheW91dEluZGV4T2Zmc2V0ICsgaSkgJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ID0gaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBzaXplLCBoID0gaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvbiA9IHBvcyAtIChzY3JvbGxTaXplIC0gc2l6ZSkgLSBzaXplLCByYXRpbyA9IHNpemUgIT09IDAgPyBib3VuZHNTaXplIC8gc2l6ZSA6IDAsIGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQgPSAtKGJvdW5kc1NpemUgIT09IDAgPyBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24gLyBib3VuZHNTaXplIDogMCkgKiByYXRpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb24gPSBib3VuZHNTaXplIC0gKGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQgKyBzaXplKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50ID0gKGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQgKyAoYm91bmRzU2l6ZSAhPT0gMCA/IChhYnNvbHV0ZUVuZFBvc2l0aW9uICsgc2l6ZSkgLyBib3VuZHNTaXplIDogMCkgKiByYXRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gaXNWZXJ0aWNhbCA/IDAgOiBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSB3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGlzVmVydGljYWwgPyBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBoIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVzOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtTWVhc3VyZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkWDogeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFk6IHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgejogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25ZOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWjogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IHJvd0luZGV4ICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiByb3dJbmRleCAlIDIgPT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gZGVsdGFPZmZldCAtIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjb25maWc6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNpemU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdDogaSA9PT0gbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0OiBpID09PSBsaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXc6IChjYWNoZSBhcyBDYWNoZSk/LltJU19ORVddID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogIWlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcDogc3RpY2t5RW5hYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtczogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiBpIC0gbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogWl9JTkRFWF8xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gY29sbGVjdGlvbkl0ZW07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksIGlkLCBtZWFzdXJlcywgZGF0YTogaXRlbURhdGEsIHByZXZpb3VzZURhdGE6IGkgPiAwID8gaXRlbXNbaSAtIDFdIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHREYXRhOiBpIDwgdG90YWxMZW5ndGggPyBpdGVtc1tpICsgMV0gOiBudWxsLCBjb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW1JbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW1TaXplID0gc2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJdGVtcy5wdXNoKGVuZFN0aWNreUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25MZW5ndGggPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBpID0gc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgICAgIGNpID0gMCxcclxuICAgICAgICAgICAgICAgIHJvdzoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBvZGQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbjogYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgIH0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICBvZGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgd2hpbGUgKHJlbmRlckl0ZW1zID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gY29sbGVjdGlvbkxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICghY29sbGVjdGlvbkl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0R1bW15ID0gY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldICYmIChjb2xsZWN0aW9uSXRlbT8uW1NFUlZJQ0VfUFJPUF9EVU1NWV0gPT09IFNFUlZJQ0VfUFJPUF9EVU1NWV9FTkFCTEVEKSxcclxuICAgICAgICAgICAgICAgICAgICBpaSA9IGkgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gTWF0aC5mbG9vcigoKGl0ZW1zLmxlbmd0aCAtIGxheW91dEluZGV4T2Zmc2V0ICsgaSkgKyAxKSAvIGRpdmlkZXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gY29sbGVjdGlvbkl0ZW1bdHJhY2tCeV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSB0aGlzLmdldChpZCkhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemUgPSBpc0R1bW15ID8gdHlwaWNhbEl0ZW1TaXplIDogKGR5bmFtaWNTaXplID8gY2FjaGU/LltzaXplUHJvcGVydHldIHx8IHR5cGljYWxJdGVtU2l6ZSA6IHR5cGljYWxJdGVtU2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGl2U2l6ZSA9IChpc1ZlcnRpY2FsID8gbm9ybWFsaXplZEl0ZW1XaWR0aCA6IG5vcm1hbGl6ZWRJdGVtSGVpZ2h0KSAvIGRpdmlkZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGkgJSBkaXZpZGVzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2kgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiByb3dJbmRleCAlIDIgIT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46IHJvd0luZGV4ICUgMiA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb3cuc2l6ZSA9IE1hdGgubWF4KHJvdy5zaXplLCBzaXplKTtcclxuICAgICAgICAgICAgICAgICAgICBjaSsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghaXNEdW1teSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkIHx8IGlkICE9PSBzdGlja3lJdGVtPy5pZCkgJiYgaWQgIT09IGVuZFN0aWNreUl0ZW0/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT2RkID0gKGl0ZW1zLmxlbmd0aCAtIGxheW91dEluZGV4T2Zmc2V0ICsgaSkgJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsU2l6ZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5mdWxsU2l6ZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uY29sbGFwc2FibGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkID0gc3RpY2t5RW5hYmxlZCAmJiAoc3RpY2t5ID09PSAxICYmIChwb3MgPD0gc2Nyb2xsU2l6ZSArIHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0KSB8fCBzdGlja3kgPT09IDIgJiYgKHBvcyA+PSBzY3JvbGxTaXplICsgYm91bmRzU2l6ZSAtIHNpemUpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvbiA9IHBvcyAtIHNjcm9sbFNpemUsIHJhdGlvID0gc2l6ZSAhPT0gMCA/IGJvdW5kc1NpemUgLyBzaXplIDogMCwgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCA9IC0oYm91bmRzU2l6ZSAhPT0gMCA/IGFic29sdXRlU3RhcnRQb3NpdGlvbiAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvbiA9IGJvdW5kc1NpemUgLSAoYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCArIHNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQgPSAoYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCArIChib3VuZHNTaXplICE9PSAwID8gKGFic29sdXRlRW5kUG9zaXRpb24gKyBzaXplKSAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBpc1ZlcnRpY2FsID8gZGl2U2l6ZSAqICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IDAgOiBjaSkgOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gaXNWZXJ0aWNhbCA/IHBvcyA6IGRpdlNpemUgKiAoKHN0aWNreSB8fCBmdWxsU2l6ZSkgPyAwIDogY2kpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXM6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1NZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRYOiB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkWTogeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25aOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVaOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGlzVmVydGljYWwgPyAoKHN0aWNreSB8fCBmdWxsU2l6ZSkgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogKG5vcm1hbGl6ZWRJdGVtV2lkdGggLyBkaXZpZGVzKSkgOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiAoKHN0aWNreSB8fCBmdWxsU2l6ZSkgPyBub3JtYWxpemVkSXRlbUhlaWdodCA6IChub3JtYWxpemVkSXRlbUhlaWdodCAvIGRpdmlkZXMpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IHN0aWNreSA9PT0gMSA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IHN0aWNreSA9PT0gMiA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGRlbHRhT2ZmZXQgLSBzaXplIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZzogSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0OiBpID09PSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3Q6IGkgPT09IGxpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldzogKGNhY2hlIGFzIENhY2hlKT8uW0lTX05FV10gPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreTogc3RpY2t5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXA6IHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg6IGkgLSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N0dWI6IChpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgaWQgPT09IHN0aWNreUl0ZW0/LmlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiBaX0lOREVYXzAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy56SW5kZXggPSBaX0lOREVYXzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gY29sbGVjdGlvbkl0ZW07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksIGlkLCBtZWFzdXJlcywgZGF0YTogaXRlbURhdGEsIHByZXZpb3VzZURhdGE6IGkgPiAwID8gaXRlbXNbaSAtIDFdIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHREYXRhOiBpIDwgdG90YWxMZW5ndGggPyBpdGVtc1tpICsgMV0gOiBudWxsLCBjb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dFN0aWNreSAmJiBzdGlja3lJdGVtSW5kZXggPCBpICYmIHN0aWNreSA9PT0gMSAmJiAocG9zIDw9IHNjcm9sbFNpemUgKyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIHNpemUgKyBzdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueCA9IGlzVmVydGljYWwgPyAwIDogc25hcHBlZCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IHNuYXBwZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBpdGVtLm1lYXN1cmVzLnkgOiBpdGVtLm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnpJbmRleCA9IFpfSU5ERVhfMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRFbmRTdGlja3kgJiYgZW5kU3RpY2t5SXRlbUluZGV4ID4gaSAmJiBzdGlja3kgPT09IDIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3MgPj0gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSAtIGVuZFN0aWNreUl0ZW1TaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy54ID0gaXNWZXJ0aWNhbCA/IDAgOiBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcyA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnpJbmRleCA9IFpfSU5ERVhfMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy55IDogaXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtcy0tO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlpICUgZGl2aWRlcyA9PT0gMCB8fCByZW5kZXJJdGVtcyA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zICs9IHJvdy5zaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBheGlzID0gaXNWZXJ0aWNhbCA/IFlfUFJPUF9OQU1FIDogWF9QUk9QX05BTUU7XHJcblxyXG4gICAgICAgICAgICBpZiAoISFuZXh0U3RpY2t5ICYmICEhc3RpY2t5SXRlbSAmJiBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIDw9IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiArIHN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA+IHNjcm9sbFNpemUgLSBzdGlja3lJdGVtU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIC0gc3RpY2t5SXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZCA9IG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLmNvbmZpZy5zdGlja3kgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IHN0aWNreUl0ZW0ubWVhc3VyZXMueSA6IHN0aWNreUl0ZW0ubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBuZXh0U3RpY2t5Lm1lYXN1cmVzLnkgOiBuZXh0U3RpY2t5Lm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gc3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSArIHN0aWNreUl0ZW0ubWVhc3VyZXNbc2l6ZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEhbmV4dEVuZFN0aWNreSAmJiAhIWVuZFN0aWNreUl0ZW0gJiZcclxuICAgICAgICAgICAgICAgIChuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdID49IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGVuZFN0aWNreUl0ZW1TaXplIC0gbmV4dEVuZFN0aWNreS5tZWFzdXJlc1tzaXplUHJvcGVydHldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPCBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gbmV4dEVuZFN0aWNreS5tZWFzdXJlc1theGlzXSArIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkID0gbmV4dEVuZFN0aWNreS5jb25maWcuc25hcHBlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0uY29uZmlnLnN0aWNreSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy55IDogZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPSBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gbmV4dEVuZFN0aWNreS5tZWFzdXJlcy55IDogbmV4dEVuZFN0aWNreS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gKyBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtVHJhbnNmb3JtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRpc3BsYXlJdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGlzcGxheUl0ZW1zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtYXRpb24gPSBpdGVtVHJhbnNmb3JtKGl0ZW0uaW5kZXgsIG9iamVjdEFzUmVhZG9ubHkoaXRlbS5tZWFzdXJlcyksIG9iamVjdEFzUmVhZG9ubHkoaXRlbS5jb25maWcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy50cmFuc2Zvcm1lZFggPSB0cmFuc2Zvcm1hdGlvbi54O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnRyYW5zZm9ybWVkWSA9IHRyYW5zZm9ybWF0aW9uLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueiA9IHRyYW5zZm9ybWF0aW9uLno7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMucm90YXRpb25YID0gdHJhbnNmb3JtYXRpb24ucm90YXRpb25YO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnJvdGF0aW9uWSA9IHRyYW5zZm9ybWF0aW9uLnJvdGF0aW9uWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5yb3RhdGlvblogPSB0cmFuc2Zvcm1hdGlvbi5yb3RhdGlvblo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMuc2NhbGVYID0gdHJhbnNmb3JtYXRpb24uc2NhbGVYO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnNjYWxlWSA9IHRyYW5zZm9ybWF0aW9uLnNjYWxlWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5zY2FsZVogPSB0cmFuc2Zvcm1hdGlvbi5zY2FsZVo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLm9wYWNpdHkgPSB0cmFuc2Zvcm1hdGlvbi5vcGFjaXR5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5maWx0ZXIgPSB0cmFuc2Zvcm1hdGlvbi5maWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLmJsZW5kQ29sb3IgPSB0cmFuc2Zvcm1hdGlvbi5ibGVuZENvbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy56SW5kZXggPSBTdHJpbmcodHJhbnNmb3JtYXRpb24uekluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICByZXNldFBvc2l0aW9ucygpIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLmNsZWFyVHJhY2tNYXAoKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdHJhY2tpbmcgYnkgcHJvcE5hbWVcclxuICAgICAqL1xyXG4gICAgdHJhY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pdGVtcyB8fCAhdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci50cmFjayh0aGlzLl9pdGVtcywgdGhpcy5fZGlzcGxheUNvbXBvbmVudHMsIHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cywgdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLCB0aGlzLl90cmFja0J5KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHY6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIuZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgdW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQ/OiBDIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci51bnRyYWNrQ29tcG9uZW50QnlJZFByb3BlcnR5KGNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGlkKSA/PyBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21wb25lbnRCb3VuZHNCeUludGVyc2VjdGlvblBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIsIG1heFBvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbCk6IChJUmVjdCAmIHsgaWQ6IElkIHwgbnVsbDsgaXNGaXJzdDogYm9vbGVhbjsgaXNMYXN0OiBib29sZWFuOyB9KSB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuICAgICAgICBsZXQgZmlyc3Q6IChJUmVjdCAmIHsgaWQ6IElkIHwgbnVsbDsgaXNGaXJzdDogYm9vbGVhbjsgaXNMYXN0OiBib29sZWFuOyB9KSB8IG51bGwgPSBudWxsLFxyXG4gICAgICAgICAgICBsYXN0OiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsID0gbnVsbDtcclxuICAgICAgICBpZiAoISFjb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcCBvZiBjb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGNvbXAuaW5zdGFuY2UuaXRlbUlkID8/IG51bGwsIGlzVmVydGljYWwgPSBjb21wLmluc3RhbmNlLml0ZW0/LmNvbmZpZz8uaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICB4ID0gY29tcC5pbnN0YW5jZS5pdGVtPy5tZWFzdXJlcz8ueCA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBjb21wLmluc3RhbmNlLml0ZW0/Lm1lYXN1cmVzPy55ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8uY29uZmlnPy5pc0ZpcnN0ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8uY29uZmlnPy5pc0xhc3QgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjb21wLmluc3RhbmNlLmdldEJvdW5kcygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWwgJiYgKHBvcyA+PSB5ICYmIHBvcyA8IHkgKyBoZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGlzRmlyc3QsIGlzTGFzdCB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNWZXJ0aWNhbCAmJiAocG9zID49IHggJiYgcG9zIDwgeCArIHdpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB7IGlkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHsgaWQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGlzRmlyc3QsIGlzTGFzdCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4UG9zaXRpb24gIT09IG51bGwgJiYgcG9zaXRpb24gPiBtYXhQb3NpdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbGFzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9kZWJvdW5jZWRJc1Njcm9sbFN0YXJ0T2ZmID0gZGVib3VuY2UoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHByb3RlY3RlZCBjYWNoZUVsZW1lbnRzKGlzVmVydGljYWw6IGJvb2xlYW4sIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldLCBpdGVtSWQgPSBjb21wb25lbnQuaW5zdGFuY2UuaXRlbUlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGNvbXBvbmVudC5pbnN0YW5jZS5nZXRCb3VuZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXQoaXRlbUlkLCB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldChpdGVtSWQpLCAuLi5ib3VuZHMsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogYm91bmRzLndpZHRoIHx8IChpc1ZlcnRpY2FsID8gMCA6IGl0ZW1TaXplKSxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodCB8fCAoaXNWZXJ0aWNhbCA/IGl0ZW1TaXplIDogMCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNMYXp5ICYmICh0aGlzLl9pc1Njcm9sbFN0YXJ0KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkSXNTY3JvbGxTdGFydE9mZi5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLl9wcmVyZW5kZXJlZENhY2hlO1xyXG4gICAgICAgIGlmICghIWNhY2hlKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gY2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlSXRlbSA9IGNhY2hlW2lkXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGlkLCB7IC4uLih0aGlzLmdldChpZCkgfHwge30pLCAuLi5jYWNoZUl0ZW0gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcHJlcmVuZGVyZWRDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Q2FjaGVDaHVua0luZm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbmV3SXRlbXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjYWNoZUNsZWFuKCkge1xyXG4gICAgICAgIHRoaXMuX21hcC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuX3NuYXBzaG90LmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgZGlzcG9zZSgpIHtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCk7XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuX2RlYm91bmNlZElzU2Nyb2xsU3RhcnRPZmYpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkSXNTY3JvbGxTdGFydE9mZi5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISF0aGlzLl90cmFja2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
1358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2stYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS90cmFjay1ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFDSCxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUMxSCxXQUFXLEVBQUUsV0FBVyxHQUMzQixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsaUNBQWlDLEVBQUUsa0NBQWtDLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQ2xJLE1BQU0sRUFBRSwwQkFBMEIsR0FDckMsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUt2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFFBQ1QsU0FBUSxRQUFzRDtJQUVwRCxRQUFRLENB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QztZQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRVEsT0FBTztRQUNaLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVoQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uLCB9IGZyb20gXCIuLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB9IGZyb20gXCIuLi9tb2RlbHMvcmVuZGVyLWl0ZW0ubW9kZWxcIjtcclxuaW1wb3J0IHsgSWQgfSBmcm9tIFwiLi4vdHlwZXMvaWRcIjtcclxuaW1wb3J0IHsgQ0FDSEVfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCBDYWNoZU1hcCB9IGZyb20gXCIuL2NhY2hlLW1hcFwiO1xyXG5pbXBvcnQgeyBUcmFja2VyIH0gZnJvbSBcIi4vdHJhY2tlclwiO1xyXG5pbXBvcnQgeyBJUmVjdCwgSVNpemUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgREVGQVVMVF9ESVZJREVTLCBIRUlHSFRfUFJPUF9OQU1FLCBTRVJWSUNFX1BST1BfRFVNTVksIFNFUlZJQ0VfUFJPUF9EVU1NWV9FTkFCTEVELCBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgICBYX1BST1BfTkFNRSwgWV9QUk9QX05BTUUsXHJcbn0gZnJvbSBcIi4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcsIElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1NZWFzdXJlcywgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHsgQ01hcCB9IGZyb20gJy4uL3V0aWxzL2NtYXAnO1xyXG5pbXBvcnQgeyBidWZmZXJJbnRlcnBvbGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzL2J1ZmZlci1pbnRlcnBvbGF0aW9uXCI7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vYmFzZVwiO1xyXG5pbXBvcnQgeyBQcmVyZW5kZXJDYWNoZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL25nLXByZXJlbmRlci1jb250YWluZXIvdHlwZXMvY2FjaGVcIjtcclxuaW1wb3J0IHsgU2Nyb2xsRGlyZWN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IG9iamVjdEFzUmVhZG9ubHkgfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0XCI7XHJcbmltcG9ydCB7IGdldFNlcnZpY2VJZFByb3AgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xELCBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RILCBERUZBVUxUX1JFU0VUX0JVRkZFUl9TSVpFX1RJTUVPVVQsIEVORF9DT0xMRUNUSU9OX1BSRUZJWF9JRCxcclxuICAgIElTX05FVywgU1RBUlRfQ09MTEVDVElPTl9QUkVGSVhfSUQsXHJcbn0gZnJvbSBcIi4vY29uc3RcIjtcclxuaW1wb3J0IHsgWl9JTkRFWF8wLCBaX0lOREVYXzEsIFpfSU5ERVhfMiwgWl9JTkRFWF8zLCB9IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHtcclxuICAgIElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJR2V0TWV0cmljc1JldHVybnMsIElJdGVtLCBJTWV0cmljcywgSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucyxcclxuICAgIElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyxcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFRyYWNrQm94RXZlbnRzIH0gZnJvbSBcIi4vZXZlbnRzXCI7XHJcbmltcG9ydCB7IENhY2hlLCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnMgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBJdGVtRGlzcGxheU1ldGhvZHMgfSBmcm9tIFwiLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBbGlnbm1lbnRzIH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcblxyXG4vKipcclxuICogQW4gb2JqZWN0IHRoYXQgcGVyZm9ybXMgdHJhY2tpbmcsIGNhbGN1bGF0aW9ucyBhbmQgY2FjaGluZy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb3JlL3RyYWNrLWJveC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja0JveDxDIGV4dGVuZHMgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCA9IGFueT5cclxuICAgIGV4dGVuZHMgQ2FjaGVNYXA8SWQsIENhY2hlLCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnM+IHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RyYWNrZXIhOiBUcmFja2VyPEM+O1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHNldCBpdGVtcyh2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcyA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGRpc3BsYXlDb21wb25lbnRzKHY6IEFycmF5PENvbXBvbmVudFJlZjxDPj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IHNuYXBwZWREaXNwbGF5Q29tcG9uZW50cyh2OiBBcnJheTxDb21wb25lbnRSZWY8Qz4+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uID0gMDtcclxuICAgIHNldCBzY3JvbGxEaXJlY3Rpb24odjogU2Nyb2xsRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbERpcmVjdGlvbiA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24gPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbERpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX3Njcm9sbERpcmVjdGlvbjsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tCeTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuICAgIHNldCB0cmFja0J5KHY6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLl90cmFja0J5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrQnkgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl90cmFja0J5OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXZpZGVzOiBudW1iZXIgPSBERUZBVUxUX0RJVklERVM7XHJcblxyXG4gICAgc2V0IGRpdmlkZXModjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RpdmlkZXMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGl2aWRlcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0luZmluaXR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzSW5maW5pdHkodjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzSW5maW5pdHkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNMYXp5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzTGF6eSh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzTGF6eSA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc0xhenkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB0cmFja0J5IHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHNldCB0cmFja2luZ1Byb3BlcnR5TmFtZSh2OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSA9IHRoaXMuX3RyYWNrZXIudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc1Njcm9sbFN0YXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsU3RhcnQodjogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB2O1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2Nyb2xsU25hcFRvU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsRW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsRW5kKHY6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9pc1Njcm9sbEVuZCA9IHY7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9FbmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsU25hcFRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9TdGFydCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxTdGFydCB8fCB0aGlzLl9pc1Njcm9sbFNuYXBUb1N0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTY3JvbGxTbmFwVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9FbmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2Nyb2xsRW5kIHx8IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2Nyb2xsU3RhcnRPZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgc2Nyb2xsU3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbEVuZE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzY3JvbGxFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0ID0gdjtcclxuICAgIH1cclxuICAgIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVuZE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBjYWNoZTogQ2FjaGUpOiBDTWFwPElkLCBJU2l6ZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9tYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICBjb25zdCBiID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgIGlmIChiPy53aWR0aCA9PT0gY2FjaGUud2lkdGggJiYgYj8uaGVpZ2h0ID09PSBjYWNoZS5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl9tYXAuc2V0KGlkLCBjYWNoZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzQ29sbGVjdGlvbjogQXJyYXk8SUl0ZW0+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG4gICAgZ2V0IGNydWREZXRlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2NydWREZXRlY3RlZDsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlSWZOZWVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl92ZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGZpcmVUaWNrKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuVElDSyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1RvdGFsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWx0YU9mTmV3SXRlbXM6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgZGVsdGFPZk5ld0l0ZW1zKCkgeyByZXR1cm4gdGhpcy5fZGVsdGFPZk5ld0l0ZW1zOyB9XHJcblxyXG4gICAgaXNBZGFwdGl2ZUJ1ZmZlciA9IHRydWU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkID0gREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xEO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGggPSBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RIO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZVNlcXVlbmNlOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl9idWZmZXJTaXplOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0QnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNpemU6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzUmVzZXRlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcmVuZGVyZWRDYWNoZTogUHJlcmVuZGVyQ2FjaGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIF9uZXdJdGVtczogQXJyYXk8SWQ+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGxpZmVDaXJjbGUoKSB7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlSWZOZWVkKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlyZVRpY2soKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlQ2lyY2xlRG8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBjb2xsZWN0aW9uIGZvciBkZWxldGVkIGl0ZW1zIGFuZCBmbHVzaGVzIHRoZSBkZWxldGVkIGl0ZW0gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q29sbGVjdGlvbiAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBjdXJyZW50Q29sbGVjdGlvbiA9PT0gdGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQXR0ZW50aW9uISBUaGUgY29sbGVjdGlvbiBtdXN0IGJlIGltbXV0YWJsZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRlZCA9ICgoIXRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiB8fCB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAgICAgICAoISFjdXJyZW50Q29sbGVjdGlvbiAmJiBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzUmVzZXRlZCA9IHJlc2V0ZWQ7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUodGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uLCBjdXJyZW50Q29sbGVjdGlvbiwgaXRlbVNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24gPSBbLi4uKGN1cnJlbnRDb2xsZWN0aW9uIHx8IFtdKV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIGNhY2hlIG9mIGl0ZW1zIGZyb20gdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNhY2hlPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihwcmV2aW91c0NvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1cnJlbnRDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICAgICAgICBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lO1xyXG4gICAgICAgIGxldCBjcnVkRGV0ZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9uZXdJdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnRDb2xsZWN0aW9uIHx8IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHByZXZpb3VzQ29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWl0ZW0gJiYgdGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c0NvbGxlY3Rpb24gfHwgcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIGFkZGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkRpY3Q6IElJdGVtPEk+ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldO1xyXG4gICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGljdFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgbm90Q2hhbmdlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZEl0ZW1zTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSVNpemUgfSA9IHt9LFxyXG4gICAgICAgICAgICB1cGRhdGVkTWFwOiBJSXRlbTxJPiA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25EaWN0Lmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBjb2xsZWN0aW9uRGljdFtpZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90Q2hhbmdlZE1hcFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0aGlzLl9tYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNYXBbaXRlbVt0cmFja0J5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odGhpcy5fbWFwLmdldChpZCkgfHwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZE1hcFtpZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwW2ldID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSAmJiAhZGVsZXRlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgIXVwZGF0ZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpICYmXHJcbiAgICAgICAgICAgICAgICAhbm90Q2hhbmdlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25ld0l0ZW1zLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGNydWREZXRlY3RlZDtcclxuICAgICAgICB0aGlzLl9kZWxldGVkSXRlbXNNYXAgPSBkZWxldGVkSXRlbXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgcG9zaXRpb24gb2YgYSBjb2xsZWN0aW9uIGVsZW1lbnQgYnkgdGhlIGdpdmVuIElkXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1Qb3NpdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaWQ6IElkLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG9wdGlvbnM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPEksIEM+KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGZyb21JdGVtSWQ6IGlkID8/IG9wdGlvbnMuZnJvbUl0ZW1JZCwgaXRlbUNvbmZpZ01hcCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCB7IHNjcm9sbFNpemUsIGlzRnJvbUl0ZW1JZEZvdW5kIH0gPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemU6IHRoaXMuX2NydWREZXRlY3RlZCB8fCBvcHQuZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcDogdGhpcy5fZGVsZXRlZEl0ZW1zTWFwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpc0Zyb21JdGVtSWRGb3VuZCA/IHNjcm9sbFNpemUgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2ZW50U2Nyb2xsU25hcHBpbmcoY2xlYXJCdWZmZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB0aGlzLl9pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoY2xlYXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9TdGFydCA9IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgZ2V0TWV0cmljczxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSUdldE1ldHJpY3NSZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgY3J1ZERldGVjdGVkID0gdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAgPSB0aGlzLl9kZWxldGVkSXRlbXNNYXA7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgPSBvcHQuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLl9tYXhCdWZmZXJTaXplID0gb3B0Lm1heEJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbjogaXRlbXMsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgdG90YWxTaXplOiBtZXRyaWNzLnRvdGFsU2l6ZSwgZGVsdGE6IG1ldHJpY3MuZGVsdGEsIGNydWREZXRlY3RlZCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSVVwZGF0ZUNvbGxlY3Rpb25SZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgZHluYW1pY1NpemUgPSBvcHQuZHluYW1pY1NpemUsIGNydWREZXRlY3RlZCA9IHRoaXMuX2NydWREZXRlY3RlZCxcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwID0gdGhpcy5fZGVsZXRlZEl0ZW1zTWFwO1xyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMob3B0LmlzVmVydGljYWwsIG9wdC5pdGVtU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGl0ZW1zLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlbHRhICs9IG1ldHJpY3MuZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXMobWV0cmljcywgaXRlbXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNUb3RhbFNpemUgPSBtZXRyaWNzLnRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZEl0ZW1zTWFwID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAob3B0LmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbihtZXRyaWNzLml0ZW1zLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5tZXRyaWNzLCB9KTtcclxuICAgICAgICByZXR1cm4geyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogbWV0cmljcy50b3RhbFNpemUsIGRlbHRhOiBtZXRyaWNzLmRlbHRhLCBjcnVkRGV0ZWN0ZWQsIGxlZnRMYXlvdXRPZmZzZXQ6IG1ldHJpY3MubGVmdExheW91dE9mZnNldCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJldmlvdXNTY3JvbGxTaXplID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXM8SSBleHRlbmRzIElJdGVtPihtZXRyaWNzOiBJTWV0cmljczxJPiwgdG90YWxJdGVtc0xlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IG1ldHJpY3Muc2Nyb2xsU2l6ZSArIHRoaXMuX2RlbHRhLCBkZWx0YSA9IE1hdGguYWJzKHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyUmF3U2l6ZSA9IE1hdGgubWluKE1hdGguZmxvb3IobWV0cmljcy50eXBpY2FsSXRlbVNpemUgIT09IDAgPyBkZWx0YSAvIG1ldHJpY3MudHlwaWNhbEl0ZW1TaXplIDogMCkgKiA1LCB0b3RhbEl0ZW1zTGVuZ3RoKSxcclxuICAgICAgICAgICAgbWluQnVmZmVyU2l6ZSA9IGJ1ZmZlclJhd1NpemUgPCB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA/IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplIDogYnVmZmVyUmF3U2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyVmFsdWUgPSBtaW5CdWZmZXJTaXplID4gdGhpcy5fbWF4QnVmZmVyU2l6ZSA/IHRoaXMuX21heEJ1ZmZlclNpemUgOiBtaW5CdWZmZXJTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl9idWZmZXJTaXplID0gYnVmZmVySW50ZXJwb2xhdGlvbih0aGlzLl9idWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UsIGJ1ZmZlclZhbHVlLCB7XHJcbiAgICAgICAgICAgIGV4dHJlbXVtVGhyZXNob2xkOiB0aGlzLl9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLl9tYXhCdWZmZXJTZXF1ZW5jZUxlbmd0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFJlc2V0QnVmZmVyU2l6ZVRpbWVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXJ0UmVzZXRCdWZmZXJTaXplVGltZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZSA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UgPSBbXTtcclxuICAgICAgICB9LCB0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lb3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBlbnRyeSBpbnRvIHRoZSBvdmVyc2Nyb2xsIGFyZWEgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBvdmVyc2Nyb2xsIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50TnVtVG9FbmQ8SSBleHRlbmRzIElJdGVtLCBDIGV4dGVuZHMgQXJyYXk8ST4+KGk6IG51bWJlciwgY29sbGVjdGlvbjogQywgbWFwOiBDTWFwPElkLCBJU2l6ZT4sIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyLFxyXG4gICAgICAgIHNpemU6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbiwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDAsIHJldmVyc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHsgbnVtOiBudW1iZXIsIG9mZnNldDogbnVtYmVyIH0ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gaW5kZXhPZmZzZXQgLSAxOyByZXZlcnNlID8gaiA+PSAwIDogaiA+PSBpOyBqLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25bal0sIGlkID0gaXRlbVt0cmFja0J5XTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1TaXplID0gMDtcclxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBjYWNoZSAmJiBjYWNoZVtzaXplUHJvcGVydHldID4gMCA/IGNhY2hlW3NpemVQcm9wZXJ0eV0gOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2Zmc2V0ICsgaXRlbVNpemUgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW0sIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihvcHRpb25zOiBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPik6IElNZXRyaWNzPEk+IHtcclxuICAgICAgICBjb25zdCB7IGFsaWdubWVudCwgZnJvbUl0ZW1JZCwgYm91bmRzLCBjb2xsZWN0aW9uLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLCBtYXhJdGVtU2l6ZSwgYnVmZmVyU2l6ZTogbWluQnVmZmVyU2l6ZSxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSwgc3RpY2t5RW5hYmxlZCwgaXRlbUNvbmZpZ01hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgcHJldmlvdXNUb3RhbFNpemUsIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwLCBpdGVtVHJhbnNmb3JtIH0gPSBvcHRpb25zIGFzIElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+ICYge1xyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICAgICAgfSwgcm91bmRlZFNjcm9sbFNpemUgPSBNYXRoLnJvdW5kKHNjcm9sbFNpemUpO1xyXG5cclxuICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUsIGJ1ZmZlclNpemUgPSBNYXRoLm1heChtaW5CdWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplKSxcclxuICAgICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMsIHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICAgICAgICBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLCB0b3RhbExlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCB0eXBpY2FsSXRlbVNpemUgPSBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyB3aWR0aCA6IHR5cGljYWxJdGVtU2l6ZSwgaCA9IGlzVmVydGljYWwgPyB0eXBpY2FsSXRlbVNpemUgOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIG1hcCA9IHRoaXMuX21hcCwgc25hcHNob3QgPSB0aGlzLl9zbmFwc2hvdCwgZGl2aWRlcyA9IHRoaXMuX2RpdmlkZXMsXHJcbiAgICAgICAgICAgIHN0aWNreVBvcyA9IE1hdGguZmxvb3Ioc2Nyb2xsU2l6ZSkgKyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCwgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0czogQXJyYXk8bnVtYmVyPiA9IFtdLFxyXG4gICAgICAgICAgICBpc0Zyb21JZCA9IGZyb21JdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdudW1iZXInICYmIGZyb21JdGVtSWQgPiAtMSlcclxuICAgICAgICAgICAgICAgIHx8ICh0eXBlb2YgZnJvbUl0ZW1JZCA9PT0gJ3N0cmluZycgJiYgZnJvbUl0ZW1JZCA+ICctMScpO1xyXG5cclxuICAgICAgICBsZXQgbGVmdEl0ZW1zT2Zmc2V0ID0gMCwgcmlnaHRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgaWYgKGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24pIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zY3JvbGxEaXJlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemUgKiBkaXZpZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAtMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemUgKiBkaXZpZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kOiBudW1iZXIgPSAtMSxcclxuICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gMCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSAtMSxcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSAwLCByaWdodEl0ZW1MZW5ndGggPSAwLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgPSAwLCByaWdodEl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBpdGVtQnlJZDogSSB8IG51bGwgPSBudWxsLFxyXG4gICAgICAgICAgICBpdGVtQnlJZFBvczogbnVtYmVyID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICAgICAgIGlzVGFyZ2V0SW5PdmVyc2Nyb2xsOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBpdGVtQnlJZFBvcyxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgKyB0aGlzLl9zY3JvbGxFbmRPZmZzZXQsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcclxuICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSBmYWxzZSxcclxuICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiA9IDAsXHJcbiAgICAgICAgICAgIGlzVXBkYXRpbmcgPSBmYWxzZSxcclxuICAgICAgICAgICAgbGVmdFlPZmZzZXQgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgbGVmdExheW91dEluZGV4T2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgcmlnaHRMYXlvdXRJbmRleE9mZnNldCA9IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhcnQgPSAoKHJvdW5kZWRTY3JvbGxTaXplID09PSAwKSB8fCB0aGlzLmlzU25hcHBlZFRvU3RhcnQpO1xyXG4gICAgICAgIGxldCBzdGlja3lJdGVtSWQ6IElkIHwgdW5kZWZpbmVkLCBpc05ldyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXM6IEFycmF5PEk+O1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgbGlzdCBpcyBkeW5hbWljIG9yIHRoZXJlIGFyZSBuZXcgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb24sIHRoZW4gaXQgc3dpdGNoZXMgdG8gdGhlIGxvbmcgYWxnb3JpdGhtLlxyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlSWRQcm9wID0gZ2V0U2VydmljZUlkUHJvcCh0cmFja0J5KTtcclxuICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGlja3lJZDogSWQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsIGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY29sbGVjdGlvbltpXSwgaWQgPSBpdGVtPy5bdHJhY2tCeV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SWQgPSBpZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1JZCA9IHN0aWNreUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB5ID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICBzdGlja3lDb21wb25lbnRTaXplID0gMCxcclxuICAgICAgICAgICAgICAgIHJvdzoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SXRlbUluZGV4OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNuYXBzaG90U2l6ZTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb246IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXM6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0czogbnVtYmVyIHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydEl0ZW1JbmRleDogMCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRJdGVtSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdFNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbjogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodDogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogMCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZSA9IChpOiBudW1iZXIsIGw6IG51bWJlciwgbGk6IG51bWJlciwgaXNQcmVjb2xsZWN0aW9uOiBib29sZWFuID0gZmFsc2UsIGlkUHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgIGlmIChpaSA+IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uSXRlbSA9IGNvbGxlY3Rpb25baV0sXHJcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBjb2xsZWN0aW9uSXRlbVt0cmFja0J5XSxcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3kgPSBpdGVtQ29uZmlnTWFwPy5baWRdPy5zdGlja3kgPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICBpc05ld1JvdyA9IGkgJSBkaXZpZGVzID09PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZW1JblJvdyA9IGlpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICBpc0xhc3RJdGVtID0gaSA9PT0gbGksXHJcbiAgICAgICAgICAgICAgICAgICAgaXNSb3dFbmQgPSAoaXNMYXN0SXRlbUluUm93IHx8ICghaXNMYXN0SXRlbUluUm93ICYmIGlzTGFzdEl0ZW0pKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXNQcmVjb2xsZWN0aW9uID8geyAuLi5jb2xsZWN0aW9uSXRlbSwgW3NlcnZpY2VJZFByb3BdOiBgXyR7aWRQcmVmaXh9LSR7aWR9X2AgfSA6IGNvbGxlY3Rpb25JdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05ld1JvdyB8fCByb3cgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SXRlbUluZGV4OiBpICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiBpICsgZGl2aWRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRTaXplID0gMCwgcm93U2l6ZURlbHRhID0gMCwgaXRlbURpc3BsYXlNZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcyA9IEl0ZW1EaXNwbGF5TWV0aG9kcy5OT1RfQ0hBTkdFRDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IGNhY2hlW3NpemVQcm9wZXJ0eV0gPiAwID8gY2FjaGVbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtRGlzcGxheU1ldGhvZCA9IGNhY2hlPy5tZXRob2QgPz8gSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0l0ZW1OZXcgPSB0aGlzLl9uZXdJdGVtcy5pbmRleE9mKGlkKSA+IC0xIHx8ICh0aGlzLl9pc0xhenkgJiYgaXNTdGFydCAmJiAhdGhpcy5faXNSZXNldGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpc05ldyA9IGlzSXRlbU5ldztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90Qm91bmRzID0gc25hcHNob3QuZ2V0KGlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplID0gc25hcHNob3RCb3VuZHMgPyBzbmFwc2hvdEJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByb3cuc2l6ZSA9IE1hdGgubWF4KHJvdy5zaXplLCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICByb3cuc25hcHNob3RTaXplID0gTWF0aC5tYXgocm93LnNuYXBzaG90U2l6ZSwgc25hcHNob3RTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcm93U2l6ZURlbHRhID0gcm93LnNpemUgLSByb3cuc25hcHNob3RTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGl0ZW1EaXNwbGF5TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLlVQREFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnNldChpZCwgeyAuLi5jYWNoZSwgbWV0aG9kOiBpc05ldyA/IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUgOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQsIFtJU19ORVddOiBpc05ldyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiBpc05ldyAmJiB5IDw9IChzY3JvbGxTaXplICsgc2l6ZSArIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gKyBjb21wb25lbnRTaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5kZWx0YUZyb21TdGFydENyZWF0aW9uID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoaWQsIHsgLi4uY2FjaGUsIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLlVQREFURSwgW0lTX05FV106IGlzTmV3IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUm93RW5kICYmIGlzTmV3ICYmIHkgPD0gKHNjcm9sbFNpemUgKyBzaXplICsgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiArIGNvbXBvbmVudFNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gPSByb3dTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U2l6ZURlbHRhID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5zaXplID0gTWF0aC5tYXgocm93LnNpemUsIGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5zbmFwc2hvdFNpemUgPSByb3cuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICByb3dTaXplRGVsdGEgPSByb3cuc2l6ZSAtIHJvdy5zbmFwc2hvdFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRJdGVtc01hcC5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gZGVsZXRlZEl0ZW1zTWFwW2ldLCBzaXplID0gY2FjaGU/LltzaXplUHJvcGVydHldID8/IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHNjcm9sbFNpemUgKyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCAtIHNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRTaXplT2ZEZWxldGVkSXRlbXMgPSBNYXRoLm1heChyb3cubGVmdFNpemVPZkRlbGV0ZWRJdGVtcywgc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgIT0gZnJvbUl0ZW1JZCAmJiBpZCA9PT0gc3RpY2t5SXRlbUlkICYmIHN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IHN0aWNreUNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSBmcm9tSXRlbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWdubWVudCAhPT0gQWxpZ25tZW50cy5DRU5URVIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG51bSwgb2Zmc2V0IH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChpLCBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRWaWV3cG9ydFNpemUgPSBzaXplIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0Vmlld3BvcnRTaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG51bTogbnVtMSwgb2Zmc2V0OiBvZmZzZXQxIH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChpICsgbnVtLCBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCwgMCwgdHJ1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YU51bSA9IChudW0xIC0gbnVtKSwgZGVsdGFPZmZzZXQgPSAob2Zmc2V0MSAtIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC09IGRlbHRhTnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ID0gcmlnaHRJdGVtTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IGRlbHRhT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnNwbGljZShsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLmxlbmd0aCAtIGRlbHRhTnVtLCBkZWx0YU51bSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgLT0gZGVsdGFPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1CeUlkID0gY29sbGVjdGlvbkl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZFBvcyA9IHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSByb3cuc3RhcnRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPD0gc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByb3cubGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cyA9IE1hdGgubWF4KHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzLCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICByb3cubGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gTWF0aC5tYXgocm93LmxlZnRIaWRkZW5JdGVtc1dlaWdodCwgY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ByZWNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IHJvdy5zdGFydEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1CeUlkID09PSBudWxsIHx8IHkgPCBpdGVtQnlJZFBvcyArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gcm93LmVuZEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIHJpZ2h0SXRlbXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5IDw9IHNjcm9sbFNpemUgKyBzaXplICsgY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNQcmVjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gcm93LmVuZEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByb3cudG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IE1hdGgubWF4KHJvdy50b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0LCBjb21wb25lbnRTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUm93RW5kICYmIHkgPD0gc2Nyb2xsU2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRTaXplT2ZBZGRlZEl0ZW1zID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubGVmdFNpemVPZlVwZGF0ZWRJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkRFTEVURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQgJiYgaXRlbURpc3BsYXlNZXRob2QgPT09IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmRlbHRhT2ZOZXdJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiBpIDwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5yaWdodEl0ZW1zV2VpZ2h0ID0gTWF0aC5tYXgocm93LnJpZ2h0SXRlbXNXZWlnaHQsIGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUHJlY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uICs9IHJvdy5kZWx0YUZyb21TdGFydENyZWF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyArPSByb3cubGVmdFNpemVPZkFkZGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gcm93LmxlZnRTaXplT2ZVcGRhdGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKz0gcm93LmxlZnRTaXplT2ZEZWxldGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtcyArPSByb3cuZGVsdGFPZk5ld0l0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ICs9IHJvdy5yaWdodEl0ZW1zV2VpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IHJvdy50b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgKz0gcm93LmxlZnRIaWRkZW5JdGVtc1dlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnB1c2gocm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSByb3cuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB5ICs9IHJvdy5zaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGg7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnVmZlNpemUgPSAtMTtcclxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplIDw9IHZpZXdwb3J0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgPiAwID8gKGwgLSAxKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gdmlld3BvcnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeSA8PSBsaW1pdCB8fCBidWZmU2l6ZSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZTaXplID0gbGVmdEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj0gbGltaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmU2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxjdWxhdGUobGkgLSBpLCBsLCBsaSwgdHJ1ZSwgU1RBUlRfQ09MTEVDVElPTl9QUkVGSVhfSUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRZT2Zmc2V0ID0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocm93IGFzIGFueSkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsIC0gMTsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjYWxjdWxhdGUoaSwgbCwgbGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAocm93IGFzIGFueSkgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHl5ID0geSwgY3VycmVudFRvdGFsU2l6ZSA9IHRvdGFsU2l6ZSwgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRUb3RhbFNpemUgPSB0b3RhbFNpemUgKyB2aWV3cG9ydFNpemU7XHJcbiAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJdGVtSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb246IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwLCBjb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoeSA8IG5vcm1hbGl6ZWRUb3RhbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FsY3VsYXRlKGksIGwsIGxpLCB0cnVlLCBFTkRfQ09MTEVDVElPTl9QUkVGSVhfSUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgeSA9IHl5O1xyXG4gICAgICAgICAgICAgICAgdG90YWxTaXplID0gY3VycmVudFRvdGFsU2l6ZTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQgPSBjb3VudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IChpc0Zyb21JZCA/IGl0ZW1CeUlkUG9zIDogc2Nyb2xsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA8PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDw9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHMuc3BsaWNlKDAsIGxlZnRJdGVtc09yUm93c1dlaWdodHMubGVuZ3RoIC0gYnVmZmVyU2l6ZSk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCArPSB2O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgbGVmdEl0ZW1zT2Zmc2V0KTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBzdGFydEluZGV4ID0gKE1hdGguY2VpbChNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gbGVmdEl0ZW1MZW5ndGgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApIC8gZGl2aWRlcykgKiBkaXZpZGVzKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAvLyBCdWZmZXIgb3B0aW1pemF0aW9uIGRvZXMgbm90IHdvcmsgb24gZmFzdCBsaW5lYXIgYWxnb3JpdGhtXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplIC8gZGl2aWRlcywgYnVmZmVySXRlbU51bWJlcnMgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IE1hdGguZmxvb3IoZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAhPT0gMCA/IChzY3JvbGxTaXplIC8gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgOiAwKTtcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBNYXRoLmNlaWwoZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAhPT0gMCA/ICgoc2Nyb2xsU2l6ZSArIHNpemUpIC8gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgOiAwKTtcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLCBidWZmZXJTaXplICogZGl2aWRlcyk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IChpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIGJ1ZmZlckl0ZW1OdW1iZXJzKSA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiBidWZmZXJJdGVtTnVtYmVycztcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihsZWZ0SXRlbUxlbmd0aCAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgLyB0eXBpY2FsSXRlbVNpemUpICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihyaWdodEl0ZW1MZW5ndGggKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplIC8gdHlwaWNhbEl0ZW1TaXplKSAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSkgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSBNYXRoLmZsb29yKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSkgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IChNYXRoLmNlaWwodG90YWxMZW5ndGggLyBkaXZpZGVzKSAqIGRpdmlkZXMgKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplKSArIHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBrID0gdG90YWxTaXplICE9PSAwID8gcHJldmlvdXNUb3RhbFNpemUgLyB0b3RhbFNpemUgOiAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGNvbGxlY3Rpb24uZmluZEluZGV4KGl0ZW0gPT4gaXRlbVt0cmFja0J5XSA9PSBmcm9tSXRlbUlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWRQb3MgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIE1hdGguZmxvb3IoaW5kZXggKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplIC8gZGl2aWRlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gKGlzRnJvbUlkID8gaXRlbUJ5SWRQb3MgOiBzY3JvbGxTaXplICogayk7XHJcblxyXG4gICAgICAgICAgICBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aDtcclxuICAgICAgICAgICAgICAgIGxldCBidWZmU2l6ZSA9IC0xLCB5ID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA8PSB2aWV3cG9ydFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsID4gMCA/IChsIC0gMSkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdCA9IHZpZXdwb3J0U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHkgPD0gbGltaXQgfHwgYnVmZlNpemUgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmU2l6ZSA9IGxlZnRJdGVtc09mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID49IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZlNpemUtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IGxpIC0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA+IGl0ZW1JbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY29sbGVjdGlvbltpdGVtSW5kZXhdIGFzIEkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdEl0ZW1JblJvdyA9IGlpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RJdGVtID0gaSA9PT0gbGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNMYXN0SXRlbUluUm93IHx8ICghaXNMYXN0SXRlbUluUm93ICYmIGlzTGFzdEl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpID09PSBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0WU9mZnNldCA9IHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSB2aWV3cG9ydFNpemUgKiAuNTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExheW91dEluZGV4T2Zmc2V0ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uY29sbGVjdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNJbmZpbml0eSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHkgPSBNYXRoLmZsb29yKHRvdGFsU2l6ZSAvIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUpICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVG90YWxTaXplID0gdG90YWxTaXplICsgdmlld3BvcnRTaXplO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwLCBjb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoeSA8IG5vcm1hbGl6ZWRUb3RhbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA8PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdEl0ZW1JblJvdyA9IGlpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlbSA9IGkgPT09IGxpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xhc3RJdGVtSW5Sb3cgfHwgKCFpc0xhc3RJdGVtSW5Sb3cgJiYgaXNMYXN0SXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmlnaHRMYXlvdXRJbmRleE9mZnNldCA9IGNvdW50O1xyXG4gICAgICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLCBsZWZ0SXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiByaWdodEl0ZW1zT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAoTWF0aC5jZWlsKE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSBsZWZ0SXRlbUxlbmd0aCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCkgLyBkaXZpZGVzKSAqIGRpdmlkZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSBsZWZ0SXRlbUxlbmd0aCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zT25EaXNwbGF5V2VpZ2h0ID0gdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCAtIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAtIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIGxlZnRIaWRkZW5JdGVtc1dlaWdodCAtIGxlZnRJdGVtc1dlaWdodCAtIGxlZnRZT2Zmc2V0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtcyA9IChNYXRoLmNlaWwoKGl0ZW1zT25EaXNwbGF5TGVuZ3RoICsgbGVmdEl0ZW1MZW5ndGggKyByaWdodEl0ZW1MZW5ndGgpIC8gZGl2aWRlcykgKiBkaXZpZGVzKSArIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgIHN0YXJ0Q3JlYXRpb25EZWx0YSA9IGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gPiAwID8gZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiA6IDAsXHJcbiAgICAgICAgICAgIGRlbHRhID0gbGVmdFNpemVPZlVwZGF0ZWRJdGVtcyArIGxlZnRTaXplT2ZBZGRlZEl0ZW1zIC0gbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArIHN0YXJ0Q3JlYXRpb25EZWx0YTtcclxuICAgICAgICB0aGlzLl9kZWx0YU9mTmV3SXRlbXMgPSBkZWx0YU9mTmV3SXRlbXM7XHJcblxyXG4gICAgICAgIGlmIChpc0Zyb21JZCAmJiAhaXNUYXJnZXRJbk92ZXJzY3JvbGwpIHtcclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSAtPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3M6IElNZXRyaWNzPEk+ID0ge1xyXG4gICAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1XaWR0aDogdyxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQ6IGgsXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgIG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtcyxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5V2VpZ2h0LFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgIHN0aWNreVBvcyxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCxcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCxcclxuICAgICAgICAgICAgaXNVcGRhdGluZyxcclxuICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBtZXRyaWNzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2hDYWNoZShjYWNoZTogUHJlcmVuZGVyQ2FjaGUpIHtcclxuICAgICAgICB0aGlzLl9wcmVyZW5kZXJlZENhY2hlID0gY2FjaGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEZWx0YSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZWx0YSA9IHRoaXMuX2RlbHRhT2ZOZXdJdGVtcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlcyhpbW1lZGlhdGVseTogYm9vbGVhbiA9IGZhbHNlLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGltbWVkaWF0ZWx5KSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzVmVyc2lvbiA9IHRoaXMuX3ZlcnNpb247XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goQ0FDSEVfQk9YX0NIQU5HRV9FVkVOVF9OQU1FIGFzIENhY2hlTWFwRXZlbnRzLCB0aGlzLnZlcnNpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYm91bmRzIG9mIGF0IGxlYXN0IG9uZSBzY3JlZW4gb2JqZWN0IGhhdmUgY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHNbaV0sIGl0ZW1JZCA9IGNvbXBvbmVudC5pbnN0YW5jZS5pdGVtSWQ7XHJcbiAgICAgICAgICAgIGlmIChpdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gY29tcG9uZW50Lmluc3RhbmNlLmdldEJvdW5kcygpLCBjYWNoZSA9IHRoaXMuZ2V0KGl0ZW1JZCk7XHJcbiAgICAgICAgICAgIGlmICghIWJvdW5kcyAmJiAhIWNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRzLndpZHRoICE9PSBjYWNoZS53aWR0aCB8fCBib3VuZHMuaGVpZ2h0ICE9PSBjYWNoZS5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlRGlzcGxheUNvbGxlY3Rpb248SSBleHRlbmRzIElJdGVtLCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBhY3R1YWxJdGVtczogQywgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICBtZXRyaWNzOiBJTWV0cmljczxJPik6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24ge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1XaWR0aCxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldDogbGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQ6IGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtczogcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc3RpY2t5RW5hYmxlZCxcclxuICAgICAgICAgICAgc3RpY2t5UG9zLFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0b3RhbExlbmd0aCxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgIHNuYXBUb0l0ZW0sXHJcbiAgICAgICAgICAgIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICB9ID0gbWV0cmljcyxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcblxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lLCBhY3R1YWxTbmlwcGVkUG9zaXRpb24gPSBzdGlja3lQb3MsXHJcbiAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICBkZWx0YU9mZmV0ID0gKGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA/IHNjcm9sbFNpemUgOiAwKSxcclxuICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IHRoaXMuX3Njcm9sbERpcmVjdGlvbixcclxuICAgICAgICAgICAgICAgIGJvdW5kc1NpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsIGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiA9IHNjcm9sbFNpemUgKyBib3VuZHNTaXplIC0gdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgcG9zID0gc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIHJlbmRlckl0ZW1zID0gcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBzdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0U3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBzdGlja3lJdGVtSW5kZXggPSAtMSxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1TaXplID0gMCwgZW5kU3RpY2t5SXRlbTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgbmV4dEVuZFN0aWNreTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW1JbmRleCA9IC0xLCBlbmRTdGlja3lJdGVtU2l6ZSA9IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsaSA9IGxheW91dEluZGV4T2Zmc2V0ICsgYWN0dWFsSXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgaWYgKHN0aWNreUVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID4gMCA/IChkaXZpZGVzID4gMSA/IChpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gMSkgOiBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kKSA6IDAsIHRvdGFsTGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBpdGVtc1tpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEdW1teSA9IGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSAmJiAoY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldID09PSBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xsZWN0aW9uSXRlbSB8fCBpc0R1bW15KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IE1hdGguZmxvb3IoKChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICsgMSkgLyBkaXZpZGVzKSwgaWQgPSBjb2xsZWN0aW9uSXRlbVt0cmFja0J5XSwgY2FjaGUgPSB0aGlzLmdldChpZCkhLCBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5jb2xsYXBzYWJsZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplID8gY2FjaGU/LltzaXplUHJvcGVydHldID4gMCA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZSA6IHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uID0gcG9zIC0gKHNjcm9sbFNpemUgLSBzaXplKSAtIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdGlvID0gc2l6ZSAhPT0gMCA/IGJvdW5kc1NpemUgLyBzaXplIDogMCwgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCA9IC0oYm91bmRzU2l6ZSAhPT0gMCA/IGFic29sdXRlU3RhcnRQb3NpdGlvbiAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uID0gYm91bmRzU2l6ZSAtIChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgc2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50ID0gKGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQgKyAoYm91bmRzU2l6ZSAhPT0gMCA/IChhYnNvbHV0ZUVuZFBvc2l0aW9uICsgc2l6ZSkgLyBib3VuZHNTaXplIDogMCkgKiByYXRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHggPSBpc1ZlcnRpY2FsID8gMCA6IGFjdHVhbFNuaXBwZWRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGlzVmVydGljYWwgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSAoaXRlbXMubGVuZ3RoIC0gbGF5b3V0SW5kZXhPZmZzZXQgKyBpKSAlIDIgIT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVzOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtTWVhc3VyZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkWDogeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFk6IHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgejogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25ZOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWjogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IHJvd0luZGV4ICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiByb3dJbmRleCAlIDIgPT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiBzdGlja3kgPT09IDEgPyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCA6IHN0aWNreSA9PT0gMiA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGRlbHRhT2ZmZXQgLSBzaXplIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZzogSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0OiBpID09PSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3Q6IGkgPT09IGxpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldzogKGNhY2hlIGFzIENhY2hlKT8uW0lTX05FV10gPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwOiBzdGlja3lFbmFibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg6IGkgLSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiBaX0lOREVYXzEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBjb2xsZWN0aW9uSXRlbTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSwgaWQsIG1lYXN1cmVzLCBkYXRhOiBpdGVtRGF0YSwgcHJldmlvdXNlRGF0YTogaSA+IDAgPyBpdGVtc1tpIC0gMV0gOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dERhdGE6IGkgPCB0b3RhbExlbmd0aCA/IGl0ZW1zW2kgKyAxXSA6IG51bGwsIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goc3RpY2t5SXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0aWNreUVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpID0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCArIGl0ZW1zT25EaXNwbGF5TGVuZ3RoIC0gMSwgc3RhcnRJbmRleCA9IHNpIDwgMCA/IHNpIDogc2k7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCksXHJcbiAgICAgICAgICAgICAgICAgICAgcm93SW5kZXggPSBNYXRoLmZsb29yKCgoaXRlbXMubGVuZ3RoIC0gbGF5b3V0SW5kZXhPZmZzZXQgKyBpKSArIDEpIC8gZGl2aWRlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgbCA9IHRvdGFsTGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBpdGVtc1tpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEdW1teSA9IGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSAmJiAoY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldID09PSBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xsZWN0aW9uSXRlbSB8fCBpc0R1bW15KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGNvbGxlY3Rpb25JdGVtW3RyYWNrQnldLCBjYWNoZSA9IHRoaXMuZ2V0KGlkKSEsIHN0aWNreSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zZWxlY3RhYmxlID8/IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LmNvbGxhcHNhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZHluYW1pY1NpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2FjaGU/LltzaXplUHJvcGVydHldIHx8IHR5cGljYWxJdGVtU2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSwgaCA9IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24gPSBwb3MgLSAoc2Nyb2xsU2l6ZSAtIHNpemUpIC0gc2l6ZSwgcmF0aW8gPSBzaXplICE9PSAwID8gYm91bmRzU2l6ZSAvIHNpemUgOiAwLCBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ID0gLShib3VuZHNTaXplICE9PSAwID8gYWJzb2x1dGVTdGFydFBvc2l0aW9uIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uID0gYm91bmRzU2l6ZSAtIChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgc2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCA9IChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgKGJvdW5kc1NpemUgIT09IDAgPyAoYWJzb2x1dGVFbmRQb3NpdGlvbiArIHNpemUpIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGlzVmVydGljYWwgPyAwIDogYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBpc1ZlcnRpY2FsID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gaCA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlczogSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFg6IHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRZOiB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25YOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVo6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiByb3dJbmRleCAlIDIgIT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogcm93SW5kZXggJSAyID09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGRlbHRhT2ZmZXQgLSBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTaXplOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3Q6IGkgPT09IGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdDogaSA9PT0gbGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3OiAoY2FjaGUgYXMgQ2FjaGUpPy5bSVNfTkVXXSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IGlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXA6IHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkT3V0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGl0ZW1zLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogaSAtIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IFpfSU5ERVhfMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGNvbGxlY3Rpb25JdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBwcmV2aW91c2VEYXRhOiBpID4gMCA/IGl0ZW1zW2kgLSAxXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RGF0YTogaSA8IHRvdGFsTGVuZ3RoID8gaXRlbXNbaSArIDFdIDogbnVsbCwgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtU2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChlbmRTdGlja3lJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgaSA9IHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgICAgICBjaSA9IDAsXHJcbiAgICAgICAgICAgICAgICByb3c6IHtcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2RkOiBib29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW46IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICB9ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgb2RkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHdoaWxlIChyZW5kZXJJdGVtcyA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IGNvbGxlY3Rpb25MZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25JdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNEdW1teSA9IGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSAmJiAoY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldID09PSBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCksXHJcbiAgICAgICAgICAgICAgICAgICAgaWkgPSBpICsgMSxcclxuICAgICAgICAgICAgICAgICAgICByb3dJbmRleCA9IE1hdGguZmxvb3IoKChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICsgMSkgLyBkaXZpZGVzKSxcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IGNvbGxlY3Rpb25JdGVtW3RyYWNrQnldLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlID0gdGhpcy5nZXQoaWQpISxcclxuICAgICAgICAgICAgICAgICAgICBzaXplID0gaXNEdW1teSA/IHR5cGljYWxJdGVtU2l6ZSA6IChkeW5hbWljU2l6ZSA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpdlNpemUgPSAoaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBub3JtYWxpemVkSXRlbUhlaWdodCkgLyBkaXZpZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpICUgZGl2aWRlcyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogcm93SW5kZXggJSAyICE9PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVuOiByb3dJbmRleCAlIDIgPT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNpemUgPSBNYXRoLm1heChyb3cuc2l6ZSwgc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2krKztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRHVtbXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCB8fCBpZCAhPT0gc3RpY2t5SXRlbT8uaWQpICYmIGlkICE9PSBlbmRTdGlja3lJdGVtPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNpemUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uZnVsbFNpemUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LmNvbGxhcHNhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZCA9IHN0aWNreUVuYWJsZWQgJiYgKChzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQpKSB8fCAoc3RpY2t5ID09PSAyICYmIChwb3MgPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBzaXplKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uID0gcG9zIC0gc2Nyb2xsU2l6ZSwgcmF0aW8gPSBzaXplICE9PSAwID8gYm91bmRzU2l6ZSAvIHNpemUgOiAwLCBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ID0gLShib3VuZHNTaXplICE9PSAwID8gYWJzb2x1dGVTdGFydFBvc2l0aW9uIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uID0gYm91bmRzU2l6ZSAtIChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgc2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCA9IChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgKGJvdW5kc1NpemUgIT09IDAgPyAoYWJzb2x1dGVFbmRQb3NpdGlvbiArIHNpemUpIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGlzVmVydGljYWwgPyBkaXZTaXplICogKChzdGlja3kgfHwgZnVsbFNpemUpID8gMCA6IGNpKSA6IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBpc1ZlcnRpY2FsID8gcG9zIDogZGl2U2l6ZSAqICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IDAgOiBjaSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlczogSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFg6IHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRZOiB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25YOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVo6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/ICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiAobm9ybWFsaXplZEl0ZW1XaWR0aCAvIGRpdmlkZXMpKSA6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gc2l6ZSA6ICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IG5vcm1hbGl6ZWRJdGVtSGVpZ2h0IDogKG5vcm1hbGl6ZWRJdGVtSGVpZ2h0IC8gZGl2aWRlcykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogc3RpY2t5ID09PSAxID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogKHN0aWNreSA9PT0gMiA/IChhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBkZWx0YU9mZmV0IC0gc2l6ZSkgOiAwKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZzogSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0OiBpID09PSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3Q6IGkgPT09IGxpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldzogKGNhY2hlIGFzIENhY2hlKT8uW0lTX05FV10gPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwOiBzdGlja3lFbmFibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtczogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiBpIC0gbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdHViOiAoaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIGlkID09PSBzdGlja3lJdGVtPy5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogWl9JTkRFWF8wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbmFwcGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuekluZGV4ID0gWl9JTkRFWF8yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGNvbGxlY3Rpb25JdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBwcmV2aW91c2VEYXRhOiBpID4gMCA/IGl0ZW1zW2kgLSAxXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RGF0YTogaSA8IHRvdGFsTGVuZ3RoID8gaXRlbXNbaSArIDFdIDogbnVsbCwgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRTdGlja3kgJiYgc3RpY2t5SXRlbUluZGV4IDwgaSAmJiBzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgKyBzaXplICsgc3RpY2t5SXRlbVNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnggPSBpc1ZlcnRpY2FsID8gMCA6IHNuYXBwZWQgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnkgPSBpc1ZlcnRpY2FsID8gc25hcHBlZCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IHBvcyA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy55IDogaXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy56SW5kZXggPSBaX0lOREVYXzM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0RW5kU3RpY2t5ICYmIGVuZFN0aWNreUl0ZW1JbmRleCA+IGkgJiYgc3RpY2t5ID09PSAyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9zID49IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHNpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueCA9IGlzVmVydGljYWwgPyAwIDogc25hcHBlZCA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHNpemUgOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnkgPSBpc1ZlcnRpY2FsID8gc25hcHBlZCA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHNpemUgOiBwb3MgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5LmNvbmZpZy56SW5kZXggPSBaX0lOREVYXzM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gc25hcHBlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IGl0ZW0ubWVhc3VyZXMueSA6IGl0ZW0ubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMtLTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaWkgJSBkaXZpZGVzID09PSAwIHx8IHJlbmRlckl0ZW1zIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3MgKz0gcm93LnNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBpc1ZlcnRpY2FsID8gWV9QUk9QX05BTUUgOiBYX1BST1BfTkFNRTtcclxuXHJcbiAgICAgICAgICAgIGlmICghIW5leHRTdGlja3kgJiYgISFzdGlja3lJdGVtICYmIG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPD0gYWN0dWFsU25pcHBlZFBvc2l0aW9uICsgc3RpY2t5SXRlbS5tZWFzdXJlc1tzaXplUHJvcGVydHldKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA+IGFjdHVhbFNuaXBwZWRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIC0gc3RpY2t5SXRlbS5tZWFzdXJlc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBzdGlja3lJdGVtLm1lYXN1cmVzLnkgOiBzdGlja3lJdGVtLm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gbmV4dFN0aWNreS5tZWFzdXJlcy55IDogbmV4dFN0aWNreS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gLSBzdGlja3lJdGVtLm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gc3RpY2t5SXRlbS5tZWFzdXJlcy55IDogc3RpY2t5SXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghIW5leHRFbmRTdGlja3kgJiYgISFlbmRTdGlja3lJdGVtICYmXHJcbiAgICAgICAgICAgICAgICAobmV4dEVuZFN0aWNreS5tZWFzdXJlc1theGlzXSA+PSBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBlbmRTdGlja3lJdGVtU2l6ZSAtIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdIDwgYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gbmV4dEVuZFN0aWNreS5tZWFzdXJlc1tzaXplUHJvcGVydHldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gKyBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc25hcHBlZCA9IG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zdGlja3kgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueSA6IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdID0gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gbmV4dEVuZFN0aWNreS5tZWFzdXJlc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IG5leHRFbmRTdGlja3kubWVhc3VyZXMueSA6IG5leHRFbmRTdGlja3kubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdICsgbmV4dEVuZFN0aWNreS5tZWFzdXJlc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueSA6IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbVRyYW5zZm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkaXNwbGF5SXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRpc3BsYXlJdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWF0aW9uID0gaXRlbVRyYW5zZm9ybShpdGVtLmluZGV4LCBvYmplY3RBc1JlYWRvbmx5KGl0ZW0ubWVhc3VyZXMpLCBvYmplY3RBc1JlYWRvbmx5KGl0ZW0uY29uZmlnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMudHJhbnNmb3JtZWRYID0gdHJhbnNmb3JtYXRpb24ueDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy50cmFuc2Zvcm1lZFkgPSB0cmFuc2Zvcm1hdGlvbi55O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnogPSB0cmFuc2Zvcm1hdGlvbi56O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnJvdGF0aW9uWCA9IHRyYW5zZm9ybWF0aW9uLnJvdGF0aW9uWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5yb3RhdGlvblkgPSB0cmFuc2Zvcm1hdGlvbi5yb3RhdGlvblk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMucm90YXRpb25aID0gdHJhbnNmb3JtYXRpb24ucm90YXRpb25aO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnNjYWxlWCA9IHRyYW5zZm9ybWF0aW9uLnNjYWxlWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5zY2FsZVkgPSB0cmFuc2Zvcm1hdGlvbi5zY2FsZVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMuc2NhbGVaID0gdHJhbnNmb3JtYXRpb24uc2NhbGVaO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5vcGFjaXR5ID0gdHJhbnNmb3JtYXRpb24ub3BhY2l0eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb25maWcuZmlsdGVyID0gdHJhbnNmb3JtYXRpb24uZmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5ibGVuZENvbG9yID0gdHJhbnNmb3JtYXRpb24uYmxlbmRDb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb25maWcuekluZGV4ID0gU3RyaW5nKHRyYW5zZm9ybWF0aW9uLnpJbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaXNwbGF5SXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRQb3NpdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci5jbGVhclRyYWNrTWFwKCk7XHJcblxyXG4gICAgICAgIHRoaXMudHJhY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXMgfHwgIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudHJhY2sodGhpcy5faXRlbXMsIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLCB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMsIHRoaXMuX3Njcm9sbERpcmVjdGlvbiwgdGhpcy5fdHJhY2tCeSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh2OiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLmRpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50PzogQyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChpZCkgPz8gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBtYXhQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGwpOiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcbiAgICAgICAgbGV0IGZpcnN0OiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsID0gbnVsbCxcclxuICAgICAgICAgICAgbGFzdDogKElSZWN0ICYgeyBpZDogSWQgfCBudWxsOyBpc0ZpcnN0OiBib29sZWFuOyBpc0xhc3Q6IGJvb2xlYW47IH0pIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgaWYgKCEhY29tcG9uZW50cykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcG9uZW50cykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBjb21wLmluc3RhbmNlLml0ZW1JZCA/PyBudWxsLCBpc1ZlcnRpY2FsID0gY29tcC5pbnN0YW5jZS5pdGVtPy5jb25maWc/LmlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8ubWVhc3VyZXM/LnggPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICB5ID0gY29tcC5pbnN0YW5jZS5pdGVtPy5tZWFzdXJlcz8ueSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRmlyc3QgPSBjb21wLmluc3RhbmNlLml0ZW0/LmNvbmZpZz8uaXNGaXJzdCA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0xhc3QgPSBjb21wLmluc3RhbmNlLml0ZW0/LmNvbmZpZz8uaXNMYXN0ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gY29tcC5pbnN0YW5jZS5nZXRCb3VuZHMoKSxcclxuICAgICAgICAgICAgICAgICAgICBwb3MgPSBwb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsICYmIChwb3MgPj0geSAmJiBwb3MgPCB5ICsgaGVpZ2h0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzVmVydGljYWwgJiYgKHBvcyA+PSB4ICYmIHBvcyA8IHggKyB3aWR0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgaXNGaXJzdCwgaXNMYXN0IH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0geyBpZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgaXNGaXJzdCwgaXNMYXN0IH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSB7IGlkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heFBvc2l0aW9uICE9PSBudWxsICYmIHBvc2l0aW9uID4gbWF4UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxhc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkSXNTY3JvbGxTdGFydE9mZiA9IGRlYm91bmNlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVFbGVtZW50cyhpc1ZlcnRpY2FsOiBib29sZWFuLCBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50c1tpXSwgaXRlbUlkID0gY29tcG9uZW50Lmluc3RhbmNlLml0ZW1JZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSBjb21wb25lbnQuaW5zdGFuY2UuZ2V0Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0KGl0ZW1JZCwge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXQoaXRlbUlkKSwgLi4uYm91bmRzLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGJvdW5kcy53aWR0aCB8fCAoaXNWZXJ0aWNhbCA/IDAgOiBpdGVtU2l6ZSksXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfHwgKGlzVmVydGljYWwgPyBpdGVtU2l6ZSA6IDApLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTGF6eSAmJiAodGhpcy5faXNTY3JvbGxTdGFydCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZElzU2Nyb2xsU3RhcnRPZmYuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fcHJlcmVuZGVyZWRDYWNoZTtcclxuICAgICAgICBpZiAoISFjYWNoZSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZUl0ZW0gPSBjYWNoZVtpZF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldChpZCwgeyAuLi4odGhpcy5nZXQoaWQpIHx8IHt9KSwgLi4uY2FjaGVJdGVtIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXJlbmRlcmVkQ2FjaGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNldENhY2hlQ2h1bmtJbmZvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX25ld0l0ZW1zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgY2FjaGVDbGVhbigpIHtcclxuICAgICAgICB0aGlzLl9tYXAuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLl9zbmFwc2hvdC5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG92ZXJyaWRlIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3Bvc2VDbGVhckJ1ZmZlclNpemVUaW1lcigpO1xyXG5cclxuICAgICAgICBpZiAoISF0aGlzLl9kZWJvdW5jZWRJc1Njcm9sbFN0YXJ0T2ZmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZElzU2Nyb2xsU3RhcnRPZmYuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5fdHJhY2tlcikge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja2VyLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19