ng-virtual-list 17.12.4 → 17.12.8

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 (42) hide show
  1. package/esm2022/lib/components/ng-list-item/const/index.mjs +2 -1
  2. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +2 -5
  3. package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +4 -2
  4. package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +6 -16
  5. package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +17 -3
  6. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +20 -10
  7. package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +8 -12
  8. package/esm2022/lib/core/interfaces/metrics.mjs +1 -1
  9. package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +1 -1
  10. package/esm2022/lib/core/track-box.mjs +17 -9
  11. package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +7 -7
  12. package/esm2022/lib/models/render-item-config.model.mjs +1 -1
  13. package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
  14. package/esm2022/lib/ng-virtual-list.component.mjs +91 -87
  15. package/esm2022/lib/utils/animator/animator.mjs +12 -6
  16. package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +1 -1
  17. package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +1 -1
  18. package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
  19. package/esm2022/lib/utils/event-emitter/event-emitter.mjs +2 -2
  20. package/esm2022/lib/utils/event-emitter/interfaces/event-emitter.mjs +1 -1
  21. package/fesm2022/ng-virtual-list.mjs +177 -147
  22. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  23. package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +1 -4
  24. package/lib/components/ng-prerender-container/core/prerender-track-box.d.ts +1 -1
  25. package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +2 -7
  26. package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +8 -2
  27. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +5 -1
  28. package/lib/components/ng-scroller/ng-scroller.component.d.ts +2 -4
  29. package/lib/core/interfaces/metrics.d.ts +3 -1
  30. package/lib/core/interfaces/recalculate-metrics-options.d.ts +1 -0
  31. package/lib/core/track-box.d.ts +1 -1
  32. package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +3 -3
  33. package/lib/models/render-item-config.model.d.ts +5 -1
  34. package/lib/models/render-item-measures.model.d.ts +5 -1
  35. package/lib/ng-virtual-list.component.d.ts +2 -3
  36. package/lib/utils/animator/animator.d.ts +1 -1
  37. package/lib/utils/animator/interfaces/animator-params.d.ts +1 -1
  38. package/lib/utils/animator/interfaces/animator-update-data.d.ts +1 -1
  39. package/lib/utils/animator/types/easing.d.ts +1 -1
  40. package/lib/utils/event-emitter/event-emitter.d.ts +1 -1
  41. package/lib/utils/event-emitter/interfaces/event-emitter.d.ts +1 -1
  42. package/package.json +1 -1
@@ -37,7 +37,7 @@ import * as i4 from "./directives/locale-sensitive/locale-sensitive.directive";
37
37
  * Virtual list component.
38
38
  * Maximum performance for extremely large lists.
39
39
  * It is based on algorithms for virtualization of screen objects.
40
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts
40
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts
41
41
  * @author Evgenii Alexandrovich Grebennikov
42
42
  * @email djonnyx@gmail.com
43
43
  */
@@ -185,16 +185,6 @@ export class NgVirtualListComponent extends DisposableComponent {
185
185
  }
186
186
  ;
187
187
  get scrollbarThumbParams() { return this._$scrollbarThumbParams.getValue(); }
188
- _loading = {
189
- transform: (v) => {
190
- const valid = validateBoolean(v);
191
- if (!valid) {
192
- console.error('The "loading" parameter must be of type `boolean`.');
193
- return false;
194
- }
195
- return v;
196
- },
197
- };
198
188
  _$loading = new BehaviorSubject(false);
199
189
  $loading = this._$loading.asObservable();
200
190
  _loadingTransform = (v) => {
@@ -948,9 +938,9 @@ export class NgVirtualListComponent extends DisposableComponent {
948
938
  const valid = validateFloat(v);
949
939
  if (!valid) {
950
940
  console.error('The "motionBlur" parameter must be of type `number`.');
951
- return DEFAULT_DIVIDES;
941
+ return DEFAULT_MOTION_BLUR;
952
942
  }
953
- return v <= 0 ? DEFAULT_DIVIDES : v;
943
+ return v <= 0 ? DEFAULT_MOTION_BLUR : v;
954
944
  };
955
945
  /**
956
946
  * Motion blur effect. The default value is `0.15`.
@@ -1149,7 +1139,7 @@ export class NgVirtualListComponent extends DisposableComponent {
1149
1139
  * `collapsable` determines whether an element with a `sticky` property greater than zero can collapse and
1150
1140
  * collapse elements in front that do not have a `sticky` property.
1151
1141
  * `fullSize` determines the size of an element when rendering lists with cell divisions. If sticky is 1 or 2, fullSize automatically becomes true. The default value is false.
1152
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts
1142
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts
1153
1143
  * @author Evgenii Alexandrovich Grebennikov
1154
1144
  * @email djonnyx@gmail.com
1155
1145
  */
@@ -1616,19 +1606,22 @@ export class NgVirtualListComponent extends DisposableComponent {
1616
1606
  }
1617
1607
  const scroller = this._scrollerComponent;
1618
1608
  if (!!scroller) {
1619
- const { width, height } = this._$bounds.getValue(), { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(), isVertical = this._isVertical, viewportSize = isVertical ? height : width, elementSize = isVertical ? elementHeight : elementWidth;
1609
+ const { width, height } = this._$bounds.getValue(), { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(), isVertical = this._isVertical, viewportSize = isVertical ? height : width, maxPosition = isVertical ? scroller.scrollHeight : scroller.scrollWidth, elementSize = isVertical ? elementHeight : elementWidth;
1620
1610
  let pos = Number.NaN;
1621
1611
  switch (align) {
1622
1612
  case FocusAlignments.START: {
1623
- pos = position + scroller.startLayoutOffset;
1613
+ const p = position + scroller.startLayoutOffset;
1614
+ pos = scroller.inverted ? (maxPosition - p) : p;
1624
1615
  break;
1625
1616
  }
1626
1617
  case FocusAlignments.CENTER: {
1627
- pos = position - (viewportSize - elementSize) * .5 + scroller.startLayoutOffset;
1618
+ const p = position - (viewportSize - elementSize) * .5 + scroller.startLayoutOffset;
1619
+ pos = scroller.inverted ? (maxPosition - p) : p;
1628
1620
  break;
1629
1621
  }
1630
1622
  case FocusAlignments.END: {
1631
- pos = position - (viewportSize - elementSize) + scroller.startLayoutOffset;
1623
+ const p = position - (viewportSize - elementSize) + scroller.startLayoutOffset;
1624
+ pos = scroller.inverted ? (maxPosition - p) : p;
1632
1625
  break;
1633
1626
  }
1634
1627
  case FocusAlignments.NONE:
@@ -1736,10 +1729,9 @@ export class NgVirtualListComponent extends DisposableComponent {
1736
1729
  this.onSnapItem.emit(id);
1737
1730
  })).subscribe();
1738
1731
  this._service.$tick.pipe(takeUntil(this._$unsubscribe), tap(() => {
1739
- this._scrollerComponent?.tick();
1740
- })).subscribe();
1741
- this._service.$tick.pipe(takeUntil(this._$unsubscribe), filter(() => this.dynamicSize === true), tap(() => {
1742
- this.checkBoundsOfElements();
1732
+ if (this.dynamicSize === true) {
1733
+ this.checkBoundsOfElements();
1734
+ }
1743
1735
  this._scrollerComponent?.tick();
1744
1736
  })).subscribe();
1745
1737
  }
@@ -2112,7 +2104,12 @@ export class NgVirtualListComponent extends DisposableComponent {
2112
2104
  combineLatest([this.$scrollbarEnabled, this.$isInfinity]).pipe(takeUntil(this._$unsubscribe), debounceTime(0), tap(([scrollbarEnabled, isInfinity]) => {
2113
2105
  this._$actualScrollbarEnabled.next(isInfinity ? false : scrollbarEnabled);
2114
2106
  })).subscribe();
2115
- const $alignment = this.$actualAlignment, $precalculatedScrollStartOffset = this._$precalculatedScrollStartOffset.asObservable(), $precalculatedScrollEndOffset = this._$precalculatedScrollEndOffset.asObservable(), $listBounds = this._$listBounds.asObservable().pipe(filter(b => !!b)), $scrollSize = this._$scrollSize.asObservable(), $bufferSize = this.$bufferSize.pipe(map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v)), $maxBufferSize = this.$maxBufferSize.pipe(map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v)), $snapToItem = this.$snapToItem, $snapToItemAlign = this.$snapToItemAlign, $stickyEnabled = this.$stickyEnabled, $isLazy = this.$collectionMode.pipe(map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE))), $enabledBufferOptimization = this.$enabledBufferOptimization, $snappingMethod = this.$snappingMethod.pipe(map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD))), $collapsingMode = this.$collapsingMode, $selectingMode = this.$selectingMode, $selectedIds = this.$selectedIds, $collapsedIds = this.$collapsedIds.pipe(distinctUntilChanged(), map(v => Array.isArray(v) ? v : [])), $collapsedItemIds = this._$collapsedItemIds.asObservable().pipe(distinctUntilChanged(), map(v => Array.isArray(v) ? v : [])), $itemTransform = this.$itemTransform, $screenReaderMessage = this.$screenReaderMessage, $displayItems = this._service.$displayItems, $cacheVersion = this._service.$cacheVersion;
2107
+ const $alignment = this.$actualAlignment, $precalculatedScrollStartOffset = this._$precalculatedScrollStartOffset.asObservable(), $precalculatedScrollEndOffset = this._$precalculatedScrollEndOffset.asObservable(), $listBounds = this._$listBounds.asObservable().pipe(filter(b => !!b)), $scrollSize = this._$scrollSize.asObservable(), $bufferSize = this.$bufferSize.pipe(map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v)), $maxBufferSize = this.$maxBufferSize.pipe(map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v)), $snapToItem = this.$snapToItem, $snapToItemAlign = this.$snapToItemAlign, $stickyEnabled = this.$stickyEnabled, $isLazy = this.$collectionMode.pipe(map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE))), $enabledBufferOptimization = this.$enabledBufferOptimization, $snappingMethod = this.$snappingMethod.pipe(map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD))), $collapsingMode = this.$collapsingMode, $selectingMode = this.$selectingMode, $selectedIds = this.$selectedIds, $collapsedIds = this.$collapsedIds.pipe(distinctUntilChanged(), map(v => Array.isArray(v) ? v : [])), $collapsedItemIds = this._$collapsedItemIds.asObservable().pipe(distinctUntilChanged(), map(v => Array.isArray(v) ? v : [])), $langTextDir = this.$langTextDir, $itemTransform = this.$itemTransform, $screenReaderMessage = this.$screenReaderMessage, $displayItems = this._service.$displayItems, $cacheVersion = this._service.$cacheVersion;
2108
+ combineLatest([$isVertical, $langTextDir, $itemTransform]).pipe(takeUntil(this._$unsubscribe), debounceTime(0), tap(([isVertical, langTextDir, itemTransform]) => {
2109
+ if (langTextDir === TextDirections.RTL && !isVertical && itemTransform) {
2110
+ throw Error('Currently, converting right-to-left items in horizontal lists is not possible.');
2111
+ }
2112
+ })).subscribe();
2116
2113
  $snapToItem.pipe(takeUntil(this._$unsubscribe), tap(v => {
2117
2114
  this._service.snapToItem = v;
2118
2115
  })).subscribe();
@@ -2173,6 +2170,9 @@ export class NgVirtualListComponent extends DisposableComponent {
2173
2170
  actualItems.push(item);
2174
2171
  }
2175
2172
  const normalizedCollection = normalizeCollection(actualItems, itemConfigMap, trackBy, divides);
2173
+ if (this._scrollerComponent?.inverted) {
2174
+ normalizedCollection.reverse();
2175
+ }
2176
2176
  this._$actualItems.next(normalizedCollection);
2177
2177
  })).subscribe();
2178
2178
  $isVertical.pipe(takeUntil(this._$unsubscribe), tap(v => {
@@ -2294,20 +2294,21 @@ export class NgVirtualListComponent extends DisposableComponent {
2294
2294
  if (!!scroller) {
2295
2295
  const isInfinity = this.isInfinity, collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached, emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading, fireUpdate = !this._readyForShow || this._$scrollingTo.getValue(), fireUpdateAtEdges = fireUpdate || !isInfinity, useAnimations = !isInfinity && readyForAnimations && prevScrollable;
2296
2296
  if (this._readyForShow || (cachable && cached)) {
2297
- const currentScrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft);
2298
- let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight : scroller.scrollWidth) :
2297
+ const inverted = scroller.inverted, currentScrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft), maxScrollSize = (isVertical ? scroller.scrollHeight : scroller.scrollWidth);
2298
+ let actualScrollSize = !this._readyForShow && snapScrollToEnd ? maxScrollSize :
2299
2299
  (isVertical ? scroller.scrollTop : scroller.scrollLeft), leftLayoutOffset = 0, displayItems;
2300
- const { width, height } = bounds, viewportSize = (isVertical ? height : width), opts = {
2300
+ const { width, height } = bounds, opts = {
2301
2301
  alignment, bounds: { width, height }, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize, maxBufferSize,
2302
- scrollSize: actualScrollSize, stickyEnabled, enabledBufferOptimization, snapToItem, snapToItemAlign, itemTransform,
2302
+ scrollSize: inverted ? maxScrollSize - actualScrollSize : actualScrollSize, stickyEnabled, enabledBufferOptimization,
2303
+ snapToItem, snapToItemAlign, inverted, itemTransform,
2303
2304
  };
2304
2305
  if (snapScrollToEnd && !this._readyForShow) {
2305
- const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });
2306
+ const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: inverted ? maxScrollSize - actualScrollSize : actualScrollSize });
2306
2307
  displayItems = calculatedDisplayItems;
2307
2308
  totalSize = calculatedTotalSize1;
2308
2309
  leftLayoutOffset = leftLayoutOffset1;
2309
2310
  if (!!itemTransform && dynamicSize && this._trackBox.delta !== 0) {
2310
- const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize + this._trackBox.delta });
2311
+ const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: inverted ? (maxScrollSize - actualScrollSize + this._trackBox.delta) : (actualScrollSize + this._trackBox.delta) });
2311
2312
  displayItems = calculatedDisplayItems;
2312
2313
  totalSize = calculatedTotalSize1;
2313
2314
  leftLayoutOffset = leftLayoutOffset1;
@@ -2319,7 +2320,7 @@ export class NgVirtualListComponent extends DisposableComponent {
2319
2320
  totalSize = calculatedTotalSize;
2320
2321
  leftLayoutOffset = leftLayoutOffset1;
2321
2322
  if (!!itemTransform && dynamicSize && this._trackBox.delta !== 0) {
2322
- const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize + this._trackBox.delta });
2323
+ const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: inverted ? (maxScrollSize - actualScrollSize + this._trackBox.delta) : (actualScrollSize + this._trackBox.delta) });
2323
2324
  displayItems = calculatedDisplayItems;
2324
2325
  totalSize = calculatedTotalSize;
2325
2326
  leftLayoutOffset = leftLayoutOffset1;
@@ -2343,18 +2344,49 @@ export class NgVirtualListComponent extends DisposableComponent {
2343
2344
  this.updateOffsetsByAllignment();
2344
2345
  scroller.delta = delta;
2345
2346
  prevScrollable = scroller.scrollable;
2346
- if ((snapScrollToStart && this._trackBox.isSnappedToStart && scroller.scrollable) ||
2347
- (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {
2348
- if (currentScrollSize !== roundedScrollPositionAfterUpdate) {
2347
+ if (!scroller.grabbing) {
2348
+ if ((snapScrollToStart && this._trackBox.isSnappedToStart && scroller.scrollable) ||
2349
+ (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {
2350
+ if (currentScrollSize !== roundedScrollPositionAfterUpdate) {
2351
+ this._trackBox.clearDelta();
2352
+ if (this._readyForShow) {
2353
+ this.emitScrollEvent(true, false, userAction);
2354
+ }
2355
+ this._trackBox.isScrollEnd;
2356
+ const params = {
2357
+ [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,
2358
+ fireUpdate: fireUpdateAtEdges, behavior: !useAnimations ? BEHAVIOR_INSTANT : ((this.animationParams.scrollToItem > 0 && this.scrollBehavior !== BEHAVIOR_INSTANT) ? BEHAVIOR_AUTO : BEHAVIOR_INSTANT),
2359
+ blending: useAnimations && scroller.hasAnimation(this._animationId), duration: this.animationParams.scrollToItem,
2360
+ };
2361
+ const animationId = scroller?.scrollTo?.(params);
2362
+ if (animationId > -1) {
2363
+ this._animationId = animationId;
2364
+ }
2365
+ else {
2366
+ scroller.stopAnimation(this._animationId);
2367
+ }
2368
+ scroller?.scrollTo?.(params);
2369
+ if (emitUpdate) {
2370
+ this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));
2371
+ }
2372
+ }
2373
+ return;
2374
+ }
2375
+ if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (snapScrollToEnd && !scroller.scrollable) ||
2376
+ (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||
2377
+ (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {
2349
2378
  this._trackBox.clearDelta();
2379
+ if (!this._trackBox.isSnappedToEnd) {
2380
+ this._trackBox.isScrollEnd = true;
2381
+ this._trackBox.isScrollStart = false;
2382
+ }
2350
2383
  if (this._readyForShow) {
2351
- this.emitScrollEvent(true, false, userAction);
2384
+ this.emitScrollEvent(true, false, false);
2352
2385
  }
2353
- this._trackBox.isScrollEnd;
2354
2386
  const params = {
2355
- [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,
2356
- fireUpdate: fireUpdateAtEdges, behavior: !useAnimations ? BEHAVIOR_INSTANT : ((this.animationParams.scrollToItem > 0 && this.scrollBehavior !== BEHAVIOR_INSTANT) ? BEHAVIOR_AUTO : BEHAVIOR_INSTANT),
2357
- blending: useAnimations && scroller.hasAnimation(this._animationId), duration: this.animationParams.scrollToItem,
2387
+ [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,
2388
+ fireUpdate: fireUpdateAtEdges, behavior: !useAnimations ? BEHAVIOR_INSTANT : ((this.animationParams.scrollToItem > 0 && this.scrollBehavior !== BEHAVIOR_INSTANT) ? BEHAVIOR_AUTO : BEHAVIOR_INSTANT), userAction: false,
2389
+ blending: useAnimations && scroller.hasAnimation(this._animationId) || cacheChanged, duration: this.animationParams.scrollToItem,
2358
2390
  };
2359
2391
  const animationId = scroller?.scrollTo?.(params);
2360
2392
  if (animationId > -1) {
@@ -2367,37 +2399,8 @@ export class NgVirtualListComponent extends DisposableComponent {
2367
2399
  if (emitUpdate) {
2368
2400
  this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));
2369
2401
  }
2402
+ return;
2370
2403
  }
2371
- return;
2372
- }
2373
- if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (snapScrollToEnd && !scroller.scrollable) ||
2374
- (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||
2375
- (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {
2376
- this._trackBox.clearDelta();
2377
- if (!this._trackBox.isSnappedToEnd) {
2378
- this._trackBox.isScrollEnd = true;
2379
- this._trackBox.isScrollStart = false;
2380
- }
2381
- if (this._readyForShow) {
2382
- this.emitScrollEvent(true, false, false);
2383
- }
2384
- const params = {
2385
- [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,
2386
- fireUpdate: fireUpdateAtEdges, behavior: !useAnimations ? BEHAVIOR_INSTANT : ((this.animationParams.scrollToItem > 0 && this.scrollBehavior !== BEHAVIOR_INSTANT) ? BEHAVIOR_AUTO : BEHAVIOR_INSTANT), userAction: false,
2387
- blending: useAnimations && scroller.hasAnimation(this._animationId) || cacheChanged, duration: this.animationParams.scrollToItem,
2388
- };
2389
- const animationId = scroller?.scrollTo?.(params);
2390
- if (animationId > -1) {
2391
- this._animationId = animationId;
2392
- }
2393
- else {
2394
- scroller.stopAnimation(this._animationId);
2395
- }
2396
- scroller?.scrollTo?.(params);
2397
- if (emitUpdate) {
2398
- this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));
2399
- }
2400
- return;
2401
2404
  }
2402
2405
  if (scrollSize !== scrollPositionAfterUpdate &&
2403
2406
  ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||
@@ -2537,23 +2540,23 @@ export class NgVirtualListComponent extends DisposableComponent {
2537
2540
  if (!!items && items.length) {
2538
2541
  const dynamicSize = this.dynamicSize, itemSize = this.actualItemSize, minItemSize = this.actualMinItemSize, maxItemSize = this.actualMaxItemSize, snapScrollToEnd = this.snapScrollToEnd;
2539
2542
  if (dynamicSize) {
2540
- const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, isVertical = this._isVertical, currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft, opts = {
2541
- alignment: this._$actualAlignment.getValue(),
2543
+ const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, isVertical = this._isVertical, inverted = scrollerComponent.inverted, maxScrollSize = isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth, currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft, opts = {
2544
+ alignment: this.actualAlignment, inverted,
2542
2545
  bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,
2543
2546
  bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,
2544
- scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),
2547
+ scrollSize: (inverted ? (maxScrollSize - currentScrollSize) : currentScrollSize),
2545
2548
  snapToItem: this.snapToItem, snapToItemAlign: this.snapToItemAlign,
2546
2549
  stickyEnabled: this.stickyEnabled, fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization,
2547
2550
  };
2548
2551
  let scrollSize = snapScrollToEnd && this._trackBox.isSnappedToEnd ?
2549
- (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth) :
2552
+ maxScrollSize :
2550
2553
  this._trackBox.getItemPosition(id, itemConfigMap, opts);
2551
2554
  if (scrollSize === -1) {
2552
2555
  return of([finished, { id, blending, iteration: nextIteration, cb }]).pipe(delay(0));
2553
2556
  }
2554
2557
  this._trackBox.clearDelta();
2555
2558
  const viewportSize = (isVertical ? height : width), { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {
2556
- ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,
2559
+ ...opts, scrollSize: (inverted ? (maxScrollSize - scrollSize) : scrollSize), fromItemId: isLastIteration ? undefined : id,
2557
2560
  }), delta1 = this._trackBox.delta;
2558
2561
  const normalizedTotalSize = totalSize < viewportSize ? viewportSize : totalSize;
2559
2562
  scrollerComponent.startLayoutOffset = leftLayoutOffset;
@@ -2565,7 +2568,7 @@ export class NgVirtualListComponent extends DisposableComponent {
2565
2568
  this.tracking();
2566
2569
  this.snappingHandler();
2567
2570
  this.updateOffsetsByAllignment();
2568
- scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });
2571
+ scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: (inverted ? (maxScrollSize - actualScrollSize) : actualScrollSize), fromItemId: id });
2569
2572
  if (scrollSize === -1) {
2570
2573
  return of([finished, { id, blending, iteration: nextIteration, cb }]).pipe(delay(0));
2571
2574
  }
@@ -2590,11 +2593,11 @@ export class NgVirtualListComponent extends DisposableComponent {
2590
2593
  else {
2591
2594
  const index = items.findIndex(item => item[trackBy] === id);
2592
2595
  if (index > -1) {
2593
- const isVertical = this._isVertical, itemSize = this.actualItemSize;
2596
+ const isVertical = this._isVertical, itemSize = this.actualItemSize, isInfinity = this.isInfinity, snapToItem = this.snapToItem, snapToItemAlign = this.snapToItemAlign;
2594
2597
  let scrollSize = index * itemSize;
2595
- if (this.isInfinity) {
2596
- if (this.snapToItem) {
2597
- switch (this.snapToItemAlign) {
2598
+ if (isInfinity) {
2599
+ if (snapToItem) {
2600
+ switch (snapToItemAlign) {
2598
2601
  case SnapToItemAligns.CENTER: {
2599
2602
  scrollSize += itemSize * .5;
2600
2603
  break;
@@ -2602,17 +2605,18 @@ export class NgVirtualListComponent extends DisposableComponent {
2602
2605
  }
2603
2606
  }
2604
2607
  }
2605
- const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, items = this._$actualItems.getValue(), opts = {
2606
- alignment: this._$actualAlignment.getValue(),
2608
+ const { width, height } = this._$bounds.getValue() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE }, itemConfigMap = this.itemConfigMap, items = this._$actualItems.getValue(), inverted = scrollerComponent.inverted, maxScrollSize = (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth), actualScrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft), opts = {
2609
+ alignment: this.actualAlignment, inverted,
2607
2610
  bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,
2608
2611
  bufferSize: this.bufferSize, maxBufferSize: this.maxBufferSize, itemTransform: this.itemTransform,
2609
- scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),
2610
- snapToItem: this.snapToItem, snapToItemAlign: this.snapToItemAlign,
2611
- stickyEnabled: this.stickyEnabled, fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization,
2612
+ scrollSize: (inverted ? (maxScrollSize - actualScrollSize) : actualScrollSize),
2613
+ snapToItem, snapToItemAlign, stickyEnabled: this.stickyEnabled, fromItemId: id,
2614
+ enabledBufferOptimization: this.enabledBufferOptimization,
2612
2615
  };
2613
2616
  this._trackBox.clearDelta();
2614
2617
  const viewportSize = (isVertical ? height : width), { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {
2615
- ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,
2618
+ ...opts, scrollSize: (inverted ? (maxScrollSize - scrollSize) : scrollSize),
2619
+ fromItemId: isLastIteration ? undefined : id,
2616
2620
  });
2617
2621
  const actualTotalSize = this.isInfinity ? (totalSize + viewportSize) : totalSize;
2618
2622
  const normalizedTotalSize = actualTotalSize < viewportSize ? viewportSize : actualTotalSize;
@@ -3135,13 +3139,13 @@ export class NgVirtualListComponent extends DisposableComponent {
3135
3139
  }
3136
3140
  }
3137
3141
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgVirtualListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3138
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgVirtualListComponent, selector: "ng-virtual-list", inputs: { scrollbarThickness: "scrollbarThickness", scrollbarMinSize: "scrollbarMinSize", scrollbarThumbRenderer: "scrollbarThumbRenderer", scrollbarThumbParams: "scrollbarThumbParams", loading: "loading", waitForPreparation: "waitForPreparation", clickDistance: "clickDistance", items: "items", selectedIds: "selectedIds", defaultItemValue: "defaultItemValue", collapsedIds: "collapsedIds", selectByClick: "selectByClick", collapseByClick: "collapseByClick", snap: "snap", stickyEnabled: "stickyEnabled", snapToEndTransitionInstantOffset: "snapToEndTransitionInstantOffset", scrollStartOffset: "scrollStartOffset", scrollEndOffset: "scrollEndOffset", snapScrollToStart: "snapScrollToStart", snapScrollToEnd: "snapScrollToEnd", snapScrollToBottom: "snapScrollToBottom", scrollbarEnabled: "scrollbarEnabled", scrollbarInteractive: "scrollbarInteractive", overlappingScrollbar: "overlappingScrollbar", scrollBehavior: "scrollBehavior", scrollingSettings: "scrollingSettings", itemTransform: "itemTransform", snapToItem: "snapToItem", snapToItemAlign: "snapToItemAlign", snappingDistance: "snappingDistance", scrollingOneByOne: "scrollingOneByOne", alignment: "alignment", zIndexWhenSelecting: "zIndexWhenSelecting", spreadingMode: "spreadingMode", divides: "divides", motionBlur: "motionBlur", maxMotionBlur: "maxMotionBlur", motionBlurEnabled: "motionBlurEnabled", animationParams: "animationParams", overscrollEnabled: "overscrollEnabled", enabledBufferOptimization: "enabledBufferOptimization", itemRenderer: "itemRenderer", itemConfigMap: "itemConfigMap", itemSize: "itemSize", minItemSize: "minItemSize", maxItemSize: "maxItemSize", dynamicSize: "dynamicSize", direction: "direction", collectionMode: "collectionMode", bufferSize: "bufferSize", maxBufferSize: "maxBufferSize", snappingMethod: "snappingMethod", collapsingMode: "collapsingMode", methodForSelecting: "methodForSelecting", selectingMode: "selectingMode", trackBy: "trackBy", screenReaderMessage: "screenReaderMessage", langTextDir: "langTextDir" }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd", onViewportChange: "onViewportChange", onSnapItem: "onSnapItem", onItemClick: "onItemClick", onSelect: "onSelect", onCollapse: "onCollapse", onScrollReachStart: "onScrollReachStart", onScrollReachEnd: "onScrollReachEnd" }, host: { styleAttribute: "position: relative;" }, providers: [NgVirtualListService, NgVirtualListPublicService], viewQueries: [{ propertyName: "_prerender", first: true, predicate: ["prerender"], descendants: true, read: NgPrerenderContainer }, { propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_snapContainerRef", first: true, predicate: ["snapRendererContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollerComponent", first: true, predicate: ["scroller"], descendants: true, read: NgScrollerComponent }], usesInheritance: true, ngImport: i0, template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"($bounds | async)!\" [direction]=\"($direction | async)!\"\r\n [dynamic]=\"($dynamicSize | async)!\" [divides]=\"($divides | async)!\" [isVertical]=\"($isVertical | async)!\"\r\n [itemSize]=\"($actualItemSize | async)!\" [trackBy]=\"($trackBy | async)!\" [itemRenderer]=\"($itemRenderer | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [scrollbarEnabled]=\"(scroller.$scrollbarShow | async)!\"\r\n [enabled]=\"($prerenderEnabled | async)!\"></ng-prerender-container>\r\n\r\n<ng-container *ngIf=\"($stickyEnabled | async)!\">\r\n <div localeSensitive [langTextDir]=\"($langTextDir | async)!\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"($classes | async)\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [alignmentStartOffset]=\"($alignmentScrollStartOffset | async)!\"\r\n [alignmentEndOffset]=\"($alignmentScrollEndOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [scrollbarThumbRenderer]=\"($scrollbarThumbRenderer | async)!\" [isInfinity]=\"($isInfinity | async)!\"\r\n [scrollbarThickness]=\"($scrollbarThickness | async)!\" [scrollbarThumbParams]=\"($scrollbarThumbParams | async)!\"\r\n [animationParams]=\"($animationParams | async)!\" [focusedElement]=\"($focusedElement | async)!\"\r\n [loading]=\"($loading | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\"\r\n [snappingDistance]=\"($snappingDistance | async)!\" [overlappingScrollbar]=\"($overlappingScrollbar | async)!\"\r\n [scrollbarEnabled]=\"($actualScrollbarEnabled | async)!\" [scrollbarInteractive]=\"($scrollbarInteractive | async)!\"\r\n [snapToItem]=\"($snapToItem | async)!\" [snapToItemAlign]=\"($snapToItemAlign | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollingSettings]=\"($scrollingSettings | async)!\" [scrollingOneByOne]=\"($scrollingOneByOne | async)!\"\r\n [motionBlur]=\"($motionBlur | async)!\" [maxMotionBlur]=\"($maxMotionBlur | async)!\"\r\n [motionBlurEnabled]=\"($motionBlurEnabled | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NgScrollerComponent, selector: "ng-scroller", inputs: ["scrollbarEnabled", "scrollbarInteractive", "focusedElement", "overlappingScrollbar", "content", "loading", "classes", "scrollbarMinSize", "scrollbarThickness", "scrollbarThumbRenderer", "scrollbarThumbParams", "motionBlur", "maxMotionBlur", "motionBlurEnabled"], outputs: ["onScrollbarVisible"] }, { kind: "component", type: i3.NgPrerenderContainer, selector: "ng-prerender-container", inputs: ["enabled", "direction", "isVertical", "scrollbarEnabled", "startOffset", "endOffset", "bounds", "dynamic", "itemSize", "trackBy", "divides"] }, { kind: "directive", type: i4.LocaleSensitiveDirective, selector: "[localeSensitive]", inputs: ["langTextDir", "listDir"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
3142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgVirtualListComponent, selector: "ng-virtual-list", inputs: { scrollbarThickness: "scrollbarThickness", scrollbarMinSize: "scrollbarMinSize", scrollbarThumbRenderer: "scrollbarThumbRenderer", scrollbarThumbParams: "scrollbarThumbParams", loading: "loading", waitForPreparation: "waitForPreparation", clickDistance: "clickDistance", items: "items", selectedIds: "selectedIds", defaultItemValue: "defaultItemValue", collapsedIds: "collapsedIds", selectByClick: "selectByClick", collapseByClick: "collapseByClick", snap: "snap", stickyEnabled: "stickyEnabled", snapToEndTransitionInstantOffset: "snapToEndTransitionInstantOffset", scrollStartOffset: "scrollStartOffset", scrollEndOffset: "scrollEndOffset", snapScrollToStart: "snapScrollToStart", snapScrollToEnd: "snapScrollToEnd", snapScrollToBottom: "snapScrollToBottom", scrollbarEnabled: "scrollbarEnabled", scrollbarInteractive: "scrollbarInteractive", overlappingScrollbar: "overlappingScrollbar", scrollBehavior: "scrollBehavior", scrollingSettings: "scrollingSettings", itemTransform: "itemTransform", snapToItem: "snapToItem", snapToItemAlign: "snapToItemAlign", snappingDistance: "snappingDistance", scrollingOneByOne: "scrollingOneByOne", alignment: "alignment", zIndexWhenSelecting: "zIndexWhenSelecting", spreadingMode: "spreadingMode", divides: "divides", motionBlur: "motionBlur", maxMotionBlur: "maxMotionBlur", motionBlurEnabled: "motionBlurEnabled", animationParams: "animationParams", overscrollEnabled: "overscrollEnabled", enabledBufferOptimization: "enabledBufferOptimization", itemRenderer: "itemRenderer", itemConfigMap: "itemConfigMap", itemSize: "itemSize", minItemSize: "minItemSize", maxItemSize: "maxItemSize", dynamicSize: "dynamicSize", direction: "direction", collectionMode: "collectionMode", bufferSize: "bufferSize", maxBufferSize: "maxBufferSize", snappingMethod: "snappingMethod", collapsingMode: "collapsingMode", methodForSelecting: "methodForSelecting", selectingMode: "selectingMode", trackBy: "trackBy", screenReaderMessage: "screenReaderMessage", langTextDir: "langTextDir" }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd", onViewportChange: "onViewportChange", onSnapItem: "onSnapItem", onItemClick: "onItemClick", onSelect: "onSelect", onCollapse: "onCollapse", onScrollReachStart: "onScrollReachStart", onScrollReachEnd: "onScrollReachEnd" }, host: { styleAttribute: "position: relative;" }, providers: [NgVirtualListService, NgVirtualListPublicService], viewQueries: [{ propertyName: "_prerender", first: true, predicate: ["prerender"], descendants: true, read: NgPrerenderContainer }, { propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_snapContainerRef", first: true, predicate: ["snapRendererContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_scrollerComponent", first: true, predicate: ["scroller"], descendants: true, read: NgScrollerComponent }], usesInheritance: true, ngImport: i0, template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"($bounds | async)!\" [direction]=\"($direction | async)!\"\r\n [dynamic]=\"($dynamicSize | async)!\" [divides]=\"($divides | async)!\" [isVertical]=\"($isVertical | async)!\"\r\n [itemSize]=\"($actualItemSize | async)!\" [trackBy]=\"($trackBy | async)!\" [itemRenderer]=\"($itemRenderer | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [scrollbarEnabled]=\"(scroller.$scrollbarShow | async)!\"\r\n [enabled]=\"($prerenderEnabled | async)!\"></ng-prerender-container>\r\n\r\n<ng-container *ngIf=\"($stickyEnabled | async)!\">\r\n <div localeSensitive [langTextDir]=\"($langTextDir | async)!\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"($classes | async)\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [langTextDir]=\"($langTextDir | async)!\" [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [alignmentStartOffset]=\"($alignmentScrollStartOffset | async)!\"\r\n [alignmentEndOffset]=\"($alignmentScrollEndOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [scrollbarThumbRenderer]=\"($scrollbarThumbRenderer | async)!\" [isInfinity]=\"($isInfinity | async)!\"\r\n [scrollbarThickness]=\"($scrollbarThickness | async)!\" [scrollbarThumbParams]=\"($scrollbarThumbParams | async)!\"\r\n [animationParams]=\"($animationParams | async)!\" [focusedElement]=\"($focusedElement | async)!\"\r\n [loading]=\"($loading | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\"\r\n [snappingDistance]=\"($snappingDistance | async)!\" [overlappingScrollbar]=\"($overlappingScrollbar | async)!\"\r\n [scrollbarEnabled]=\"($actualScrollbarEnabled | async)!\" [scrollbarInteractive]=\"($scrollbarInteractive | async)!\"\r\n [snapToItem]=\"($snapToItem | async)!\" [snapToItemAlign]=\"($snapToItemAlign | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollingSettings]=\"($scrollingSettings | async)!\" [scrollingOneByOne]=\"($scrollingOneByOne | async)!\"\r\n [motionBlur]=\"($motionBlur | async)!\" [maxMotionBlur]=\"($maxMotionBlur | async)!\"\r\n [motionBlurEnabled]=\"($motionBlurEnabled | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NgScrollerComponent, selector: "ng-scroller", inputs: ["scrollbarEnabled", "scrollbarInteractive", "focusedElement", "overlappingScrollbar", "content", "loading", "classes", "scrollbarMinSize", "scrollbarThickness", "scrollbarThumbRenderer", "scrollbarThumbParams", "motionBlur", "maxMotionBlur", "motionBlurEnabled"], outputs: ["onScrollbarVisible"] }, { kind: "component", type: i3.NgPrerenderContainer, selector: "ng-prerender-container", inputs: ["enabled", "direction", "isVertical", "scrollbarEnabled", "startOffset", "endOffset", "bounds", "dynamic", "itemSize", "trackBy", "divides"] }, { kind: "directive", type: i4.LocaleSensitiveDirective, selector: "[localeSensitive]", inputs: ["langTextDir", "listDir"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
3139
3143
  }
3140
3144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgVirtualListComponent, decorators: [{
3141
3145
  type: Component,
3142
3146
  args: [{ selector: 'ng-virtual-list', host: {
3143
3147
  'style': 'position: relative;'
3144
- }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, providers: [NgVirtualListService, NgVirtualListPublicService], template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"($bounds | async)!\" [direction]=\"($direction | async)!\"\r\n [dynamic]=\"($dynamicSize | async)!\" [divides]=\"($divides | async)!\" [isVertical]=\"($isVertical | async)!\"\r\n [itemSize]=\"($actualItemSize | async)!\" [trackBy]=\"($trackBy | async)!\" [itemRenderer]=\"($itemRenderer | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [scrollbarEnabled]=\"(scroller.$scrollbarShow | async)!\"\r\n [enabled]=\"($prerenderEnabled | async)!\"></ng-prerender-container>\r\n\r\n<ng-container *ngIf=\"($stickyEnabled | async)!\">\r\n <div localeSensitive [langTextDir]=\"($langTextDir | async)!\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"($classes | async)\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [alignmentStartOffset]=\"($alignmentScrollStartOffset | async)!\"\r\n [alignmentEndOffset]=\"($alignmentScrollEndOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [scrollbarThumbRenderer]=\"($scrollbarThumbRenderer | async)!\" [isInfinity]=\"($isInfinity | async)!\"\r\n [scrollbarThickness]=\"($scrollbarThickness | async)!\" [scrollbarThumbParams]=\"($scrollbarThumbParams | async)!\"\r\n [animationParams]=\"($animationParams | async)!\" [focusedElement]=\"($focusedElement | async)!\"\r\n [loading]=\"($loading | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\"\r\n [snappingDistance]=\"($snappingDistance | async)!\" [overlappingScrollbar]=\"($overlappingScrollbar | async)!\"\r\n [scrollbarEnabled]=\"($actualScrollbarEnabled | async)!\" [scrollbarInteractive]=\"($scrollbarInteractive | async)!\"\r\n [snapToItem]=\"($snapToItem | async)!\" [snapToItemAlign]=\"($snapToItemAlign | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollingSettings]=\"($scrollingSettings | async)!\" [scrollingOneByOne]=\"($scrollingOneByOne | async)!\"\r\n [motionBlur]=\"($motionBlur | async)!\" [maxMotionBlur]=\"($maxMotionBlur | async)!\"\r\n [motionBlurEnabled]=\"($motionBlurEnabled | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
3148
+ }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, providers: [NgVirtualListService, NgVirtualListPublicService], template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"($bounds | async)!\" [direction]=\"($direction | async)!\"\r\n [dynamic]=\"($dynamicSize | async)!\" [divides]=\"($divides | async)!\" [isVertical]=\"($isVertical | async)!\"\r\n [itemSize]=\"($actualItemSize | async)!\" [trackBy]=\"($trackBy | async)!\" [itemRenderer]=\"($itemRenderer | async)!\"\r\n [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [scrollbarEnabled]=\"(scroller.$scrollbarShow | async)!\"\r\n [enabled]=\"($prerenderEnabled | async)!\"></ng-prerender-container>\r\n\r\n<ng-container *ngIf=\"($stickyEnabled | async)!\">\r\n <div localeSensitive [langTextDir]=\"($langTextDir | async)!\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"($classes | async)\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"($classes | async)!\"\r\n [langTextDir]=\"($langTextDir | async)!\" [startOffset]=\"($startOffset | async)!\" [endOffset]=\"($endOffset | async)!\"\r\n [alignmentStartOffset]=\"($alignmentScrollStartOffset | async)!\"\r\n [alignmentEndOffset]=\"($alignmentScrollEndOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [scrollbarThumbRenderer]=\"($scrollbarThumbRenderer | async)!\" [isInfinity]=\"($isInfinity | async)!\"\r\n [scrollbarThickness]=\"($scrollbarThickness | async)!\" [scrollbarThumbParams]=\"($scrollbarThumbParams | async)!\"\r\n [animationParams]=\"($animationParams | async)!\" [focusedElement]=\"($focusedElement | async)!\"\r\n [loading]=\"($loading | async)!\" [overscrollEnabled]=\"($overscrollEnabled | async)!\"\r\n [snappingDistance]=\"($snappingDistance | async)!\" [overlappingScrollbar]=\"($overlappingScrollbar | async)!\"\r\n [scrollbarEnabled]=\"($actualScrollbarEnabled | async)!\" [scrollbarInteractive]=\"($scrollbarInteractive | async)!\"\r\n [snapToItem]=\"($snapToItem | async)!\" [snapToItemAlign]=\"($snapToItemAlign | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\" [scrollBehavior]=\"($scrollBehavior | async)!\"\r\n [scrollingSettings]=\"($scrollingSettings | async)!\" [scrollingOneByOne]=\"($scrollingOneByOne | async)!\"\r\n [motionBlur]=\"($motionBlur | async)!\" [maxMotionBlur]=\"($maxMotionBlur | async)!\"\r\n [motionBlurEnabled]=\"($motionBlurEnabled | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
3145
3149
  }], ctorParameters: () => [], propDecorators: { _prerender: [{
3146
3150
  type: ViewChild,
3147
3151
  args: ['prerender', { read: NgPrerenderContainer }]
@@ -3289,4 +3293,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3289
3293
  }], langTextDir: [{
3290
3294
  type: Input
3291
3295
  }] } });
3292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUM5RSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUMvRSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUVqRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQ25ELE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNyRyxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFDL0ksZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFDN0gsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUseUJB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RSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ3BGLFNBQVMsR0FBYyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDL0Ysb0JBQW9CLEdBQUcsWUFBWSxHQUFHLEVBQUUsR0FBRyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4SSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDdEYsa0JBQWtCLEdBQUcsWUFBWSxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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O3NCQURaLEtBQUs7Z0JBNEJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBNEJGLFVBQVU7c0JBRGIsS0FBSztnQkFvQ0YsYUFBYTtzQkFEaEIsS0FBSztnQkE2QkYsY0FBYztzQkFEakIsS0FBSztnQkFnQ0YsY0FBYztzQkFEakIsS0FBSztnQkFpQkYsa0JBQWtCO3NCQURyQixLQUFLO2dCQXdCRixhQUFhO3NCQURoQixLQUFLO2dCQTRCRixPQUFPO3NCQURWLEtBQUs7Z0JBK0JRLG1CQUFtQjtzQkFEaEMsS0FBSztnQkFnQ0YsV0FBVztzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCxcclxuICBPbkRlc3Ryb3ksIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGRlbGF5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCxcclxuICBPYnNlcnZhYmxlLFxyXG4gIG9mLCBza2lwLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSxcclxuICBERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTiwgREVGQVVMVF9JVEVNX1NJWkUsIERFRkFVTFRfQlVGRkVSX1NJWkUsIERFRkFVTFRfTElTVF9TSVpFLCBERUZBVUxUX1NUSUNLWV9FTkFCTEVELCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCxcclxuICBIRUlHSFRfUFJPUF9OQU1FLCBMRUZUX1BST1BfTkFNRSwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBQWCwgRk9DVVMsIFRPUF9QUk9QX05BTUUsIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsIFdJRFRIX1BST1BfTkFNRSxcclxuICBERUZBVUxUX01BWF9CVUZGRVJfU0laRSwgREVGQVVMVF9TRUxFQ1RJTkdfTU9ERVMsIERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLLCBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLLCBERUZBVUxUX0NPTExFQ1RJT05fTU9ERSxcclxuICBERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSwgREVGQVVMVF9TTkFQX1RPX0VORF9UUkFOU0lUSU9OX0lOU1RBTlRfT0ZGU0VULCBERUZBVUxUX1NOQVBfU0NST0xMVE9fRU5ELCBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HLFxyXG4gIE1PVVNFX0RPV04sIFRPVUNIX1NUQVJULCBERUZBVUxUX0xBTkdfVEVYVF9ESVIsIERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UsIERFRkFVTFRfV0FJVF9GT1JfUFJFUEFSQVRJT04sIERFRkFVTFRfU0NST0xMQkFSX1RISUNLTkVTUyxcclxuICBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSwgS0VZX0RPV04sIEJFSEFWSU9SX0FVVE8sIERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQsIERFRkFVTFRfU0NST0xMQkFSX0lOVEVSQUNUSVZFLCBERUZBVUxUX09WRVJTQ1JPTExfRU5BQkxFRCxcclxuICBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVMsIERFRkFVTFRfU0NST0xMX0JFSEFWSU9SLCBERUZBVUxUX1NOQVBfU0NST0xMVE9fU1RBUlQsIEVNUFRZX1NDUk9MTF9TVEFURV9WRVJTSU9OLCBNQVhfUkVHVUxBUl9TTkFQRURfQ09NUE9ORU5UUyxcclxuICBQUkVQQVJFX0lURVJBVElPTlMsIFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSCwgUk9MRV9MSVNUX0JPWCwgUk9MRV9MSVNULCBLRVlfVEFCLCBNQVhfVkVMT0NJVFlfRk9SX1NDUk9MTF9RVUFMSVRZX09QVElNSVpBVElPTl9MVkwxLFxyXG4gIFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfVVBEQVRFX0lURU1TLCBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX1VQREFURV9JVEVNUywgUFJFUEFSRV9JVEVSQVRJT05TX0ZPUl9DT0xMQVBTRV9JVEVNUyxcclxuICBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX0NPTExBUFNFX0lURU1TLCBNQVhfTlVNQkVSU19PRl9TS0lQU19GT1JfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMSwgREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MsXHJcbiAgREVGQVVMVF9TTkFQX1RPX0lURU0sIERFRkFVTFRfU05BUF9UT19JVEVNX0FMSUdOLCBWSUVXUE9SVCwgREVGQVVMVF9NT1RJT05fQkxVUiwgREVGQVVMVF9NQVhfTU9USU9OX0JMVVIsIERFRkFVTFRfU0NST0xMSU5HX09ORV9CWV9PTkUsXHJcbiAgREVGQVVMVF9NT1RJT05fQkxVUl9FTkFCTEVELCBERUZBVUxUX0RJVklERVMsIERFRkFVTFRfU05BUFBJTkdfRElTVEFOQ0UsIERFRkFVTFRfTUFYX0lURU1fU0laRSwgREVGQVVMVF9NSU5fSVRFTV9TSVpFLFxyXG4gIERFRkFVTFRfQUxJR05NRU5ULCBERUZBVUxUX0NPTExBUFNJTkdfTU9ERVMsIERFRkFVTFRfU1BSRUFESU5HX01PREUsIERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HLFxyXG4gIERFRkFVTFRfT1ZFUkxBUFBJTkdfU0NST0xMQkFSLFxyXG59IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQge1xyXG4gIElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbn0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIElTY3JvbGxFdmVudCwgSVNjcm9sbE9wdGlvbnMsIElBbmltYXRpb25QYXJhbXMsIElTaXplLCBJUmVuZGVyU3RhYmlsaXplck9wdGlvbnMsIElTY3JvbGxpbmdTZXR0aW5ncyxcclxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQge1xyXG4gIEFsaWdubWVudCwgQXJpdGhtZXRpY0V4cHJlc3Npb24sIEZvY3VzQWxpZ25tZW50LCBJZCwgSXRlbVRyYW5zZm9ybSwgU25hcHBpbmdEaXN0YW5jZSwgQ29sbGVjdGlvbk1vZGUsIERpcmVjdGlvbiwgU2VsZWN0aW5nTW9kZSxcclxuICBTbmFwcGluZ01ldGhvZCwgU25hcFRvSXRlbUFsaWduLCBUZXh0RGlyZWN0aW9uLCBDb2xsYXBzaW5nTW9kZSxcclxuICBTcHJlYWRpbmdNb2RlLFxyXG59IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEFsaWdubWVudHMsIENvbGxlY3Rpb25Nb2RlcywgRGlyZWN0aW9ucywgRm9jdXNBbGlnbm1lbnRzLCBTZWxlY3RpbmdNb2RlcywgU25hcHBpbmdNZXRob2RzLCBTbmFwVG9JdGVtQWxpZ25zLCBTcHJlYWRpbmdNb2RlcywgVGV4dERpcmVjdGlvbnMsXHJcbn0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlLCBTY3JvbGxFdmVudCwgdG9nZ2xlQ2xhc3NOYW1lIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IFRyYWNrQm94IH0gZnJvbSAnLi9jb3JlL3RyYWNrLWJveCc7XHJcbmltcG9ydCB7IGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZCB9IGZyb20gJy4vdXRpbHMvc25hcHBpbmctbWV0aG9kJztcclxuaW1wb3J0IHsgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vYmFzZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCQxIH0gZnJvbSAnLi9tb2RlbHMvY29tcG9uZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgaXNEaXJlY3Rpb24gfSBmcm9tICcuL3V0aWxzL2lzLWRpcmVjdGlvbic7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IGlzU2VsZWN0TW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtc2VsZWN0LW1vZGUnO1xyXG5pbXBvcnQgeyBpc0NvbGxhcHNlTW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtY29sbGFwc2UtbW9kZSc7XHJcbmltcG9ydCB7IFNlbGVjdGluZ01vZGVzVHlwZXMgfSBmcm9tICcuL2VudW1zL3NlbGVjdGluZy1tb2Rlcy10eXBlcyc7XHJcbmltcG9ydCB7IENNYXAgfSBmcm9tICcuL3V0aWxzL2NtYXAnO1xyXG5pbXBvcnQge1xyXG4gIHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlQm9vbGVhbiwgdmFsaWRhdGVGbG9hdCwgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVJbnQsIHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyxcclxufSBmcm9tICcuL3V0aWxzL3ZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBjb3B5VmFsdWVBc1JlYWRvbmx5LCBvYmplY3RBc1JlYWRvbmx5IH0gZnJvbSAnLi91dGlscy9vYmplY3QnO1xyXG5pbXBvcnQgeyBpc0NvbGxlY3Rpb25Nb2RlIH0gZnJvbSAnLi91dGlscy9pcy1jb2xsZWN0aW9uLW1vZGUnO1xyXG5pbXBvcnQgeyBOZ1Njcm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElTY3JvbGxUb1BhcmFtcyB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1zY3JvbGwtdmlldyc7XHJcbmltcG9ydCB7IE5nUHJlcmVuZGVyQ29udGFpbmVyIH0gZnJvbSAnLi9jb21wb25lbnRzL25nLXByZXJlbmRlci1jb250YWluZXIvbmctcHJlcmVuZGVyLWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsUGFyYW1zIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZm9ybWF0QWN0dWFsRGlzcGxheUl0ZW1zLCBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlIH0gZnJvbSAnLi91dGlscy9zY3JlZW4tcmVhZGVyLWZvcm1hdHRlcic7XHJcbmltcG9ydCB7IHZhbGlkYXRlSWQsIHZhbGlkYXRlSXRlcmF0aW9uLCB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yLCB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbiB9IGZyb20gJy4vdXRpbHMvbGlzdC12YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgRVZFTlRfS0VZX0RPV04sIEtFWV9BUlJfRE9XTiwgS0VZX0FSUl9MRUZULCBLRVlfQVJSX1JJR0hULCBLRVlfQVJSX1VQIH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS9jb25zdCc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RQdWJsaWNTZXJ2aWNlIH0gZnJvbSAnLi9uZy12aXJ0dWFsLWxpc3QtcHVibGljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc1BlcmNlbnRhZ2VWYWx1ZSB9IGZyb20gJy4vdXRpbHMvaXMtcGVyc2VudGFnZS12YWx1ZSc7XHJcbmltcG9ydCB7IHBhcnNlQXJpdGhtZXRpY0V4cHJlc3Npb24gfSBmcm9tICcuL3V0aWxzL3BhcnNlLWFyaXRobWV0aWMtZXhwcmVzc2lvbic7XHJcbmltcG9ydCB7IG5vcm1hbGl6ZUNvbGxlY3Rpb24gfSBmcm9tICcuL3V0aWxzL25vcm1hbGl6ZS1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgQ29sbGFwc2luZ01vZGVzIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IGlzU3ByZWFkaW5nTW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtc3ByZWFkaW5nLW1vZGUnO1xyXG5pbXBvcnQgeyBJR2V0SXRlbVBvc2l0aW9uT3B0aW9ucywgSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zIH0gZnJvbSAnLi9jb3JlL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBnZXRTY3JvbGxTdGF0ZVZlcnNpb24gfSBmcm9tICcuL3V0aWxzL2dldC1zY3JvbGwtc3RhdGUtdmVyc2lvbic7XHJcbmltcG9ydCB7IERpc3Bvc2FibGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL2Rpc3Bvc2FibGUtY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBWaXJ0dWFsIGxpc3QgY29tcG9uZW50LlxyXG4gKiBNYXhpbXVtIHBlcmZvcm1hbmNlIGZvciBleHRyZW1lbHkgbGFyZ2UgbGlzdHMuXHJcbiAqIEl0IGlzIGJhc2VkIG9uIGFsZ29yaXRobXMgZm9yIHZpcnR1YWxpemF0aW9uIG9mIHNjcmVlbiBvYmplY3RzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNy54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXZpcnR1YWwtbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ3N0eWxlJzogJ3Bvc2l0aW9uOiByZWxhdGl2ZTsnXHJcbiAgfSxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXHJcbiAgcHJvdmlkZXJzOiBbTmdWaXJ0dWFsTGlzdFNlcnZpY2UsIE5nVmlydHVhbExpc3RQdWJsaWNTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RDb21wb25lbnQgZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWRvbmx5LiBSZXR1cm5zIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAqL1xyXG4gIGdldCBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9XHJcblxyXG4gIHByaXZhdGUgX3NlcnZpY2UgPSBpbmplY3QoTmdWaXJ0dWFsTGlzdFNlcnZpY2UpO1xyXG5cclxuICBAVmlld0NoaWxkKCdwcmVyZW5kZXInLCB7IHJlYWQ6IE5nUHJlcmVuZGVyQ29udGFpbmVyIH0pXHJcbiAgcHJpdmF0ZSBfcHJlcmVuZGVyOiBOZ1ByZXJlbmRlckNvbnRhaW5lciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyZXJzQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfbGlzdENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcFJlbmRlcmVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJpdmF0ZSBfc25hcENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsZXInLCB7IHJlYWQ6IE5nU2Nyb2xsZXJDb21wb25lbnQgfSlcclxuICBwcml2YXRlIF9zY3JvbGxlckNvbXBvbmVudDogTmdTY3JvbGxlckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGVyID0gdGhpcy5fJHNjcm9sbGVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kbGlzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRsaXN0ID0gdGhpcy5fJGxpc3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGJlZW4gc2Nyb2xsZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgY29tcGxldGVkIHNjcm9sbGluZy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSB2aWV3cG9ydCBzaXplIGlzIGNoYW5nZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25WaWV3cG9ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNpemU+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgdGhlIGNvbXBvbmVudCBJRCB3aGVuIGFuIGVsZW1lbnQgY3Jvc3NlcyB0aGUgYWxpZ25tZW50IGxpbmUgc3BlY2lmaWVkIGJ5IHRoZSBzbmFwVG9JdGVtQWxpZ24gcHJvcGVydHkuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TbmFwSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8SWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gYW4gZWxlbWVudCBpcyBjbGlja2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCBudWxsPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGVsZW1lbnRzIGFyZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8SWQ+IHwgSWQgfCBudWxsPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGVsZW1lbnRzIGFyZSBjb2xsYXBzZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25Db2xsYXBzZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8SWQ+PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBzY3JvbGwgcmVhY2hlcyB0aGUgc3RhcnQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxSZWFjaFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBzY3JvbGwgcmVhY2hlcyB0aGUgZW5kLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsUmVhY2hFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgXyRzaG93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHNob3cgPSB0aGlzLl8kc2hvdy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGluaXRpYWxpemVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJGluaXRpYWxpemVkID0gdGhpcy5fJGluaXRpYWxpemVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyVGhpY2tuZXNzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX1RISUNLTkVTUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJUaGlja25lc3NUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyVGhpY2tuZXNzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX1RISUNLTkVTUztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbGJhciB0aGlja25lc3MuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhclRoaWNrbmVzc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhck1pblNpemUgPSB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyTWluU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJNaW5TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWluaW11bSBzY3JvbGxiYXIgc2l6ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJNaW5TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyTWluU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCkgYXMgbnVtYmVyOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyID0gdGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhclRodW1iUmVuZGVyZXJUcmFuc2Zvcm0gPSAodjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJUaHVtYlJlbmRlcmVyXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgb2JqZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxiYXIgY3VzdG9taXphdGlvbiB0ZW1wbGF0ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhclRodW1iUmVuZGVyZXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJUaHVtYlJlbmRlcmVyKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGw+KHt9KTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGJhclRodW1iUGFyYW1zID0gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJUaHVtYlBhcmFtc1RyYW5zZm9ybSA9ICh2OiB7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyVGh1bWJQYXJhbXNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgLicpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHNjcm9sbGJhci5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlBhcmFtcyh2OiB7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJUaHVtYlBhcmFtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxiYXJUaHVtYlBhcmFtcygpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmcgPSB7XHJcbiAgICB0cmFuc2Zvcm06ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImxvYWRpbmdcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHY7XHJcbiAgICB9LFxyXG4gIH0gYXMgYW55O1xyXG5cclxuICBwcml2YXRlIF8kbG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbG9hZGluZyA9IHRoaXMuXyRsb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9sb2FkaW5nVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibG9hZGluZ1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzY3JvbGxCYXIgZ29lcyBpbnRvIGxvYWRpbmcgc3RhdGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbG9hZGluZyh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2xvYWRpbmdUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGxvYWRpbmcubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyR3YWl0Rm9yUHJlcGFyYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfV0FJVF9GT1JfUFJFUEFSQVRJT04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfd2FpdEZvclByZXBhcmF0aW9uVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJ3YWl0Rm9yUHJlcGFyYXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfV0FJVF9GT1JfUFJFUEFSQVRJT047XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0cnVlLCBpdCB3aWxsIHdhaXQgdW50aWwgdGhlIGxpc3QgaXRlbXMgYXJlIGZ1bGx5IHByZXBhcmVkIGJlZm9yZSBkaXNwbGF5aW5nIHRoZW0uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgd2FpdEZvclByZXBhcmF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl93YWl0Rm9yUHJlcGFyYXRpb25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHdhaXRGb3JQcmVwYXJhdGlvbigpIHsgcmV0dXJuIHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY2xpY2tEaXN0YW5jZSA9IHRoaXMuXyRjbGlja0Rpc3RhbmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jbGlja0Rpc3RhbmNlVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImNsaWNrRGlzdGFuY2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DTElDS19ESVNUQU5DRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtYXhpbXVtIHNjcm9sbCBkaXN0YW5jZSBhdCB3aGljaCBhIGNsaWNrIGV2ZW50IGlzIHRyaWdnZXJlZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjbGlja0Rpc3RhbmNlKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jbGlja0Rpc3RhbmNlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjbGlja0Rpc3RhbmNlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY2xpY2tEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCkgYXMgbnVtYmVyOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbXMgPSB0aGlzLl8kaXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1zVHJhbnNmb3JtID0gKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdChpdGVtLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAmJiAhKHZhbGlkYXRlRmxvYXQoaXRlbT8uW3RyYWNrQnldIGFzIG51bWJlciwgdHJ1ZSkgfHwgdmFsaWRhdGVTdHJpbmcoaXRlbT8uW3RyYWNrQnldIGFzIHN0cmluZywgdHJ1ZSwgdHJ1ZSkpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiaXRlbXNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJVmlydHVhbExpc3RDb2xsZWN0aW9uYCBvciBgbnVsbGAuJyk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtcyh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtcygpIHsgcmV0dXJuIHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpIGFzIElWaXJ0dWFsTGlzdENvbGxlY3Rpb247IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdGVkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4gfCBJZCB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2VsZWN0ZWRJZHMgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSWRzVHJhbnNmb3JtID0gKHY6IEFycmF5PElkPiB8IElkIHwgbnVsbCkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2IGFzIGFueSwgdHJ1ZSwgdHJ1ZSkgfHwgdmFsaWRhdGVTdHJpbmcodiBhcyBhbnksIHRydWUsIHRydWUpIHx8IHZhbGlkYXRlRmxvYXQodiBhcyBhbnksIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIGlmICh2ICYmIEFycmF5LmlzQXJyYXkodikpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpXTtcclxuICAgICAgICAgIHZhbGlkID0gdmFsaWRhdGVTdHJpbmcoaXRlbSBhcyBhbnkpIHx8IHZhbGlkYXRlRmxvYXQoaXRlbSBhcyBhbnkpO1xyXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdGVkSWRzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgQXJyYXk8SWQ+IHwgSWRgIG9yIGBudWxsYC4nKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gPyBbXSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RlZElkcyh2OiBBcnJheTxJZD4gfCBJZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NlbGVjdGVkSWRzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNlbGVjdGVkSWRzKCkgeyByZXR1cm4gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRlZmF1bHRJdGVtVmFsdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGRlZmF1bHRJdGVtVmFsdWUgPSB0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGVmYXVsdEl0ZW1WYWx1ZSh2OiBJVmlydHVhbExpc3RJdGVtIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgZGVmYXVsdEl0ZW1WYWx1ZSgpIHsgcmV0dXJuIHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjb2xsYXBzZWRJZHMgPSB0aGlzLl8kY29sbGFwc2VkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzZWRJZHNUcmFuc2Zvcm0gPSAodjogQXJyYXk8SWQ+KSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZUFycmF5KHYgYXMgYW55LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodiAmJiBBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKGl0ZW0gYXMgYW55KSB8fCB2YWxpZGF0ZUZsb2F0KGl0ZW0gYXMgYW55KTtcclxuICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZWRJZHNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBBcnJheTxJZD5gLicpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb2xsYXBzZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sbGFwc2VkSWRzKHY6IEFycmF5PElkPikge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxhcHNlZElkc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGFwc2VkSWRzKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RCeUNsaWNrID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NFTEVDVF9CWV9DTElDSyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzZWxlY3RCeUNsaWNrID0gdGhpcy5fJHNlbGVjdEJ5Q2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdEJ5Q2xpY2tUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RCeUNsaWNrXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NFTEVDVF9CWV9DTElDSztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGBmYWxzZWAsIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIHVzaW5nIHRoZSBjb25maWcuYXBpIG1ldGhvZCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlOyBcclxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGNsaWNraW5nIG9uIGl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2VsZWN0QnlDbGljayh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdEJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NlbGVjdEJ5Q2xpY2tUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNlbGVjdEJ5Q2xpY2submV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzZWxlY3RCeUNsaWNrKCkgeyByZXR1cm4gdGhpcy5fJHNlbGVjdEJ5Q2xpY2suZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VCeUNsaWNrID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxhcHNlQnlDbGljayA9IHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbGxhcHNlQnlDbGlja1RyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImNvbGxhcHNlQnlDbGlja1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGBmYWxzZWAsIHRoZSBlbGVtZW50IGlzIGNvbGxhcHNlZCB1c2luZyB0aGUgY29uZmlnLmNvbGxhcHNlIG1ldGhvZCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlOyBcclxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IGlzIGNvbGxhcHNlZCBieSBjbGlja2luZyBvbiBpdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNlQnlDbGljayh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbGxhcHNlQnlDbGljay5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGFwc2VCeUNsaWNrVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2submV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzZUJ5Q2xpY2soKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBVc2UgdGhlIGBzdGlja3lFbmFibGVkYCBwcm9wZXJ0eSBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXAodjogYm9vbGVhbikge1xyXG4gICAgdGhyb3cgRXJyb3IoYFByb3BlcnR5IHNuYXAgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBcXGBzdGlja3lFbmFibGVkXFxgIHByb3BlcnR5IGluc3RlYWQuYCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJHN0aWNreUVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU1RJQ0tZX0VOQUJMRUQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc3RpY2t5RW5hYmxlZCA9IHRoaXMuXyRzdGlja3lFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zdGlja3lFbmFibGVkVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic3RpY2t5RW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TVElDS1lfRU5BQkxFRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciBpdGVtcyB3aXRoIHRoZSBnaXZlbiBgc3RpY2t5YCBpbiBgaXRlbUNvbmZpZ01hcGAgd2lsbCBzdGljayB0byB0aGUgZWRnZXMuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc3RpY2t5RW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHN0aWNreUVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3N0aWNreUVuYWJsZWRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHN0aWNreUVuYWJsZWQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzdGlja3lFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJHN0aWNreUVuYWJsZWQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TTkFQX1RPX0VORF9UUkFOU0lUSU9OX0lOU1RBTlRfT0ZGU0VUKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0ID0gdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIG9mZnNldCB2YWx1ZTsgaWYgdGhlIHNjcm9sbCBhcmVhIHZhbHVlIGlzIGV4Y2VlZGVkLCB0aGUgc2Nyb2xsIGFuaW1hdGlvbiB3aWxsIGJlIGRpc2FibGVkLiBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsU3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFyaXRobWV0aWNFeHByZXNzaW9uPigwKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxTdGFydE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2LCB0cnVlKSB8fCBpc1BlcmNlbnRhZ2VWYWx1ZSh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbFN0YXJ0T2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHR5cGUgYG51bWJlcmAgb3IgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2Nyb2xsIHN0YXJ0IG9mZnNldCB2YWx1ZS4gQ2FuIGJlIHNwZWNpZmllZCBpbiBhYnNvbHV0ZSBvciBwZXJjZW50YWdlIHZhbHVlcy5cclxuICAgKiBTdXBwb3J0cyBhcml0aG1ldGljIGV4cHJlc3Npb25zIG9mIGFkZGl0aW9uIGA1MCUgKyAyNWAgb3Igc3VidHJhY3Rpb24gYDUwJSAtIDI1YC4gRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxTdGFydE9mZnNldCh2OiBBcml0aG1ldGljRXhwcmVzc2lvbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXRUcmFuc2Zvcm0odiBhcyBhbnkpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJpdGhtZXRpY0V4cHJlc3Npb24+KDApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsRW5kT2Zmc2V0VHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYsIHRydWUpIHx8IGlzUGVyY2VudGFnZVZhbHVlKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsRW5kT2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHR5cGUgYG51bWJlcmAgb3IgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2Nyb2xsIGVuZCBvZmZzZXQgdmFsdWUuIENhbiBiZSBzcGVjaWZpZWQgaW4gYWJzb2x1dGUgb3IgcGVyY2VudGFnZSB2YWx1ZXMuXHJcbiAgICogU3VwcG9ydHMgYXJpdGhtZXRpYyBleHByZXNzaW9ucyBvZiBhZGRpdGlvbiBgNTAlICsgMjVgIG9yIHN1YnRyYWN0aW9uIGA1MCUgLSAyNWAuIERlZmF1bHQgdmFsdWUgaXMgXCIwXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsRW5kT2Zmc2V0KHY6IEFyaXRobWV0aWNFeHByZXNzaW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbEVuZE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0VHJhbnNmb3JtKHYgYXMgYW55KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsRW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwU2Nyb2xsVG9TdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQX1NDUk9MTFRPX1NUQVJUKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBTY3JvbGxUb1N0YXJ0ID0gdGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwU2Nyb2xsVG9TdGFydFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBTY3JvbGxUb1N0YXJ0XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfU0NST0xMVE9fU1RBUlQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbCB3aWxsIGJlIGFuY2hvcmVkIHRvIHRoZSBzdGFydCBvZiB0aGUgbGlzdC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKiBUaGlzIHByb3BlcnR5IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgc25hcFNjcm9sbFRvRW5kIHByb3BlcnR5LlxyXG4gICAqIFRoYXQgaXMsIGlmIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgaW5pdGlhbGx5IHNuYXAgXHJcbiAgICogdG8gdGhlIGJlZ2lubmluZzsgaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGVuZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQuIFxyXG4gICAqIElmIHNuYXBTY3JvbGxUb1N0YXJ0IGlzIGRpc2FibGVkIGFuZCBzbmFwU2Nyb2xsVG9FbmQgaXMgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQ7IFxyXG4gICAqIGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBiZWdpbm5pbmcsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgYmVnaW5uaW5nLiBcclxuICAgKiBJZiBib3RoIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGRpc2FibGVkLCB0aGUgbGlzdCB3aWxsIG5ldmVyIHNuYXAgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICogSW4gdGhlIGBzcHJlYWRpbmdNb2RlPVNwcmVhZGluZ01vZGVzLklORklOSVRZYCBtb2RlLCB0aGUgYHNuYXBTY3JvbGxUb1N0YXJ0YCBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLCBzaW5jZSB0aGUgbGlzdCBoYXMgbm8gYmVnaW5uaW5nIG9yIGVuZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9TdGFydCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9TdGFydFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwU2Nyb2xsVG9TdGFydCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwU2Nyb2xsVG9FbmQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUF9TQ1JPTExUT19FTkQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFNjcm9sbFRvRW5kID0gdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFNjcm9sbFRvRW5kVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFNjcm9sbFRvRW5kXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfU0NST0xMVE9fRU5EO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGwgd2lsbCBiZSBhbmNob3JlZCB0byB0aGUg0YPRgtCyIG9mIHRoZSBsaXN0LiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqIFRoYXQgaXMsIGlmIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgaW5pdGlhbGx5IHNuYXAgXHJcbiAgICogdG8gdGhlIGJlZ2lubmluZzsgaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGVuZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQuIFxyXG4gICAqIElmIHNuYXBTY3JvbGxUb1N0YXJ0IGlzIGRpc2FibGVkIGFuZCBzbmFwU2Nyb2xsVG9FbmQgaXMgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQ7IFxyXG4gICAqIGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBiZWdpbm5pbmcsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgYmVnaW5uaW5nLiBcclxuICAgKiBJZiBib3RoIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGRpc2FibGVkLCB0aGUgbGlzdCB3aWxsIG5ldmVyIHNuYXAgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICogSW4gdGhlIGBzcHJlYWRpbmdNb2RlPVNwcmVhZGluZ01vZGVzLklORklOSVRZYCBtb2RlLCB0aGUgYHNuYXBTY3JvbGxUb0VuZGAgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCwgc2luY2UgdGhlIGxpc3QgaGFzIG5vIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFNjcm9sbFRvRW5kKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFNjcm9sbFRvRW5kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9FbmRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBTY3JvbGxUb0VuZCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwU2Nyb2xsVG9FbmQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFRoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9Cb3R0b20odjogYm9vbGVhbikge1xyXG4gICAgdGhyb3cgRXJyb3IoJ1RoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS4nKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJFbmFibGVkID0gdGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhckVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJFbmFibGVkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc2hvd24gb3Igbm90LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyRW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhckVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFySW50ZXJhY3RpdmUgPSB0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhckludGVyYWN0aXZlVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFySW50ZXJhY3RpdmVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX0lOVEVSQUNUSVZFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHNjcm9sbGluZyB1c2luZyB0aGUgc2Nyb2xsYmFyIHdpbGwgYmUgcG9zc2libGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhckludGVyYWN0aXZlKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhckludGVyYWN0aXZlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhckludGVyYWN0aXZlKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG92ZXJsYXBwaW5nU2Nyb2xsYmFyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX09WRVJMQVBQSU5HX1NDUk9MTEJBUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRvdmVybGFwcGluZ1Njcm9sbGJhciA9IHRoaXMuXyRvdmVybGFwcGluZ1Njcm9sbGJhci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb3ZlcmxhcHBpbmdTY3JvbGxiYXJUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvdmVybGFwcGluZ1Njcm9sbGJhclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9PVkVSTEFQUElOR19TQ1JPTExCQVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbCBiYXIgd2lsbCBvdmVybGFwIHRoZSBsaXN0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcImZhbHNlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgb3ZlcmxhcHBpbmdTY3JvbGxiYXIodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRvdmVybGFwcGluZ1Njcm9sbGJhci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fb3ZlcmxhcHBpbmdTY3JvbGxiYXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgb3ZlcmxhcHBpbmdTY3JvbGxiYXIoKSB7IHJldHVybiB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsQmVoYXZpb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjcm9sbEJlaGF2aW9yPihERUZBVUxUX1NDUk9MTF9CRUhBVklPUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxCZWhhdmlvciA9IHRoaXMuXyRzY3JvbGxCZWhhdmlvci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQmVoYXZpb3JUcmFuc2Zvcm0gPSAodjogU2Nyb2xsQmVoYXZpb3IpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxCZWhhdmlvclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExfQkVIQVZJT1I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSBzY3JvbGxpbmcgYmVoYXZpb3IgZm9yIGFueSBlbGVtZW50IG9uIHRoZSBwYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNtb290aFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEJlaGF2aW9yKHY6IFNjcm9sbEJlaGF2aW9yKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbEJlaGF2aW9yLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxCZWhhdmlvclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsQmVoYXZpb3IubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxCZWhhdmlvcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxCZWhhdmlvci5nZXRWYWx1ZSgpOyB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGluZ1NldHRpbmdzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2Nyb2xsaW5nU2V0dGluZ3M+KERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGluZ1NldHRpbmdzID0gdGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxpbmdTZXR0aW5nc1RyYW5zZm9ybSA9ICh2OiBJU2Nyb2xsaW5nU2V0dGluZ3MpOiBJU2Nyb2xsaW5nU2V0dGluZ3MgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQgJiYgISF2KSB7XHJcbiAgICAgIGNvbnN0IHsgZnJpY3Rpb25hbEZvcmNlLCBtYXNzLCBtYXhEaXN0YW5jZSwgbWF4RHVyYXRpb24sIHNwZWVkU2NhbGUsIG9wdGltaXphdGlvbiB9ID0gdjtcclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KGZyaWN0aW9uYWxGb3JjZSwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJmcmljdGlvbmFsRm9yY2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlRmxvYXQobWFzcywgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXNzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1heERpc3RhbmNlLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heERpc3RhbmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1heER1cmF0aW9uLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heER1cmF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHNwZWVkU2NhbGUsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic3BlZWRTY2FsZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKG9wdGltaXphdGlvbiwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvcHRpbWl6YXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsaW5nU2V0dGluZ3NcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgIG9yIG51bGwuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZyaWN0aW9uYWxGb3JjZTogdi5mcmljdGlvbmFsRm9yY2UgIT09IHVuZGVmaW5lZCAmJiB2LmZyaWN0aW9uYWxGb3JjZSA+IDAgPyB2LmZyaWN0aW9uYWxGb3JjZSA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLmZyaWN0aW9uYWxGb3JjZSxcclxuICAgICAgbWFzczogdi5tYXNzICE9PSB1bmRlZmluZWQgJiYgdi5tYXNzID4gMCA/IHYubWFzcyA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm1hc3MsXHJcbiAgICAgIG1heERpc3RhbmNlOiB2Lm1heERpc3RhbmNlICE9PSB1bmRlZmluZWQgJiYgdi5tYXhEaXN0YW5jZSA+IDAgPyB2Lm1heERpc3RhbmNlIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MubWF4RGlzdGFuY2UsXHJcbiAgICAgIG1heER1cmF0aW9uOiB2Lm1heER1cmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdi5tYXhEdXJhdGlvbiA+IDAgPyB2Lm1heER1cmF0aW9uIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MubWF4RHVyYXRpb24sXHJcbiAgICAgIHNwZWVkU2NhbGU6IHYuc3BlZWRTY2FsZSAhPT0gdW5kZWZpbmVkICYmIHYuc3BlZWRTY2FsZSA+IDAgPyB2LnNwZWVkU2NhbGUgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5zcGVlZFNjYWxlLFxyXG4gICAgICBvcHRpbWl6YXRpb246IHYub3B0aW1pemF0aW9uID8/IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm9wdGltaXphdGlvbixcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsaW5nIHNldHRpbmdzLlxyXG4gICAqIC0gZnJpY3Rpb25hbEZvcmNlIC0gRnJpY3Rpb25hbCBmb3JjZS4gRGVmYXVsdCB2YWx1ZSBpcyAwLjAzNS5cclxuICAgKiAtIG1hc3MgLSBNYXNzLiBEZWZhdWx0IHZhbHVlIGlzIDAuMDA1LlxyXG4gICAqIC0gbWF4RGlzdGFuY2UgLSBNYXhpbXVtIHNjcm9sbGluZyBkaXN0YW5jZS4gRGVmYXVsdCB2YWx1ZSBpcyAxMDAwMDAuXHJcbiAgICogLSBtYXhEdXJhdGlvbiAtIE1heGltdW0gYW5pbWF0aW9uIGR1cmF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDQwMDAuXHJcbiAgICogLSBzcGVlZFNjYWxlIC0gU3BlZWQgc2NhbGUuIERlZmF1bHQgdmFsdWUgaXMgMTAuXHJcbiAgICogLSBvcHRpbWl6YXRpb24gLSBFbmFibGVzIHNjcm9sbGluZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGluZ1NldHRpbmdzKHY6IElTY3JvbGxpbmdTZXR0aW5ncykge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsaW5nU2V0dGluZ3NUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsaW5nU2V0dGluZ3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsaW5nU2V0dGluZ3MuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVRyYW5zZm9ybSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SXRlbVRyYW5zZm9ybSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbVRyYW5zZm9ybSA9IHRoaXMuXyRpdGVtVHJhbnNmb3JtLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtVHJhbnNmb3JtVHJhbnNmb3JtID0gKHY6IGFueSkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVGdW5jdGlvbih2LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiaXRlbVRyYW5zZm9ybVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEl0ZW1UcmFuc2Zvcm1gIG9yIGBudWxsYC4nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDdXN0b20gdHJhbnNmb3JtYXRpb24gb2YgZWxlbWVudCdzIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUsIG9wYWNpdHkgYW5kIHpJbmRleC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1UcmFuc2Zvcm0odjogSXRlbVRyYW5zZm9ybSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbVRyYW5zZm9ybS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbVRyYW5zZm9ybVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVRyYW5zZm9ybS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1UcmFuc2Zvcm0oKSB7IHJldHVybiB0aGlzLl8kaXRlbVRyYW5zZm9ybS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwVG9JdGVtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NOQVBfVE9fSVRFTSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwVG9JdGVtID0gdGhpcy5fJHNuYXBUb0l0ZW0uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBUb0l0ZW1UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9JdGVtXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfVE9fSVRFTTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXAgdG8gYW4gaXRlbS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwVG9JdGVtKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFRvSXRlbS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRvSXRlbVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFRvSXRlbS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBUb0l0ZW0oKSB7IHJldHVybiB0aGlzLl8kc25hcFRvSXRlbS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwVG9JdGVtQWxpZ24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNuYXBUb0l0ZW1BbGlnbj4oREVGQVVMVF9TTkFQX1RPX0lURU1fQUxJR04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFRvSXRlbUFsaWduID0gdGhpcy5fJHNuYXBUb0l0ZW1BbGlnbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRvSXRlbUFsaWduVHJhbnNmb3JtID0gKHY6IFNuYXBUb0l0ZW1BbGlnbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ3N0YXJ0JyB8fCB2ID09PSAnY2VudGVyJyB8fCB2ID09PSAnZW5kJyk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9JdGVtQWxpZ25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYHN0YXJ0YCwgYGNlbnRlcmAgb3IgYGVuZGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfVE9fSVRFTV9BTElHTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsaWdubWVudCBmb3Igc25hcFRvSXRlbS4gQXZhaWxhYmxlIHZhbHVlcyDigIvigIthcmUgYHN0YXJ0YCwgYGNlbnRlcmAsIGFuZCBgZW5kYC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGNlbnRlcmAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFRvSXRlbUFsaWduKHY6IFNuYXBUb0l0ZW1BbGlnbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwVG9JdGVtQWxpZ24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBUb0l0ZW1BbGlnblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFRvSXRlbUFsaWduLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvSXRlbUFsaWduKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBUb0l0ZW1BbGlnbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwcGluZ0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ0Rpc3RhbmNlPihERUZBVUxUX1NOQVBQSU5HX0RJU1RBTkNFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBwaW5nRGlzdGFuY2UgPSB0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcHBpbmdEaXN0YW5jZVRyYW5zZm9ybSA9ICh2OiBTbmFwcGluZ0Rpc3RhbmNlIHwgYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpIHx8IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwcGluZ0Rpc3RhbmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUFBJTkdfRElTVEFOQ0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTbmFwcGluZyBhY3RpdmF0aW9uIGRpc3RhbmNlLiBDYW4gYmUgc3BlY2lmaWVkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZWxlbWVudCBzaXplIG9yIGluIGFic29sdXRlIHZhbHVlcy5cclxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMjUlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwcGluZ0Rpc3RhbmNlKHY6IFNuYXBwaW5nRGlzdGFuY2UpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcHBpbmdEaXN0YW5jZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nRGlzdGFuY2UoKSB7IHJldHVybiB0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdPbmVCeU9uZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExJTkdfT05FX0JZX09ORSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxpbmdPbmVCeU9uZSA9IHRoaXMuXyRzY3JvbGxpbmdPbmVCeU9uZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsaW5nT25lQnlPbmVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGluZ09uZUJ5T25lXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19PTkVfQllfT05FO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gc2Nyb2xsIG9uZSBpdGVtIGF0IGEgdGltZSBpZiB0cnVlIGFuZCB0aGUgc2Nyb2xsVG9JdGVtIHByb3BlcnR5IGlzIHNldC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxpbmdPbmVCeU9uZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGluZ09uZUJ5T25lLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxpbmdPbmVCeU9uZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsaW5nT25lQnlPbmUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxpbmdPbmVCeU9uZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxpbmdPbmVCeU9uZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhbGlnbm1lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFsaWdubWVudD4oREVGQVVMVF9BTElHTk1FTlQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkYWxpZ25tZW50ID0gdGhpcy5fJGFsaWdubWVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYWxpZ25tZW50VHJhbnNmb3JtID0gKHY6IEFsaWdubWVudCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vbmUnIHx8IHYgPT09ICdjZW50ZXInKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImFsaWdubWVudFwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiBgbm9uZWAgb3IgYGNlbnRlcnRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTElHTk1FTlQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGxpc3QuIFR3byBtb2RlcyBhcmUgYXZhaWxhYmxlOiBgbm9uZWAgYW5kIGBjZW50ZXJgLiBUaGUgYGNlbnRlcmAgbW9kZSBhbGlnbnMgdGhlIGxpc3QgaXRlbXMgdG8gdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQsIGlkZWFsIGZvciB1c2Ugd2l0aCB0aGUgYGl0ZW1UcmFuc2Zvcm1gIHByb3BlcnR5LlxyXG4gICAqIFRoZSBgbm9uZWAgbW9kZSBtZWFucyBubyBhbGlnbm1lbnQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBub25lYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBhbGlnbm1lbnQodjogQWxpZ25tZW50KSB7XHJcbiAgICBpZiAodGhpcy5fJGFsaWdubWVudC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYWxpZ25tZW50VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRhbGlnbm1lbnQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBhbGlnbm1lbnQoKSB7IHJldHVybiB0aGlzLl8kYWxpZ25tZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHpJbmRleFdoZW5TZWxlY3RpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHpJbmRleFdoZW5TZWxlY3RpbmcgPSB0aGlzLl8kekluZGV4V2hlblNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfekluZGV4V2hlblNlbGVjdGluZ1RyYW5zZm9ybSA9ICh2OiBzdHJpbmcgfCBudWxsKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiekluZGV4V2hlblNlbGVjdGluZ1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYG51bGxgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdiA/PyBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIHpJbmRleCB3aGVuIGEgbGlzdCBpdGVtIGlzIHNlbGVjdGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgekluZGV4V2hlblNlbGVjdGluZyh2OiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHpJbmRleFdoZW5TZWxlY3RpbmcuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3pJbmRleFdoZW5TZWxlY3RpbmdUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHpJbmRleFdoZW5TZWxlY3RpbmcubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB6SW5kZXhXaGVuU2VsZWN0aW5nKCkgeyByZXR1cm4gdGhpcy5fJHpJbmRleFdoZW5TZWxlY3RpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc3ByZWFkaW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3ByZWFkaW5nTW9kZT4oREVGQVVMVF9TUFJFQURJTkdfTU9ERSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzcHJlYWRpbmdNb2RlID0gdGhpcy5fJHNwcmVhZGluZ01vZGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NwcmVhZGluZ01vZGVUcmFuc2Zvcm0gPSAodjogU3ByZWFkaW5nTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vcm1hbCcgfHwgdiA9PT0gJ2luZmluaXR5Jyk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzcHJlYWRpbmdNb2RlXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBub3JtYWxgIG9yIGBpbmZpbml0eWAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NQUkVBRElOR19NT0RFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG9yZGVyIG9mIGxpc3QgZWxlbWVudHMuIEF2YWlsYWJsZSB2YWx1ZXMg4oCL4oCLYXJlIGBzdGFuZGFyZGAgYW5kIGBpbmZpbml0eWAuXHJcbiAgICogYG5vcm1hbGAg4oCUIGxpc3QgZWxlbWVudHMgYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZSBjb2xsZWN0aW9uIHNlcXVlbmNlLlxyXG4gICAqIGBpbmZpbml0eWAg4oCUIGxpc3QgZWxlbWVudHMgYXJlIG9yZGVyZWQgY3ljbGljYWxseSwgZm9ybWluZyBhbiBpbmZpbml0ZSBsaXN0LlxyXG4gICAqIFdoZW4gc2V0IHRvIGBpbmZpbml0eWAsIHRoZSBgYWxpZ25tZW50YCBwcm9wZXJ0eSBpcyBmb3JjZWQgdG8gdGhlIHZhbHVlIGBBbGlnbm1lbnRzLkNFTlRFUmAsIHRoZSBgc2Nyb2xsYmFyRW5hYmxlZGAgcHJvcGVydHkgaXMgZm9yY2VkIHRvIHRoZSBgZmFsc2VgXHJcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHN0YW5kYXJkYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzcHJlYWRpbmdNb2RlKHY6IFNwcmVhZGluZ01vZGUpIHtcclxuICAgIGlmICh0aGlzLl8kc3ByZWFkaW5nTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc3ByZWFkaW5nTW9kZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc3ByZWFkaW5nTW9kZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNwcmVhZGluZ01vZGUoKSB7IHJldHVybiB0aGlzLl8kc3ByZWFkaW5nTW9kZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXZpZGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfRElWSURFUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkaXZpZGVzID0gdGhpcy5fJGRpdmlkZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2RpdmlkZXNUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXZpZGVzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRElWSURFUztcclxuICAgIH1cclxuICAgIHJldHVybiB2IDw9IDAgPyBERUZBVUxUX0RJVklERVMgOiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbHVtbiBvciByb3cgbnVtYmVycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDFgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpdmlkZXModjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGRpdmlkZXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2RpdmlkZXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGRpdmlkZXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkaXZpZGVzKCkgeyByZXR1cm4gdGhpcy5fJGRpdmlkZXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbW90aW9uQmx1ciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX01PVElPTl9CTFVSKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1vdGlvbkJsdXIgPSB0aGlzLl8kbW90aW9uQmx1ci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbW90aW9uQmx1clRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1vdGlvbkJsdXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9ESVZJREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHYgPD0gMCA/IERFRkFVTFRfRElWSURFUyA6IHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW90aW9uIGJsdXIgZWZmZWN0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMC4xNWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbW90aW9uQmx1cih2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kbW90aW9uQmx1ci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbW90aW9uQmx1clRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbW90aW9uQmx1ci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhNb3Rpb25CbHVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX01PVElPTl9CTFVSKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1heE1vdGlvbkJsdXIgPSB0aGlzLl8kbWF4TW90aW9uQmx1ci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4TW90aW9uQmx1clRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heE1vdGlvbkJsdXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9NQVhfTU9USU9OX0JMVVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdiA8PSAwID8gREVGQVVMVF9NQVhfTU9USU9OX0JMVVIgOiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbW90aW9uIGJsdXIgZWZmZWN0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMC41YC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtYXhNb3Rpb25CbHVyKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRtYXhNb3Rpb25CbHVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tYXhNb3Rpb25CbHVyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtYXhNb3Rpb25CbHVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbWF4TW90aW9uQmx1cigpIHsgcmV0dXJuIHRoaXMuXyRtYXhNb3Rpb25CbHVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1vdGlvbkJsdXJFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX01PVElPTl9CTFVSX0VOQUJMRUQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbW90aW9uQmx1ckVuYWJsZWQgPSB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX21vdGlvbkJsdXJFbmFibGVkVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibW90aW9uQmx1ckVuYWJsZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBhcHBseSBtb3Rpb24gYmx1ciBvciBub3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbW90aW9uQmx1ckVuYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRtb3Rpb25CbHVyRW5hYmxlZC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fbW90aW9uQmx1ckVuYWJsZWRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbW90aW9uQmx1ckVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgXyRhbmltYXRpb25QYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElBbmltYXRpb25QYXJhbXM+KERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRhbmltYXRpb25QYXJhbXMgPSB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25QYXJhbXNUcmFuc2Zvcm0gPSAodjogSUFuaW1hdGlvblBhcmFtcykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkYXRlRmxvYXQodi5zY3JvbGxUb0l0ZW0pKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbFRvSXRlbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkYXRlRmxvYXQodi5zbmFwVG9JdGVtKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9JdGVtXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuICAgIH1cclxuICAgIGlmICghdmFsaWRhdGVGbG9hdCh2Lm5hdmlnYXRlQnlLZXlib2FyZCkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibmF2aWdhdGVCeUtleWJvYXJkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuICAgIH1cclxuICAgIGlmICghdmFsaWRhdGVGbG9hdCh2Lm5hdmlnYXRlVG9JdGVtKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJuYXZpZ2F0ZVRvSXRlbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImFuaW1hdGlvblBhcmFtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBbmltYXRpb24gcGFyYW1ldGVycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJ7IHNjcm9sbFRvSXRlbTogMTUwLCBzbmFwVG9JdGVtOiAxNTAsIG5hdmlnYXRlVG9JdGVtOiAxNTAsIG5hdmlnYXRlQnlLZXlib2FyZDogNTAgfVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFuaW1hdGlvblBhcmFtcyh2OiBJQW5pbWF0aW9uUGFyYW1zKSB7XHJcbiAgICBpZiAodGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYW5pbWF0aW9uUGFyYW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRhbmltYXRpb25QYXJhbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBhbmltYXRpb25QYXJhbXMoKSB7IHJldHVybiB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG92ZXJzY3JvbGxFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRvdmVyc2Nyb2xsRW5hYmxlZCA9IHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb3ZlcnNjcm9sbEVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvdmVyc2Nyb2xsRW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG92ZXJzY3JvbGwgKHJlLXNjcm9sbCkgZmVhdHVyZSB3aWxsIHdvcmsuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJzY3JvbGxFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX292ZXJzY3JvbGxFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG92ZXJzY3JvbGxFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJzY3JvbGxFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIVxyXG4gICAqIEVuYWJsZXMgYnVmZmVyIG9wdGltaXphdGlvbi5cclxuICAgKiBDYW4gb25seSBiZSB1c2VkIGlmIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIGFyZSBub3QgYWRkZWQgb3IgdXBkYXRlZC4gT3RoZXJ3aXNlLCBhcnRpZmFjdHMgaW4gdGhlIGZvcm0gb2YgdHdpdGNoaW5nIG9mIHRoZSBzY3JvbGwgYXJlYSBhcmUgcG9zc2libGUuXHJcbiAgICogV29ya3Mgb25seSBpZiB0aGUgcHJvcGVydHkgZHluYW1pYyA9IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24oKSB7IHJldHVybiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtUmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtUmVuZGVyZXJUcmFuc2Zvcm0gPSAodjogVGVtcGxhdGVSZWY8YW55PikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcbiAgICBpZiAodiAmJiAhKHR5cGVvZiB2LmVsZW1lbnRSZWYgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2LmNyZWF0ZUVtYmVkZGVkVmlldyA9PT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgXCJpdGVtUmVuZGVyZXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBUZW1wbGF0ZVJlZmAuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZW5kZXJpbmcgZWxlbWVudCB0ZW1wbGF0ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1SZW5kZXJlclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVJlbmRlcmVyKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpIGFzIFRlbXBsYXRlUmVmPGFueT47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1Db25maWdNYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA+KHt9KTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGl0ZW1Db25maWdNYXAgPSB0aGlzLl8kaXRlbUNvbmZpZ01hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbUNvbmZpZ01hcFRyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGZvciAobGV0IGlkIGluIHYpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2lkXTtcclxuICAgICAgICAgIGlmICghaXRlbSB8fFxyXG4gICAgICAgICAgICAhdmFsaWRhdGVCb29sZWFuKGl0ZW0uY29sbGFwc2FibGUsIHRydWUpIHx8XHJcbiAgICAgICAgICAgICF2YWxpZGF0ZUJvb2xlYW4oaXRlbS5zZWxlY3RhYmxlLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAhKGl0ZW0uc3RpY2t5ID09PSB1bmRlZmluZWQgfHwgaXRlbS5zdGlja3kgPT09IDAgfHwgaXRlbS5zdGlja3kgPT09IDEgfHwgaXRlbS5zdGlja3kgPT09IDIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1Db25maWdNYXBcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwYC4nKTtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBgc3RpY2t5YCBwb3NpdGlvbiwgYGZ1bGxTaXplYCwgYGNvbGxhcHNhYmxlYCBhbmQgYHNlbGVjdGFibGVgIGZvciB0aGUgbGlzdCBpdGVtIGVsZW1lbnQuIElmIGBzdGlja3lgIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gYHN0aWNreWAgcG9zaXRpb24gaXMgYXBwbGllZC4gXHJcbiAgICogSWYgdGhlIGBzdGlja3lgIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gdGhlIGBzdGlja3lgIHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuXHJcbiAgICogIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIGBzZWxlY3RhYmxlYCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQgb3Igbm90LiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKiBgY29sbGFwc2FibGVgIGRldGVybWluZXMgd2hldGhlciBhbiBlbGVtZW50IHdpdGggYSBgc3RpY2t5YCBwcm9wZXJ0eSBncmVhdGVyIHRoYW4gemVybyBjYW4gY29sbGFwc2UgYW5kXHJcbiAgICogIGNvbGxhcHNlIGVsZW1lbnRzIGluIGZyb250IHRoYXQgZG8gbm90IGhhdmUgYSBgc3RpY2t5YCBwcm9wZXJ0eS5cclxuICAgKiBgZnVsbFNpemVgIGRldGVybWluZXMgdGhlIHNpemUgb2YgYW4gZWxlbWVudCB3aGVuIHJlbmRlcmluZyBsaXN0cyB3aXRoIGNlbGwgZGl2aXNpb25zLiBJZiBzdGlja3kgaXMgMSBvciAyLCBmdWxsU2l6ZSBhdXRvbWF0aWNhbGx5IGJlY29tZXMgdHJ1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXHJcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTcueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaXRlbS1jb25maWctbWFwLm1vZGVsLnRzXHJcbiAgICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICAgKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtQ29uZmlnTWFwKHY6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXApIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbUNvbmZpZ01hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbUNvbmZpZ01hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1Db25maWdNYXAoKSB7IHJldHVybiB0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBkaXJlY3Rpb24gPSAndmVydGljYWwnLCB0aGVuIHRoZSBoZWlnaHQgb2YgYSB0eXBpY2FsIGVsZW1lbnQuIElmIGRpcmVjdGlvbiA9ICdob3Jpem9udGFsJywgdGhlbiB0aGUgd2lkdGggb2YgYSB0eXBpY2FsIGVsZW1lbnQuXHJcbiAgICogSWYgdGhlIGBkeW5hbWljU2l6ZWAgcHJvcGVydHkgaXMgdHJ1ZSwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGBpdGVtU2l6ZWAgcHJvcGVydHkgXHJcbiAgICogdG8gYWRqdXN0IHRoZSBzaXplcyBvZiB0aGUgaXRlbXMgaW4gdGhlIHVuYWxsb2NhdGVkIGFyZWEuXHJcbiAgICogSWYgdGhlIHZhbHVlIGlzICd2aWV3cG9ydCcsIHRoZSBzaXplcyBvZiBlbGVtZW50cyBhcmUgYXV0b21hdGljYWxseSByZXNpemVkIHRvIGZpdCB0aGUgdmlld3BvcnQgc2l6ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtU2l6ZSh2OiBudW1iZXIgfCAndmlld3BvcnQnKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtaW5JdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtaW5JdGVtU2l6ZSA9IHRoaXMuXyRtaW5JdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1pbkl0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYGR5bmFtaWNTaXplYCBwcm9wZXJ0eSBpcyBlbmFibGVkLCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBlbGVtZW50IGlzIHNldC5cclxuICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3ZpZXdwb3J0JywgdGhlIHNpemVzIG9mIGVsZW1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gZml0IHRoZSB2aWV3cG9ydCBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1pbkl0ZW1TaXplKHY6IG51bWJlciB8ICd2aWV3cG9ydCcpIHtcclxuICAgIGlmICh0aGlzLl8kbWluSXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21pbkl0ZW1TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtaW5JdGVtU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1pbkl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJG1pbkl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1heEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtYXhJdGVtU2l6ZSA9IHRoaXMuXyRtYXhJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4SXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heEl0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYGR5bmFtaWNTaXplYCBwcm9wZXJ0eSBpcyBlbmFibGVkLCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBlbGVtZW50IGlzIHNldC5cclxuICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3ZpZXdwb3J0JywgdGhlIHNpemVzIG9mIGVsZW1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gZml0IHRoZSB2aWV3cG9ydCBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heEl0ZW1TaXplKHY6IG51bWJlciB8ICd2aWV3cG9ydCcpIHtcclxuICAgIGlmICh0aGlzLl8kbWF4SXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21heEl0ZW1TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtYXhJdGVtU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1heEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJG1heEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkeW5hbWljU2l6ZSA9IHRoaXMuXyRkeW5hbWljU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZHluYW1pY1NpemVUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImR5bmFtaWNTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RZTkFNSUNfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0ZW1zIGluIHRoZSBsaXN0IG1heSBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCB0byBhZGp1c3RcclxuICAgKiB0aGUgc2l6ZXMgb2YgaXRlbXMgaW4gdGhlIHVuYWxsb2NhdGVkIGFyZWEuXHJcbiAgICogSWYgZmFsc2UgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgaGF2ZSBhIGZpeGVkIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkeW5hbWljU2l6ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9keW5hbWljU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZHluYW1pY1NpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkeW5hbWljU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGlyZWN0aW9uVHJhbnNmb3JtID0gKHY6IERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ2hvcml6b250YWwnIHx8IHYgPT09ICd2ZXJ0aWNhbCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXJlY3Rpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYGhvcml6b250YWxgIG9yIGB2ZXJ0aWNhbGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RJUkVDVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBlbGVtZW50cyBhcmUgcGxhY2VkLiBEZWZhdWx0IHZhbHVlIGlzIFwidmVydGljYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXJlY3Rpb24odjogRGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZGlyZWN0aW9uVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxlY3Rpb25Nb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsZWN0aW9uTW9kZT4oREVGQVVMVF9DT0xMRUNUSU9OX01PREUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY29sbGVjdGlvbk1vZGUgPSB0aGlzLl8kY29sbGVjdGlvbk1vZGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb25Nb2RlVHJhbnNmb3JtID0gKHY6IENvbGxlY3Rpb25Nb2RlKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnbm9ybWFsJyB8fCB2ID09PSAnbGF6eScpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXJlY3Rpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vcm1hbGAgb3IgYGxhenlgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMRUNUSU9OX01PREU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gbW9kZXMgZm9yIGNvbGxlY3Rpb24gZWxlbWVudHMuIERlZmF1bHQgdmFsdWUgaXMgXCJub3JtYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsZWN0aW9uTW9kZSh2OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGVjdGlvbk1vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGVjdGlvbk1vZGUoKSB7IHJldHVybiB0aGlzLl8kY29sbGVjdGlvbk1vZGUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kYnVmZmVyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGJ1ZmZlclNpemUgPSB0aGlzLl8kYnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYnVmZmVyU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhCdWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1heEJ1ZmZlclNpemUgPSB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4QnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGxldCB2YWwgPSB2O1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2LCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4QnVmZmVyU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHZhbCA9IERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlclNpemUgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsIDw9IGJ1ZmZlclNpemUpIHtcclxuICAgICAgcmV0dXJuIGJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMTAwLlxyXG4gICAqIElmIG1heEJ1ZmZlclNpemUgaXMgc2V0IHRvIGJlIGdyZWF0ZXIgdGhhbiBidWZmZXJTaXplLCB0aGVuIGFkYXB0aXZlIGJ1ZmZlciBtb2RlIGlzIGVuYWJsZWQuXHJcbiAgICogVGhlIGdyZWF0ZXIgdGhlIHNjcm9sbCBzaXplLCB0aGUgbW9yZSBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIGZvciByZW5kZXJpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4QnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcbiAgICBpZiAodGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5uZXh0KHZhbCk7XHJcbiAgfTtcclxuICBnZXQgbWF4QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcHBpbmdNZXRob2QgPSB0aGlzLl8kc25hcHBpbmdNZXRob2QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwaW5nTWV0aG9kVHJhbnNmb3JtID0gKHY6IFNuYXBwaW5nTWV0aG9kKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSBTbmFwcGluZ01ldGhvZHMuQURWQU5DRUQgfHwgdiA9PT0gU25hcHBpbmdNZXRob2RzLlNUQU5EQVJUKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIFwic25hcHBpbmdNZXRob2RcIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSAnJHtTbmFwcGluZ01ldGhvZHMuQURWQU5DRUR9JyBvciAnJHtTbmFwcGluZ01ldGhvZHMuU1RBTkRBUlR9Jy5gKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUFBJTkdfTUVUSE9EO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcHBpbmcgbWV0aG9kLiBEZWZhdWx0IHZhbHVlIGlzICdzdGFuZGFydCcuXHJcbiAgICogJ3N0YW5kYXJ0JyAtIENsYXNzaWMgZ3JvdXAgdmlzdWFsaXphdGlvbi5cclxuICAgKiAnYWR2YW5jZWQnIC0gQSBtYXNrIGlzIGFwcGxpZWQgdG8gdGhlIHZpZXdwb3J0IGFyZWEgc28gdGhhdCB0aGUgYmFja2dyb3VuZCBpcyBkaXNwbGF5ZWQgdW5kZXJuZWF0aCB0aGUgYXR0YWNoZWQgZ3JvdXAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcHBpbmdNZXRob2QodjogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBwaW5nTWV0aG9kVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nTWV0aG9kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNpbmdNb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsYXBzaW5nTW9kZT4oREVGQVVMVF9DT0xMQVBTSU5HX01PREVTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxhcHNpbmdNb2RlID0gdGhpcy5fJGNvbGxhcHNpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzaW5nTW9kZVRyYW5zZm9ybSA9ICh2OiBDb2xsYXBzaW5nTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gQ29sbGFwc2luZ01vZGVzLk5PTkUgfHwgdiA9PT0gQ29sbGFwc2luZ01vZGVzLk1VTFRJX0NPTExBUFNFIHx8IHYgPT09IENvbGxhcHNpbmdNb2Rlcy5BQ0NPUkRJT04pO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgXCJjb2xsYXBzaW5nTW9kZVwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlICcke1NuYXBwaW5nTWV0aG9kcy5BRFZBTkNFRH0nIG9yICcke1NuYXBwaW5nTWV0aG9kcy5TVEFOREFSVH0nLmApO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMQVBTSU5HX01PREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW9kZSBmb3IgY29sbGFwc2luZyBsaXN0IGl0ZW1zLiBcclxuICAgKiBgbm9uZWAgLSBMaXN0IGl0ZW1zIGFyZSBub3Qgc2VsZWN0YWJsZS5cclxuICAgKiBgbXVsdGktY29sbGFwc2VgIC0gTGlzdCBpdGVtcyBhcmUgY29sbGFwc2VkIG9uZSBieSBvbmUuXHJcbiAgICogJ2FjY29yZGlvbicgLSBBY2NvcmRpb24gY29sbGFwc2libGUgbGlzdCBpdGVtcy5cclxuICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBtdWx0aS1jb2xsYXBzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNpbmdNb2RlKHY6IENvbGxhcHNpbmdNb2RlKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbGxhcHNpbmdNb2RlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzaW5nTW9kZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2luZ01vZGUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzaW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzaW5nTW9kZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIFwibWV0aG9kRm9yU2VsZWN0aW5nXCIgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBcInNlbGVjdE1vZGVcIiBwcm9wZXJ0eS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtZXRob2RGb3JTZWxlY3RpbmcodjogYW55KSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIm1ldGhvZEZvclNlbGVjdGluZ1wiIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgXCJzZWxlY3RNb2RlXCIgcHJvcGVydHkgaW5zdGVhZC4nKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0aW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW5nTW9kZT4oREVGQVVMVF9TRUxFQ1RJTkdfTU9ERVMpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuXyRzZWxlY3RpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RpbmdNb2RlVHJhbnNmb3JtID0gKHY6IFNlbGVjdGluZ01vZGUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub25lJyB8fCB2ID09PSAnc2VsZWN0JyB8fCB2ID09PSAnbXVsdGktc2VsZWN0Jyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdGluZ01vZGVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vbmVgLCBgc2VsZWN0YCBvciBgbXVsdGktc2VsZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0VMRUNUSU5HX01PREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogIE1ldGhvZCBmb3Igc2VsZWN0aW5nIGxpc3QgaXRlbXMuIERlZmF1bHQgdmFsdWUgaXMgJ25vbmUnLlxyXG4gICAqICdzZWxlY3QnIC0gTGlzdCBpdGVtcyBhcmUgc2VsZWN0ZWQgb25lIGJ5IG9uZS5cclxuICAgKiAnbXVsdGktc2VsZWN0JyAtIE11bHRpcGxlIHNlbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqICdub25lJyAtIExpc3QgaXRlbXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGluZ01vZGUodjogU2VsZWN0aW5nTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RpbmdNb2RlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0aW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRyYWNrQnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICR0cmFja0J5ID0gdGhpcy5fJHRyYWNrQnkuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQnlUcmFuc2Zvcm0gPSAodjogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJ0cmFja0J5XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYnkgd2hpY2ggdHJhY2tpbmcgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdHJhY2tCeSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fdHJhY2tCeVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kdHJhY2tCeS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JlZW5SZWFkZXJNZXNzYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcmVlblJlYWRlck1lc3NhZ2UgPSB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSA9ICh2OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcmVlblJlYWRlck1lc3NhZ2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNZXNzYWdlIGZvciBzY3JlZW4gcmVhZGVyLlxyXG4gICAqIFRoZSBtZXNzYWdlIGZvcm1hdCBpczogXCJzb21lIHRleHQgJDEgc29tZSB0ZXh0ICQyXCIsXHJcbiAgICogd2hlcmUgJDEgaXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2NyZWVuIGNvbGxlY3Rpb24sXHJcbiAgICogJDIgaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzY3JlZW4gY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHByb3RlY3RlZCBzZXQgc2NyZWVuUmVhZGVyTWVzc2FnZSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGdldCBzY3JlZW5SZWFkZXJNZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSk7XHJcbiAgcHJvdGVjdGVkICRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlID0gdGhpcy5fJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsYW5nVGV4dERpciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dERpcmVjdGlvbj4oREVGQVVMVF9MQU5HX1RFWFRfRElSKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9sYW5nVGV4dERpclRyYW5zZm9ybSA9ICh2OiBUZXh0RGlyZWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsYW5nVGV4dERpclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0xBTkdfVEVYVF9ESVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb24gb2YgdGV4dCBmb3IgdGhlIGxvY2FsZS5cclxuICAgKiBDYW4gYmUgZWl0aGVyIFwibHRyXCIgKGxlZnQtdG8tcmlnaHQpIG9yIFwicnRsXCIgKHJpZ2h0LXRvLWxlZnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxhbmdUZXh0RGlyKHY6IFRleHREaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2xhbmdUZXh0RGlyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3Rpb24gPSB0aGlzLmdldElzU2luZ2xlU2VsZWN0aW9uKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzTXVsdGlTZWxlY3Rpb24gPSB0aGlzLmdldElzTXVsdGlTZWxlY3Rpb24oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5nZXRJc011bHRpcGxlQ29sbGFwc2UoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuZ2V0SXNBY2NvcmRpb25Db2xsYXBzZSgpO1xyXG5cclxuICBwcml2YXRlIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCgpO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRpc0luZmluaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkICRpc0luZmluaXR5ID0gdGhpcy5fJGlzSW5maW5pdHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBpc0luZmluaXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuXyRpc0luZmluaXR5LmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZlcnRpY2FsID0gdGhpcy5nZXRJc1ZlcnRpY2FsKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBpc1ZlcnRpY2FsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5pc1ZlcnRpY2FsKTtcclxuICBwcm90ZWN0ZWQgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRFbGVtZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkZm9jdXNlZEVsZW1lbnQgPSB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcHJvdGVjdGVkICRjbGFzc2VzID0gdGhpcy5fJGNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmVyZW5kZXJFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkICRwcmVyZW5kZXJFbmFibGVkID0gdGhpcy5fJHByZXJlbmRlckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSXRlbUlkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF8kYm91bmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2l6ZSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkYm91bmRzOiBPYnNlcnZhYmxlPElTaXplIHwgbnVsbD4gPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5zY3JvbGxiYXJFbmFibGVkKTtcclxuICBwcm90ZWN0ZWQgJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbEFsaWdubWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWxpZ25tZW50Pih0aGlzLmFsaWdubWVudCk7XHJcbiAgcHJvdGVjdGVkICRhY3R1YWxBbGlnbm1lbnQ6IE9ic2VydmFibGU8QWxpZ25tZW50PiA9IHRoaXMuXyRhY3R1YWxBbGlnbm1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBhY3R1YWxBbGlnbm1lbnQoKSB7IHJldHVybiB0aGlzLl8kYWN0dWFsQWxpZ25tZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsSXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbE1pbkl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsTWluSXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxNaW5JdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbE1pbkl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbE1pbkl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbE1heEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsTWF4SXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxNYXhJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbE1heEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbE1heEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRvdGFsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3RCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaXNTY3JvbGxTdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1Njcm9sbEVuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF8kcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl8kYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxTY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRhY3R1YWxTY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxTbmFwU2Nyb2xsVG9TdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU25hcFNjcm9sbFRvRW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgXyRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFsaWdubWVudFNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudFNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSwgc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKSwgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpLCBzbmFwcGVkQ29tcG9uZW50cyA9IHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cztcclxuICAgIGlmICghIWxpc3QgJiYgISFzY3JvbGxlciAmJiBzbmFwcGVkQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBsaXN0Qm91bmRzID0gbGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBjb21wIG9mIHNuYXBwZWRDb21wb25lbnRzKSB7XHJcbiAgICAgICAgaWYgKCEhY29tcCkge1xyXG4gICAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyTGVuZ3RoID0gYCR7aXNWZXJ0aWNhbCA/IGxpc3RCb3VuZHMud2lkdGggOiBsaXN0Qm91bmRzLmhlaWdodH0ke1BYfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzbmFwcGluZ01ldGhvZCA9IHRoaXMuc25hcHBpbmdNZXRob2Q7XHJcbiAgICAgIGlmIChzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcHBlZENvbXBvbmVudCA9IHNuYXBwZWRDb21wb25lbnRzPy5bMF0/Lmluc3RhbmNlO1xyXG4gICAgICAgIGlmICghIXNuYXBwZWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LCBsYW5nVGV4dERpciA9IHRoaXMubGFuZ1RleHREaXI7XHJcblxyXG4gICAgICAgICAgc25hcHBlZENvbXBvbmVudC5lbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgMCBMIDAgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRofSAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGh9IDAgWlwiKWA7XHJcblxyXG4gICAgICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudCA9IHNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQsIGRlbHRhID0gc25hcHBlZENvbXBvbmVudC5pdGVtPy5tZWFzdXJlcy5kZWx0YSA/PyAwLFxyXG4gICAgICAgICAgICBzY3JvbGxCYXJTaXplID0gdGhpcy5zY3JvbGxiYXJUaGlja25lc3M7XHJcblxyXG4gICAgICAgICAgbGV0IHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gd2lkdGggLSBzY3JvbGxCYXJTaXplICsgMjtcclxuICAgICAgICAgICAgdG9wID0gc0hlaWdodDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAobGFuZ1RleHREaXIgPT09IFRleHREaXJlY3Rpb25zLlJUTCkge1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7dG9wICsgZGVsdGF9IEwgJHtzY3JvbGxCYXJTaXplfSAke3RvcCArIGRlbHRhfSBMICR7c2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAke3RvcCArIGRlbHRhfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBMICR7cmlnaHR9IDAgTCAke3JpZ2h0fSAke3RvcCArIGRlbHRhfSBaXCIpYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmlnaHQgPSB3aWR0aDtcclxuICAgICAgICAgICAgdG9wID0gMDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICAgICAgc2Nyb2xsZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7d2lkdGh9IDAgTCAke3dpZHRofSAke2JvdHRvbX0gTCAwICR7Ym90dG9tfSBMIDAgMCBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGZvY3VzSXRlbSA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zaXRpb246IG51bWJlciwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUixcclxuICAgIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pID0+IHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSEsIHsgd2lkdGg6IGVsZW1lbnRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50SGVpZ2h0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxyXG4gICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICBlbGVtZW50U2l6ZSA9IGlzVmVydGljYWwgPyBlbGVtZW50SGVpZ2h0IDogZWxlbWVudFdpZHRoO1xyXG4gICAgICBsZXQgcG9zOiBudW1iZXIgPSBOdW1iZXIuTmFOO1xyXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuU1RBUlQ6IHtcclxuICAgICAgICAgIHBvcyA9IHBvc2l0aW9uICsgc2Nyb2xsZXIuc3RhcnRMYXlvdXRPZmZzZXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSOiB7XHJcbiAgICAgICAgICBwb3MgPSBwb3NpdGlvbiAtICh2aWV3cG9ydFNpemUgLSBlbGVtZW50U2l6ZSkgKiAuNSArIHNjcm9sbGVyLnN0YXJ0TGF5b3V0T2Zmc2V0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLkVORDoge1xyXG4gICAgICAgICAgcG9zID0gcG9zaXRpb24gLSAodmlld3BvcnRTaXplIC0gZWxlbWVudFNpemUpICsgc2Nyb2xsZXIuc3RhcnRMYXlvdXRPZmZzZXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocG9zKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgIFt0aGlzLl9pc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogcG9zLCBiZWhhdmlvciwgc25hcDogZmFsc2UsIG5vcm1hbGl6ZTogdHJ1ZSxcclxuICAgICAgICAgIGZpcmVVcGRhdGU6IGZhbHNlLCBibGVuZGluZzogZmFsc2UsIHVzZXJBY3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgZHVyYXRpb246IHRoaXMuc25hcFRvSXRlbSA/IE1hdGgubWF4KHRoaXMuYW5pbWF0aW9uUGFyYW1zLnNjcm9sbFRvSXRlbSwgdGhpcy5hbmltYXRpb25QYXJhbXMubmF2aWdhdGVUb0l0ZW0pIDogdGhpcy5hbmltYXRpb25QYXJhbXMubmF2aWdhdGVUb0l0ZW0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzY3JvbGxlci5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyBvZiB0aGUgZWxlbWVudCBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudCQxPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+ID0gTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ7XHJcbiAgcHJvdGVjdGVkIGdldCBpdGVtQ29tcG9uZW50Q2xhc3MoKSB7IHJldHVybiB0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3M7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyB0cmFja0JveFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94Q2xhc3M6IENvbXBvbmVudCQxPFRyYWNrQm94PiA9IFRyYWNrQm94O1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IG9mIGVsZW1lbnQgc2l6ZXMgYnkgdGhlaXIgaWRcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggPSBuZXcgdGhpcy5fdHJhY2tCb3hDbGFzcyh0aGlzLnRyYWNrQnkpO1xyXG5cclxuICBwcml2YXRlIF8kdXBkYXRlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkdXBkYXRlID0gdGhpcy5fJHVwZGF0ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvID0gbmV3IFN1YmplY3Q8SVNjcm9sbFBhcmFtcz4oKTtcclxuICBwcm90ZWN0ZWQgJHNjcm9sbFRvID0gdGhpcy5fJHNjcm9sbFRvLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9FeGVjdXRvciA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxUb0V4ZWN1dG9yID0gdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdUbyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsID0gbmV3IFN1YmplY3Q8SVNjcm9sbEV2ZW50PigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGwgPSB0aGlzLl8kc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGljayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHRpY2sgPSB0aGlzLl8kdGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZpcmVVcGRhdGUgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZmlyZVVwZGF0ZSA9IHRoaXMuXyRmaXJlVXBkYXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kZmlyZVVwZGF0ZU5leHRGcmFtZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRmaXJlVXBkYXRlTmV4dEZyYW1lID0gdGhpcy5fJGZpcmVVcGRhdGVOZXh0RnJhbWUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHByZXZlbnRTY3JvbGxTbmFwcGluZyA9IHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3JlYWR5Rm9yU2hvdyA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jYWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJvdGVjdGVkIGdldCBjYWNoYWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmVyZW5kZXI/LmFjdGl2ZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgcHJlcmVuZGVyYWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmR5bmFtaWNTaXplICYmICh0aGlzLl90cmFja0JveD8uaXNTbmFwcGVkVG9FbmQgPz8gZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJHZpZXdJbml0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSAkdmlld0luaXQgPSB0aGlzLl8kdmlld0luaXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRkZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5ICRkZXN0cm95ID0gdGhpcy5fJGRlc3Ryb3kuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMSA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDE7XHJcbiAgICB0aGlzLl9pZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS5pbml0aWFsaXplKHRoaXMuX2lkLCB0aGlzLl90cmFja0JveCk7XHJcblxyXG4gICAgY29uc3QgJGR5bmFtaWNTaXplID0gdGhpcy4kZHluYW1pY1NpemUsXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLiRzbmFwU2Nyb2xsVG9FbmQ7XHJcbiAgICBjb21iaW5lTGF0ZXN0KFskZHluYW1pY1NpemUsICRzbmFwU2Nyb2xsVG9FbmRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbZHluYW1pY1NpemUsIHNuYXBTY3JvbGxUb0VuZF0pID0+IHtcclxuICAgICAgICB0aGlzLl8kcHJlcmVuZGVyRW5hYmxlZC5uZXh0KGR5bmFtaWNTaXplICYmIHNuYXBTY3JvbGxUb0VuZCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRhbmltYXRpb25QYXJhbXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmFuaW1hdGlvblBhcmFtcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRzcHJlYWRpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzSW5maW5pdHkubmV4dChpc1NwcmVhZGluZ01vZGUodiwgU3ByZWFkaW5nTW9kZXMuSU5GSU5JVFkpKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kc3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGFjdHVhbFNjcm9sbEVuZE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGVuZE9mZnNldC5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGlzSW5maW5pdHkgPSB0aGlzLiRpc0luZmluaXR5O1xyXG4gICAgJGlzSW5maW5pdHkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc0luZmluaXR5ID0gdGhpcy5fc2VydmljZS5pc0luZmluaXR5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR6SW5kZXhXaGVuU2VsZWN0aW5nID0gdGhpcy4kekluZGV4V2hlblNlbGVjdGluZztcclxuICAgICR6SW5kZXhXaGVuU2VsZWN0aW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS56SW5kZXhXaGVuU2VsZWN0aW5nID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLFxyXG4gICAgICAkcmF3U2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLiRzY3JvbGxTdGFydE9mZnNldCxcclxuICAgICAgJHJhd1Njcm9sbEVuZE9mZnNldCA9IHRoaXMuJHNjcm9sbEVuZE9mZnNldDtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskYm91bmRzLCAkcmF3U2Nyb2xsU3RhcnRPZmZzZXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbdl0pID0+ICEhdiksXHJcbiAgICAgIHRhcCgoW2JvdW5kcywgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VBcml0aG1ldGljRXhwcmVzc2lvbih2YWx1ZSwgdGhpcy5pc1ZlcnRpY2FsID8gYm91bmRzIS5oZWlnaHQgOiBib3VuZHMhLndpZHRoKTtcclxuICAgICAgICB0aGlzLl8kcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0Lm5leHQodmFsKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRib3VuZHMsICRyYXdTY3JvbGxFbmRPZmZzZXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbdl0pID0+ICEhdiksXHJcbiAgICAgIHRhcCgoW2JvdW5kcywgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VBcml0aG1ldGljRXhwcmVzc2lvbih2YWx1ZSwgdGhpcy5pc1ZlcnRpY2FsID8gYm91bmRzIS5oZWlnaHQgOiBib3VuZHMhLndpZHRoKTtcclxuICAgICAgICB0aGlzLl8kcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldC5uZXh0KHZhbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+IHYgIT09IG51bGwpLFxyXG4gICAgICB0YXAoaWQgPT4ge1xyXG4gICAgICAgIHRoaXMub25TbmFwSXRlbS5lbWl0KGlkISk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR0aWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py50aWNrKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR0aWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5keW5hbWljU2l6ZSA9PT0gdHJ1ZSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja0JvdW5kc09mRWxlbWVudHMoKTtcclxuICAgICAgICB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8udGljaygpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBsZXQgcmVhZHlGb3JBbmltYXRpb25zID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgXyRjcmVhdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXHJcbiAgICAgICRjcmVhdGVkID0gXyRjcmVhdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRjcmVhdGVkLCB0aGlzLiRzaG93XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW2NyZWF0ZWQsIHNob3duXSkgPT4gY3JlYXRlZCAmJiBzaG93biksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGVyLm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFZpZXdwb3J0KTtcclxuICAgIHRoaXMuXyRsaXN0Lm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbENvbnRlbnQpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJDb21wb25lbnQgPSBvZih0aGlzLl9zY3JvbGxlckNvbXBvbmVudCksXHJcbiAgICAgICRyZXNpemVWaWV3cG9ydCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kcmVzaXplVmlld3BvcnQpLFxyXG4gICAgICApLFxyXG4gICAgICAkcmVzaXplQ29udGVudCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kcmVzaXplQ29udGVudCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNjcm9sbGVyQ29tcG9uZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxEaXJlY3Rpb24pLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGlyZWN0aW9uID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRyZXNpemVWaWV3cG9ydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh2KTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZXNpemUodHJ1ZSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkcmVzaXplQ29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRsaXN0Qm91bmRzLm5leHQodik7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVzaXplKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnk7XHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UudHJhY2tCeSA9IHRoaXMuX3RyYWNrQm94LnRyYWNrQnkgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guZGlzcGxheUNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBsZXQgaGFzVXNlckFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtU2l6ZSA9IHRoaXMuJGl0ZW1TaXplLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiB2IDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHYpLFxyXG4gICAgKSxcclxuICAgICAgJG1pbkl0ZW1TaXplID0gdGhpcy4kbWluSXRlbVNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgdiA8PSAwID8gREVGQVVMVF9NSU5fSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRtYXhJdGVtU2l6ZSA9IHRoaXMuJG1heEl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIHYgPD0gMCA/IERFRkFVTFRfTUFYX0lURU1fU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLiRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICksXHJcbiAgICAgICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLiRhY3R1YWxTY3JvbGxFbmRPZmZzZXQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRtaW5JdGVtU2l6ZSwgJGJvdW5kcywgJHNjcm9sbFN0YXJ0T2Zmc2V0LCAkc2Nyb2xsRW5kT2Zmc2V0XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcCgoW3YsIGJvdW5kcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0pID0+IHtcclxuICAgICAgICBpZiAoKHYgYXMgYW55KSA9PT0gVklFV1BPUlQpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsIHZpZXdwb3J0Qm91bmRzID0gYm91bmRzLFxyXG4gICAgICAgICAgICByZXN1bHQgPSAoaXNWZXJ0aWNhbCA/ICh2aWV3cG9ydEJvdW5kcz8uaGVpZ2h0ID8/IDApIDogKHZpZXdwb3J0Qm91bmRzPy53aWR0aCA/PyAwKSkgLSBzdGFydE9mZnNldCAtIGVuZE9mZnNldDtcclxuICAgICAgICAgIHJldHVybiBvZihyZXN1bHQgPD0gMCA/IDEgOiByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Yodik7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbE1pbkl0ZW1TaXplLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskbWF4SXRlbVNpemUsICRib3VuZHMsICRzY3JvbGxTdGFydE9mZnNldCwgJHNjcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt2LCBib3VuZHMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXRdKSA9PiB7XHJcbiAgICAgICAgaWYgKCh2IGFzIGFueSkgPT09IFZJRVdQT1JUKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLCB2aWV3cG9ydEJvdW5kcyA9IGJvdW5kcyxcclxuICAgICAgICAgICAgcmVzdWx0ID0gKGlzVmVydGljYWwgPyAodmlld3BvcnRCb3VuZHM/LmhlaWdodCA/PyAwKSA6ICh2aWV3cG9ydEJvdW5kcz8ud2lkdGggPz8gMCkpIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQ7XHJcbiAgICAgICAgICByZXR1cm4gb2YocmVzdWx0IDw9IDAgPyAxIDogcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHYpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxNYXhJdGVtU2l6ZS5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGFjdHVhbE1pbkl0ZW1TaXplID0gdGhpcy4kYWN0dWFsTWluSXRlbVNpemUsXHJcbiAgICAgICRhY3R1YWxNYXhJdGVtU2l6ZSA9IHRoaXMuJGFjdHVhbE1heEl0ZW1TaXplO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpdGVtU2l6ZSwgJGJvdW5kcywgJGFjdHVhbE1pbkl0ZW1TaXplLCAkYWN0dWFsTWF4SXRlbVNpemUsICRzY3JvbGxTdGFydE9mZnNldCwgJHNjcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt2LCBib3VuZHMsIG1pbiwgbWF4LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0XSkgPT4ge1xyXG4gICAgICAgIGlmICgodiBhcyBhbnkpID09PSBWSUVXUE9SVCkge1xyXG4gICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCwgdmlld3BvcnRCb3VuZHMgPSBib3VuZHMsXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IChpc1ZlcnRpY2FsID8gKHZpZXdwb3J0Qm91bmRzPy5oZWlnaHQgPz8gMCkgOiAodmlld3BvcnRCb3VuZHM/LndpZHRoID8/IDApKSAtIHN0YXJ0T2Zmc2V0IC0gZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCA8IG1pbiA/IG1pbiA6IChyZXN1bHQgPiBtYXggPyBtYXggOiByZXN1bHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHYgPCBtaW4gPyBtaW4gOiAodiA+IG1heCA/IG1heCA6IHYpKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsSXRlbVNpemUubmV4dCh2KTtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLml0ZW1TaXplID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRhY3R1YWxJdGVtU2l6ZSA9IHRoaXMuJGFjdHVhbEl0ZW1TaXplLFxyXG4gICAgICAkYWN0dWFsSXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzSXRlbS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBlbGVtZW50LCBwb3NpdGlvbiwgYWxpZ24sIGJlaGF2aW9yIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oZWxlbWVudCwgcG9zaXRpb24sIGFsaWduLCBiZWhhdmlvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkbGlzdCA9IHRoaXMuJGxpc3QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwcmV2ZW50S2V5Ym9hcmRFdmVudCA9IChldmVudDogS2V5Ym9hcmRFdmVudCwgaXNWZXJ0aWNhbDogYm9vbGVhbikgPT4ge1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksIHNjcm9sbGFibGUgPSBzY3JvbGxlci5zY3JvbGxhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgc2Nyb2xsV2VpZ2h0ID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoO1xyXG4gICAgICAgIGlmIChzY3JvbGxhYmxlIHx8IHNjcm9sbFNpemUgPD0gc2Nyb2xsU3RhcnRPZmZzZXQgfHwgc2Nyb2xsU2l6ZSA+PSBzY3JvbGxXZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghIWV2ZW50ICYmIGV2ZW50LmNhbmNlbGFibGUpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRsaXN0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoZWxlbWVudCA9PiAhIWVsZW1lbnQpLFxyXG4gICAgICBzd2l0Y2hNYXAoZWxlbWVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCBFVkVOVF9LRVlfRE9XTikucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0xFRlQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1VQOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1JJR0hUOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgcHJldmVudEtleWJvYXJkRXZlbnQoZSwgdGhpcy5pc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9ET1dOOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLiRzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAkc2Nyb2xsYmFyVGhpY2tuZXNzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoc2Nyb2xsYmFyVGhpY2tuZXNzID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNjcm9sbEJhclNpemUgPSBzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRmaXJlVXBkYXRlTmV4dEZyYW1lLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbFRvSXRlbSA9IHRoaXMuJHNjcm9sbFRvLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgKSxcclxuICAgICAgJG1vdXNlRG93biA9IGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIE1PVVNFX0RPV04pLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICksXHJcbiAgICAgICR0b3VjaFN0YXJ0ID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgVE9VQ0hfU1RBUlQpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCBLRVlfRE9XTikucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihlID0+IGUua2V5ID09PSBLRVlfVEFCKSxcclxuICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVUykucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGVsYXkoMCksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHNjcm9sbFRvSXRlbSksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJG1vdXNlRG93biksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHRvdWNoU3RhcnQpLFxyXG4gICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzRmlyc3RFbGVtZW50KCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2Nyb2xsVG9TdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TdGFydChudWxsLCBvcHRpb25zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHNjcm9sbFRvLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAocGFyYW1zID0+IHtcclxuICAgICAgICBjb25zdCB7IGlkLCBjYiwgb3B0aW9ucyB9ID0gcGFyYW1zITtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvKGlkLCBjYiwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzY3JvbGxUb0VuZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9FbmQobnVsbCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRsYW5nVGV4dERpci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGFuZ1RleHREaXIgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kY2xpY2tEaXN0YW5jZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY2xpY2tEaXN0YW5jZSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzbmFwU2Nyb2xsVG9TdGFydCwgdGhpcy4kaXNJbmZpbml0eV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtzbmFwU2Nyb2xsVG9TdGFydCwgaXNJbmZpbml0eV0pID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvU3RhcnQubmV4dChpc0luZmluaXR5ID8gZmFsc2UgOiBzbmFwU2Nyb2xsVG9TdGFydCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzbmFwU2Nyb2xsVG9FbmQsIHRoaXMuJGlzSW5maW5pdHldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbc25hcFNjcm9sbFRvRW5kLCBpc0luZmluaXR5XSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxTbmFwU2Nyb2xsVG9FbmQubmV4dChpc0luZmluaXR5ID8gZmFsc2UgOiBzbmFwU2Nyb2xsVG9FbmQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHZpZXdJbml0ID0gdGhpcy4kdmlld0luaXQsXHJcbiAgICAgICRwcmVyZW5kZXJDb250YWluZXIgPSBvZih0aGlzLl9wcmVyZW5kZXIpO1xyXG5cclxuICAgIGNvbnN0ICRwcmVyZW5kZXIgPSAkdmlld0luaXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICByZXR1cm4gJHByZXJlbmRlckNvbnRhaW5lci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKHYgPT4gdiEuJHJlbmRlciksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0ICRmaXJlVXBkYXRlID0gdGhpcy4kZmlyZVVwZGF0ZTtcclxuICAgICRmaXJlVXBkYXRlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdXBkYXRlID0gdGhpcy4kdXBkYXRlLFxyXG4gICAgICByZW5kZXJTdGFiaWxpemVyID0gKG9wdGlvbnM/OiBJUmVuZGVyU3RhYmlsaXplck9wdGlvbnMpID0+IHtcclxuICAgICAgICBsZXQgcmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTixcclxuICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICBjb25zdCBwcmVwYXJlSXRlcmF0aW9ucyA9IG9wdGlvbnM/LnByZXBhcmVJdGVyYXRpb25zID8/IFBSRVBBUkVfSVRFUkFUSU9OUyxcclxuICAgICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aCA9IG9wdGlvbnM/LnByZXBhcmVSZXVwZGF0ZUxlbmd0aCA/PyBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEg7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT047XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiAkdXBkYXRlLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgoKHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID09PSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTikgfHwgKHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uICE9PSB2KSkgJiZcclxuICAgICAgICAgICAgICAgICAgKHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zIDwgcHJlcGFyZUl0ZXJhdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gdjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9PT0gdikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMgPCBwcmVwYXJlUmV1cGRhdGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucysrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gdjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgIClcclxuICAgICAgfTtcclxuICAgIGNvbnN0ICRpbml0aWFsUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICBwcmVwYXJlSXRlcmF0aW9uczogUFJFUEFSRV9JVEVSQVRJT05TLFxyXG4gICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSCxcclxuICAgIH0pLFxyXG4gICAgICAkdXBkYXRlSXRlbXNSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aDogUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgICAgIH0pLFxyXG4gICAgICAkY2h1bmtMb2FkaW5nUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGNvbGxhcHNlSXRlbXNSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfQ09MTEFQU0VfSVRFTVMsXHJcbiAgICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX0NPTExBUFNFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGl0ZW1Db25maWdNYXAgPSB0aGlzLiRpdGVtQ29uZmlnTWFwLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gIXYgPyB7fSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkZGl2aWRlcyA9IHRoaXMuJGRpdmlkZXMsXHJcbiAgICAgICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkc25hcFNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvU3RhcnQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy4kd2FpdEZvclByZXBhcmF0aW9uLFxyXG4gICAgICAkaXRlbXMgPSB0aGlzLiRpdGVtcztcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskdmlld0luaXQsICRwcmVyZW5kZXJDb250YWluZXIsICRkaXZpZGVzLCAkZHluYW1pY1NpemUsICRzbmFwU2Nyb2xsVG9TdGFydCwgJHNuYXBTY3JvbGxUb0VuZCwgJHdhaXRGb3JQcmVwYXJhdGlvbl0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0LCBwcmVyZW5kZXJDb250YWluZXJdKSA9PiAhIWluaXQgJiYgISFwcmVyZW5kZXJDb250YWluZXIpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHN3aXRjaE1hcCgoWywgcHJlcmVuZGVyQ29udGFpbmVyLCBkaXZpZGVzLCBkeW5hbWljU2l6ZSwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgd2FpdEZvclByZXBhcmF0aW9uXSkgPT4ge1xyXG4gICAgICAgIGlmICghIWR5bmFtaWNTaXplICYmICFzbmFwU2Nyb2xsVG9TdGFydCAmJiAhIXNuYXBTY3JvbGxUb0VuZCAmJiAhIXdhaXRGb3JQcmVwYXJhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgJGNvbGxlY3Rpb24gPSAoZGl2aWRlcyA+IDEgPyAkYWN0dWFsSXRlbXMgOiAkaXRlbXMpO1xyXG4gICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBMZW5ndGggPSBwPy5sZW5ndGggPz8gMCwgY0xlbmd0aCA9IGM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgICAgICAgICAgIHJldHVybiAhKChjTGVuZ3RoID4gMCkgfHwgKHBMZW5ndGggIT09IGNMZW5ndGggJiYgKHBMZW5ndGggPT09IDAgfHwgY0xlbmd0aCA9PT0gMCkpKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRhcChpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLmFjdHVhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgICByZWFkeUZvckFuaW1hdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVDbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICghc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMud2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKHdhaXRGb3JQcmVwYXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vbih0aGlzLml0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMud2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgICAgICAgIGlmICh3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJGluaXRpYWxSZW5kZXJTdGFiaWxpemVyLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9mZigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoIXNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgIGNvbnN0ICRjb2xsZWN0aW9uID0gKGRpdmlkZXMgPiAxID8gJGFjdHVhbEl0ZW1zIDogJGl0ZW1zKTtcclxuICAgICAgICAgIHJldHVybiAkY29sbGVjdGlvbi5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgdGFwKGl0ZW1zID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZUNsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLmFjdHVhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXRlbXMucGlwZShcclxuICAgICAgbWFwKHYgPT4gdj8ubGVuZ3RoID4gMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gJHByZXJlbmRlci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKGNhY2hlID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZWZyZXNoQ2FjaGUoY2FjaGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzZWRJZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYgPz8gbnVsbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKGVsZW1lbnQgPT4gISFlbGVtZW50KSxcclxuICAgICAgdGFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGRlZmF1bHRJdGVtVmFsdWUgPSB0aGlzLiRkZWZhdWx0SXRlbVZhbHVlLFxyXG4gICAgICAkc2VsZWN0QnlDbGljayA9IHRoaXMuJHNlbGVjdEJ5Q2xpY2ssXHJcbiAgICAgICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLiRjb2xsYXBzZUJ5Q2xpY2ssXHJcbiAgICAgICRpc1Njcm9sbFN0YXJ0ID0gdGhpcy5fJGlzU2Nyb2xsU3RhcnQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRpc1Njcm9sbEZpbmlzaGVkID0gdGhpcy5fJGlzU2Nyb2xsRW5kLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNWZXJ0aWNhbCh2IHx8IERFRkFVTFRfRElSRUNUSU9OKSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNuYXBTY3JvbGxUb1N0YXJ0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9TdGFydCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcFNjcm9sbFRvRW5kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9FbmQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzVmVydGljYWwgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGR5bmFtaWNTaXplLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5keW5hbWljID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkZWZhdWx0SXRlbVZhbHVlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5kZWZhdWx0SXRlbVZhbHVlID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxTdGFydE9mZnNldCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsRW5kT2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxFbmRPZmZzZXQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsU3RhcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hTdGFydC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsRmluaXNoZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxSZWFjaEVuZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNlbGVjdEJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2sgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlQnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGRpdmlkZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5kaXZpZGVzID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGFsaWdubWVudCwgdGhpcy4kaXNJbmZpbml0eV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFthbGlnbm1lbnQsIGlzSW5maW5pdHldKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEFsaWdubWVudC5uZXh0KGlzSW5maW5pdHkgPyBBbGlnbm1lbnRzLkNFTlRFUiA6IGFsaWdubWVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzY3JvbGxiYXJFbmFibGVkLCB0aGlzLiRpc0luZmluaXR5XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKChbc2Nyb2xsYmFyRW5hYmxlZCwgaXNJbmZpbml0eV0pID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZC5uZXh0KGlzSW5maW5pdHkgPyBmYWxzZSA6IHNjcm9sbGJhckVuYWJsZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGFsaWdubWVudCA9IHRoaXMuJGFjdHVhbEFsaWdubWVudCxcclxuICAgICAgJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgICApLCAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkYnVmZmVyU2l6ZSA9IHRoaXMuJGJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0aGlzLiRtYXhCdWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzbmFwVG9JdGVtID0gdGhpcy4kc25hcFRvSXRlbSxcclxuICAgICAgJHNuYXBUb0l0ZW1BbGlnbiA9IHRoaXMuJHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgJHN0aWNreUVuYWJsZWQgPSB0aGlzLiRzdGlja3lFbmFibGVkLFxyXG4gICAgICAkaXNMYXp5ID0gdGhpcy4kY29sbGVjdGlvbk1vZGUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzTGF6eSh2IHx8IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKSksXHJcbiAgICAgICksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy4kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy4kc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSksXHJcbiAgICAgICksXHJcbiAgICAgICRjb2xsYXBzaW5nTW9kZSA9IHRoaXMuJGNvbGxhcHNpbmdNb2RlLFxyXG4gICAgICAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuJHNlbGVjdGluZ01vZGUsXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRoaXMuJHNlbGVjdGVkSWRzLFxyXG4gICAgICAkY29sbGFwc2VkSWRzID0gdGhpcy4kY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICBtYXAodiA9PiBBcnJheS5pc0FycmF5KHYpID8gdiA6IFtdKSxcclxuICAgICAgKSxcclxuICAgICAgJGNvbGxhcHNlZEl0ZW1JZHMgPSB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtVHJhbnNmb3JtID0gdGhpcy4kaXRlbVRyYW5zZm9ybSxcclxuICAgICAgJHNjcmVlblJlYWRlck1lc3NhZ2UgPSB0aGlzLiRzY3JlZW5SZWFkZXJNZXNzYWdlLFxyXG4gICAgICAkZGlzcGxheUl0ZW1zID0gdGhpcy5fc2VydmljZS4kZGlzcGxheUl0ZW1zLFxyXG4gICAgICAkY2FjaGVWZXJzaW9uID0gdGhpcy5fc2VydmljZS4kY2FjaGVWZXJzaW9uO1xyXG5cclxuICAgICRzbmFwVG9JdGVtLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwVG9JdGVtID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRhY3R1YWxJdGVtcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuaXRlbXMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGFjdHVhbEl0ZW1zLCAkdmlld0luaXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbLCBpbml0XSkgPT4gaW5pdCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc25hcElmTmVlZCgpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGl0ZW1Db25maWdNYXAucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLml0ZW1Db25maWdNYXAgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VkSWRzID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRkaXNwbGF5SXRlbXMsICRzY3JlZW5SZWFkZXJNZXNzYWdlLCAkaXNWZXJ0aWNhbCwgJHNjcm9sbFNpemUsICRib3VuZHNdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtpdGVtcywgc2NyZWVuUmVhZGVyTWVzc2FnZSwgaXNWZXJ0aWNhbCwgc2Nyb2xsU2l6ZSwgYm91bmRzXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlLm5leHQoXHJcbiAgICAgICAgICBmb3JtYXRTY3JlZW5SZWFkZXJNZXNzYWdlKGl0ZW1zLCBzY3JlZW5SZWFkZXJNZXNzYWdlLCBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMhKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXNMYXp5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNMYXp5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtc0NvbXBvc2l0aW9uID0gJGl0ZW1zLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoaXRlbXMgPT4ge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFskY29sbGFwc2VkSXRlbUlkcywgJGl0ZW1Db25maWdNYXAsICR0cmFja0J5LCAkZGl2aWRlc10pLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoW2NvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlc10pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICAkaXRlbXNDb21wb3NpdGlvbi5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKCh7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuX3JlYWR5Rm9yU2hvdyB8fCAhKHRoaXMuY2FjaGFibGUgJiYgIXRoaXMuX2NhY2hlZCAmJlxyXG4gICAgICAgICAgIXRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvU3RhcnQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YoeyBpdGVtcywgY29sbGFwc2VkSWRzLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5LCBkaXZpZGVzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJHVwZGF0ZUl0ZW1zUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGlkZGVuSXRlbXMgPSBuZXcgQ01hcDxJZCwgYm9vbGVhbj4oKTtcclxuXHJcbiAgICAgICAgbGV0IGlzQ29sbGFwc2VkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtPy5bdHJhY2tCeV07XHJcbiAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gKGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCkgPiAwLCBjb2xsYXBzZWQgPSBjb2xsYXBzZWRJZHMuaW5jbHVkZXMoaWQpO1xyXG4gICAgICAgICAgICBpZiAoISFncm91cCkge1xyXG4gICAgICAgICAgICAgIGlzQ29sbGFwc2VkID0gY29sbGFwc2VkO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgaGlkZGVuSXRlbXMuc2V0KGlkLCB0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdHVhbEl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtPy5bdHJhY2tCeV07XHJcbiAgICAgICAgICBpZiAoISFpdGVtICYmIGhpZGRlbkl0ZW1zLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhY3R1YWxJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZENvbGxlY3Rpb24gPSBub3JtYWxpemVDb2xsZWN0aW9uKGFjdHVhbEl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5LCBkaXZpZGVzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEl0ZW1zLm5leHQobm9ybWFsaXplZENvbGxlY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1ZlcnRpY2FsID0gdjtcclxuICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdG9nZ2xlQ2xhc3NOYW1lKGVsLCB2ID8gQ0xBU1NfTElTVF9WRVJUSUNBTCA6IENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgdiA/IENMQVNTX0xJU1RfSE9SSVpPTlRBTCA6IENMQVNTX0xJU1RfVkVSVElDQUwpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNuYXBwaW5nTWV0aG9kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdGhpcy5fdHJhY2tCb3guaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGlmICh0aGlzLmdldElzTXVsdGlTZWxlY3Rpb24odiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgICAgIChlbCBhcyBhbnkpLnJvbGUgPSBST0xFX0xJU1RfQk9YO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3RpbmdNb2RlID0gU2VsZWN0aW5nTW9kZXNUeXBlcy5NVUxUSV9TRUxFQ1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzU2luZ2xlU2VsZWN0aW9uKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9pc011bHRpU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoISFlbCkge1xyXG4gICAgICAgICAgICAoZWwgYXMgYW55KS5yb2xlID0gUk9MRV9MSVNUX0JPWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0aW5nTW9kZSA9IFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc05vbmVTZWxlY3Rpb24odiB8fCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCkpIHtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW9uID0gdGhpcy5faXNNdWx0aVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgKGVsIGFzIGFueSkucm9sZSA9IFJPTEVfTElTVDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0aW5nTW9kZSA9IFNlbGVjdGluZ01vZGVzVHlwZXMuTk9ORTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2luZ01vZGUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRJc05vbmVDb2xsYXBzZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzTm9uZUNvbGxhcHNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuX3NlcnZpY2UuaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5faXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc011bHRpcGxlQ29sbGFwc2UoKSkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc011bHRpcGxlQ29sbGFwc2UgPSB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc0FjY29yZGlvbkNvbGxhcHNlID0gdGhpcy5fc2VydmljZS5pc05vbmVDb2xsYXBzZSA9IHRoaXMuX2lzQWNjb3JkaW9uQ29sbGFwc2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNBY2NvcmRpb25Db2xsYXBzZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzQWNjb3JkaW9uQ29sbGFwc2UgPSB0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5fc2VydmljZS5pc05vbmVDb2xsYXBzZSA9IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSB0aGlzLiRwcmV2ZW50U2Nyb2xsU25hcHBpbmc7XHJcblxyXG4gICAgJHByZXZlbnRTY3JvbGxTbmFwcGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZDtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2VkSXRlbUlkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRjb2xsYXBzZUl0ZW1zUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNDaHVua0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIGNvbnN0ICRsb2FkaW5nID0gdGhpcy4kbG9hZGluZztcclxuICAgICRsb2FkaW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBza2lwKDEpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhdiksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgaXNDaHVua0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbGJhciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmICghIXNjcm9sbGJhcikge1xyXG4gICAgICAgICAgc2Nyb2xsYmFyLnN0b3BTY3JvbGxiYXIoKTtcclxuICAgICAgICAgIHNjcm9sbGJhci5yZWZyZXNoU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAkYWN0dWFsSXRlbXMucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlTmV4dEZyYW1lLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiAkY2h1bmtMb2FkaW5nUmVuZGVyU3RhYmlsaXplci5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICBpc0NodW5rTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q2FjaGVDaHVua0luZm8oKTtcclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxiYXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgICAgICBpZiAoISFzY3JvbGxiYXIpIHtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGJhci5zdG9wU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxiYXIucmVmcmVzaFNjcm9sbGJhcigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICApKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGxvYWRpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IHByZXZDYWNoZVZlcnNpb246IG51bWJlciA9IC0xLCBwcmV2U2Nyb2xsYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICR2aWV3SW5pdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2hvdy5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoTWF0aC5tYXgoNTAwLCB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmdldFZhbHVlKCkuc2Nyb2xsVG9JdGVtKSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93IHx8ICh0aGlzLmNhY2hhYmxlICYmIHRoaXMuX2NhY2hlZCkpIHtcclxuICAgICAgICAgICAgICByZWFkeUZvckFuaW1hdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlID0gKHBhcmFtczoge1xyXG4gICAgICBhbGlnbm1lbnQ6IEFsaWdubWVudDsgcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0OiBudW1iZXI7IHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQ6IG51bWJlcjsgdHJhY2tCeTogc3RyaW5nOyBpc0luZmluaXR5OiBib29sZWFuO1xyXG4gICAgICBzbmFwU2Nyb2xsVG9TdGFydDogYm9vbGVhbiwgc25hcFNjcm9sbFRvRW5kOiBib29sZWFuOyBib3VuZHM6IElTaXplOyBsaXN0Qm91bmRzOiBJU2l6ZTsgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXI7XHJcbiAgICAgIGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uPE9iamVjdD47IGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA7IHNjcm9sbFNpemU6IG51bWJlcjsgaXRlbVNpemU6IG51bWJlcjtcclxuICAgICAgbWluSXRlbVNpemU6IG51bWJlcjsgbWF4SXRlbVNpemU6IG51bWJlcjsgYnVmZmVyU2l6ZTogbnVtYmVyOyBtYXhCdWZmZXJTaXplOiBudW1iZXI7IHN0aWNreUVuYWJsZWQ6IGJvb2xlYW47IGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICAgIGR5bmFtaWNTaXplOiBib29sZWFuOyBkaXZpZGVzOiBudW1iZXI7IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IGJvb2xlYW47IGNhY2hlVmVyc2lvbjogbnVtYmVyOyB1c2VyQWN0aW9uOiBib29sZWFuO1xyXG4gICAgICBzbmFwVG9JdGVtOiBib29sZWFuLCBzbmFwVG9JdGVtQWxpZ246IFNuYXBUb0l0ZW1BbGlnbiwgY29sbGFwc2VkSWRzOiBBcnJheTxJZD47IGl0ZW1UcmFuc2Zvcm06IEl0ZW1UcmFuc2Zvcm0gfCBudWxsO1xyXG4gICAgfSkgPT4ge1xyXG4gICAgICBjb25zdCB7XHJcbiAgICAgICAgYWxpZ25tZW50LCBzbmFwU2Nyb2xsVG9TdGFydCwgc25hcFNjcm9sbFRvRW5kLCBib3VuZHMsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsXHJcbiAgICAgICAgbWF4SXRlbVNpemUsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHN0aWNreUVuYWJsZWQsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBzbmFwVG9JdGVtLFxyXG4gICAgICAgIHNuYXBUb0l0ZW1BbGlnbiwgdXNlckFjdGlvbiwgY29sbGFwc2VkSWRzLCBjYWNoZVZlcnNpb24sIGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgIH0gPSBwYXJhbXM7XHJcbiAgICAgIGNvbnN0IGNhY2hlQ2hhbmdlZCA9IHByZXZDYWNoZVZlcnNpb24gIT09IGNhY2hlVmVyc2lvbjtcclxuICAgICAgcHJldkNhY2hlVmVyc2lvbiA9IGNhY2hlVmVyc2lvbjtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7XHJcbiAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgY29uc3QgaXNJbmZpbml0eSA9IHRoaXMuaXNJbmZpbml0eSwgY29sbGFwc2FibGUgPSBjb2xsYXBzZWRJZHMubGVuZ3RoID4gMCwgY2FjaGFibGUgPSB0aGlzLmNhY2hhYmxlLCBjYWNoZWQgPSB0aGlzLl9jYWNoZWQsIHdhaXRpbmdDYWNoZSA9IGNhY2hhYmxlICYmICFjYWNoZWQsXHJcbiAgICAgICAgICBlbWl0VXBkYXRlID0gIXRoaXMuX3JlYWR5Rm9yU2hvdyB8fCB3YWl0aW5nQ2FjaGUgfHwgY29sbGFwc2FibGUgfHwgaXNDaHVua0xvYWRpbmcsXHJcbiAgICAgICAgICBmaXJlVXBkYXRlID0gIXRoaXMuX3JlYWR5Rm9yU2hvdyB8fCB0aGlzLl8kc2Nyb2xsaW5nVG8uZ2V0VmFsdWUoKSxcclxuICAgICAgICAgIGZpcmVVcGRhdGVBdEVkZ2VzID0gZmlyZVVwZGF0ZSB8fCAhaXNJbmZpbml0eSxcclxuICAgICAgICAgIHVzZUFuaW1hdGlvbnMgPSAhaXNJbmZpbml0eSAmJiByZWFkeUZvckFuaW1hdGlvbnMgJiYgcHJldlNjcm9sbGFibGU7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyB8fCAoY2FjaGFibGUgJiYgY2FjaGVkKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudFNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpO1xyXG4gICAgICAgICAgbGV0IGFjdHVhbFNjcm9sbFNpemUgPSAhdGhpcy5fcmVhZHlGb3JTaG93ICYmIHNuYXBTY3JvbGxUb0VuZCA/IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGgpIDpcclxuICAgICAgICAgICAgKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IDAsXHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbjtcclxuXHJcbiAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcywgdmlld3BvcnRTaXplID0gKGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCksXHJcbiAgICAgICAgICAgIG9wdHM6IElVcGRhdGVDb2xsZWN0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgICBhbGlnbm1lbnQsIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsIG1heEl0ZW1TaXplLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLFxyXG4gICAgICAgICAgICAgIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsIHN0aWNreUVuYWJsZWQsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbiwgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvRW5kICYmICF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBkaXNwbGF5SXRlbXM6IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogY2FsY3VsYXRlZFRvdGFsU2l6ZTEsIGxlZnRMYXlvdXRPZmZzZXQ6IGxlZnRMYXlvdXRPZmZzZXQxIH0gPVxyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSB9KTtcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zID0gY2FsY3VsYXRlZERpc3BsYXlJdGVtcztcclxuICAgICAgICAgICAgdG90YWxTaXplID0gY2FsY3VsYXRlZFRvdGFsU2l6ZTE7XHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0MTtcclxuXHJcbiAgICAgICAgICAgIGlmICghIWl0ZW1UcmFuc2Zvcm0gJiYgZHluYW1pY1NpemUgJiYgdGhpcy5fdHJhY2tCb3guZGVsdGEgIT09IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplMSwgbGVmdExheW91dE9mZnNldDogbGVmdExheW91dE9mZnNldDEgfSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUgKyB0aGlzLl90cmFja0JveC5kZWx0YSB9KTtcclxuICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMgPSBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zO1xyXG4gICAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGNhbGN1bGF0ZWRUb3RhbFNpemUxO1xyXG4gICAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0MTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgeyBkaXNwbGF5SXRlbXM6IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogY2FsY3VsYXRlZFRvdGFsU2l6ZSwgbGVmdExheW91dE9mZnNldDogbGVmdExheW91dE9mZnNldDEgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIG9wdHMpO1xyXG4gICAgICAgICAgICBkaXNwbGF5SXRlbXMgPSBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSBjYWxjdWxhdGVkVG90YWxTaXplO1xyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoISFpdGVtVHJhbnNmb3JtICYmIGR5bmFtaWNTaXplICYmIHRoaXMuX3RyYWNrQm94LmRlbHRhICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgeyBkaXNwbGF5SXRlbXM6IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogY2FsY3VsYXRlZFRvdGFsU2l6ZSwgbGVmdExheW91dE9mZnNldDogbGVmdExheW91dE9mZnNldDEgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIGl0ZW1Db25maWdNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSArIHRoaXMuX3RyYWNrQm94LmRlbHRhIH0pO1xyXG4gICAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgICAgdG90YWxTaXplID0gY2FsY3VsYXRlZFRvdGFsU2l6ZTtcclxuICAgICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzY3JvbGxlci50b3RhbFNpemUgPSB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgc2Nyb2xsZXIuc3RhcnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0O1xyXG5cclxuICAgICAgICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCh0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgICBpZiAoIV8kY3JlYXRlZC5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIF8kY3JlYXRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBhY3R1YWxTY3JvbGxTaXplICsgZGVsdGEsXHJcbiAgICAgICAgICAgIHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID0gc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSxcclxuICAgICAgICAgICAgcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsV2lkdGg7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0c0J5QWxsaWdubWVudCgpO1xyXG5cclxuICAgICAgICAgIHNjcm9sbGVyLmRlbHRhID0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgcHJldlNjcm9sbGFibGUgPSBzY3JvbGxlci5zY3JvbGxhYmxlO1xyXG5cclxuICAgICAgICAgIGlmICgoc25hcFNjcm9sbFRvU3RhcnQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9TdGFydCAmJiBzY3JvbGxlci5zY3JvbGxhYmxlKSB8fFxyXG4gICAgICAgICAgICAoc25hcFNjcm9sbFRvU3RhcnQgJiYgY3VycmVudFNjcm9sbFNpemUgPD0gTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORykpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTY3JvbGxTaXplICE9PSByb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZDtcclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogMCwgdXNlckFjdGlvbixcclxuICAgICAgICAgICAgICAgIGZpcmVVcGRhdGU6IGZpcmVVcGRhdGVBdEVkZ2VzLCBiZWhhdmlvcjogIXVzZUFuaW1hdGlvbnMgPyBCRUhBVklPUl9JTlNUQU5UIDogKCh0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0gPiAwICYmIHRoaXMuc2Nyb2xsQmVoYXZpb3IgIT09IEJFSEFWSU9SX0lOU1RBTlQpID8gQkVIQVZJT1JfQVVUTyA6IEJFSEFWSU9SX0lOU1RBTlQpLFxyXG4gICAgICAgICAgICAgICAgYmxlbmRpbmc6IHVzZUFuaW1hdGlvbnMgJiYgc2Nyb2xsZXIuaGFzQW5pbWF0aW9uKHRoaXMuX2FuaW1hdGlvbklkKSwgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uUGFyYW1zLnNjcm9sbFRvSXRlbSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFuaW1hdGlvbklkID0gc2Nyb2xsZXI/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uSWQgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uSWQgPSBhbmltYXRpb25JZDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuc3RvcEFuaW1hdGlvbih0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgaWYgKGVtaXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyR1cGRhdGUubmV4dChnZXRTY3JvbGxTdGF0ZVZlcnNpb24odG90YWxTaXplLCB0aGlzLl9pc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKChzbmFwU2Nyb2xsVG9FbmQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHx8IChzbmFwU2Nyb2xsVG9FbmQgJiYgIXNjcm9sbGVyLnNjcm9sbGFibGUpIHx8XHJcbiAgICAgICAgICAgIChzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICsgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORyA+PSByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSkgfHxcclxuICAgICAgICAgICAgKHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID49IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgKyBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSxcclxuICAgICAgICAgICAgICBmaXJlVXBkYXRlOiBmaXJlVXBkYXRlQXRFZGdlcywgYmVoYXZpb3I6ICF1c2VBbmltYXRpb25zID8gQkVIQVZJT1JfSU5TVEFOVCA6ICgodGhpcy5hbmltYXRpb25QYXJhbXMuc2Nyb2xsVG9JdGVtID4gMCAmJiB0aGlzLnNjcm9sbEJlaGF2aW9yICE9PSBCRUhBVklPUl9JTlNUQU5UKSA/IEJFSEFWSU9SX0FVVE8gOiBCRUhBVklPUl9JTlNUQU5UKSwgdXNlckFjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgYmxlbmRpbmc6IHVzZUFuaW1hdGlvbnMgJiYgc2Nyb2xsZXIuaGFzQW5pbWF0aW9uKHRoaXMuX2FuaW1hdGlvbklkKSB8fCBjYWNoZUNoYW5nZWQsIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGFuaW1hdGlvbklkID0gc2Nyb2xsZXI/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgaWYgKGFuaW1hdGlvbklkID4gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25JZCA9IGFuaW1hdGlvbklkO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyLnN0b3BBbmltYXRpb24odGhpcy5fYW5pbWF0aW9uSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzY3JvbGxTaXplICE9PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICYmXHJcbiAgICAgICAgICAgICgoc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSAwICYmIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPCByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSkgfHxcclxuICAgICAgICAgICAgICAoc2Nyb2xsU2l6ZSAhPT0gcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgfHwgY3VycmVudFNjcm9sbFNpemUgIT09IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25JZCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXIuc3RvcEFuaW1hdGlvbih0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uSWQgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUsIGJsZW5kaW5nOiB0cnVlLCB1c2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgIGZpcmVVcGRhdGUsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5ULCBkdXJhdGlvbjogMCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICAgICAgaWYgKGVtaXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQoZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQoZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbGV0IHByZXZJdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gICAgY29uc3QgZGVib3VuY2VkVXBkYXRlID0gZGVib3VuY2UodXBkYXRlLCAwLCBNQVhfTlVNQkVSU19PRl9TS0lQU19GT1JfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMSk7XHJcbiAgICAkdmlld0luaXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoWyR0cmFja0J5LCB0aGlzLiRpc0luZmluaXR5LCAkc25hcFNjcm9sbFRvU3RhcnQsICRzbmFwU2Nyb2xsVG9FbmQsICRib3VuZHMsICRsaXN0Qm91bmRzLCAkc2Nyb2xsRW5kT2Zmc2V0LCAkYWN0dWFsSXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICRhY3R1YWxJdGVtU2l6ZSwgJGFjdHVhbE1pbkl0ZW1TaXplLCAkYWN0dWFsTWF4SXRlbVNpemUsICRjb2xsYXBzZWRJdGVtSWRzLCAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzdGlja3lFbmFibGVkLCAkaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICRkeW5hbWljU2l6ZSwgJGRpdmlkZXMsICRzbmFwVG9JdGVtLCAkc25hcFRvSXRlbUFsaWduLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGl0ZW1UcmFuc2Zvcm0sICRhbGlnbm1lbnQsXHJcbiAgICAgICAgICAkcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0LCAkcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgJGNhY2hlVmVyc2lvbiwgdGhpcy4kZmlyZVVwZGF0ZSxcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAoKFtcclxuICAgICAgICAgICAgdHJhY2tCeSwgaXNJbmZpbml0eSwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgIG1heEl0ZW1TaXplLCBjb2xsYXBzZWRJZHMsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHN0aWNreUVuYWJsZWQsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBkaXZpZGVzLCBzbmFwVG9JdGVtLCBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGl0ZW1UcmFuc2Zvcm0sIGFsaWdubWVudCwgcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0LCBwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0LCBjYWNoZVZlcnNpb24sXHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHByZXZJdGVtcyAhPT0gaXRlbXMpIHtcclxuICAgICAgICAgICAgICBpdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHByZXZJdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRPcHRpbWl6YXRpb24gPSB0aGlzLnNjcm9sbGluZ1NldHRpbmdzPy5vcHRpbWl6YXRpb24gPz8gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1Mub3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgICAgIHZlbG9jaXR5ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LmF2ZXJhZ2VWZWxvY2l0eSA/PyAwLFxyXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nID0gdGhpcy5fJHNjcm9sbGluZ1RvLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgdXNlRGVib3VuY2VkVXBkYXRlID0gKGR5bmFtaWNTaXplICYmICFpdGVtVHJhbnNmb3JtKSAmJiAhKHNuYXBTY3JvbGxUb0VuZCAmJiB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkgJiYgIWl0ZW1zQ2hhbmdlZCAmJiBoYXNVc2VyQWN0aW9uICYmICFpc1Njcm9sbGluZyAmJlxyXG4gICAgICAgICAgICAgICAgKHZlbG9jaXR5ID4gMCAmJiB2ZWxvY2l0eSA8IE1BWF9WRUxPQ0lUWV9GT1JfU0NST0xMX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEpO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZE9wdGltaXphdGlvbikge1xyXG4gICAgICAgICAgICAgIGlmICh1c2VEZWJvdW5jZWRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZS5leGVjdXRlKHtcclxuICAgICAgICAgICAgICAgICAgdHJhY2tCeSwgaXNJbmZpbml0eSwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzOiBib3VuZHMhLCBsaXN0Qm91bmRzOiBsaXN0Qm91bmRzISwgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICBtYXhJdGVtU2l6ZSwgY29sbGFwc2VkSWRzLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZGl2aWRlcywgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduLCBhbGlnbm1lbnQsIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uOiBoYXNVc2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzU2Nyb2xsaW5nKSB7XHJcbiAgICAgICAgICAgICAgdXBkYXRlKHtcclxuICAgICAgICAgICAgICAgIHRyYWNrQnksIGlzSW5maW5pdHksIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kczogYm91bmRzISwgbGlzdEJvdW5kczogbGlzdEJvdW5kcyEsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgIG1heEl0ZW1TaXplLCBjb2xsYXBzZWRJZHMsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHN0aWNreUVuYWJsZWQsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBkaXZpZGVzLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduLCBhbGlnbm1lbnQsIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uOiBoYXNVc2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGVyID0gdGhpcy4kc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKSxcclxuICAgICAgJHNjcm9sbGVyU2Nyb2xsID0gJHNjcm9sbGVyQ29tcG9uZW50LnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiBzY3JvbGxlciEuJHNjcm9sbCksXHJcbiAgICAgICksXHJcbiAgICAgICRzY3JvbGxlclNjcm9sbEVuZCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxFbmQpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsYmFyU2Nyb2xsID0gJHNjcm9sbGVyQ29tcG9uZW50LnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiBzY3JvbGxlciEuJHNjcm9sbGJhclNjcm9sbCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2Nyb2xsSGFuZGxlciA9ICh1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpID0+IHtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCxcclxuICAgICAgICAgIHNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsYmFyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICBpZiAoISFzY3JvbGxlckVsICYmICEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudChmYWxzZSwgdGhpcy5fcmVhZHlGb3JTaG93LCBoYXNVc2VyQWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHVzZXJBY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb1N0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGwucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmICghIXNjcm9sbGVyRWwgJiYgISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbEhhbmRsZXIodXNlckFjdGlvbik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRzY3JvbGxlclNjcm9sbEVuZC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICBoYXNVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKCEhc2Nyb2xsZXJFbCAmJiAhIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCB0aGlzLl9yZWFkeUZvclNob3csIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY3JvbGxIYW5kbGVyKHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbFRvID0gdGhpcy4kc2Nyb2xsVG8sXHJcbiAgICAgICRzY3JvbGxUb0V4ZWN1dG9yID0gdGhpcy4kc2Nyb2xsVG9FeGVjdXRvcjtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskc2Nyb2xsZXIsICR0cmFja0J5LCAkc2Nyb2xsVG9dKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoKFtzY3JvbGxlciwgLCBldmVudF0pID0+ICEhc2Nyb2xsZXIgJiYgISFldmVudCksXHJcbiAgICAgIG1hcCgoW3Njcm9sbGVyLCB0cmFja0J5LCBldmVudF0pID0+ICh7IHNjcm9sbGVyOiBzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnQgfSkpLFxyXG4gICAgICBzd2l0Y2hNYXAoKHsgZXZlbnQgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGQgPSBldmVudD8uZGVsYXkgPz8gMDtcclxuICAgICAgICBpZiAoZCA+IDApIHtcclxuICAgICAgICAgIHJldHVybiBvZihldmVudCkucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIGRlbGF5KGQpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKGV2ZW50KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChldmVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbGluZ1RvLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IubmV4dChldmVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsVG9FeGVjdXRvci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgeyBpZCwgaXRlcmF0aW9uID0gMCwgYmxlbmRpbmcgPSBmYWxzZSwgaXNMYXN0SXRlcmF0aW9uID0gZmFsc2UsIGNiIH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBuZXh0SXRlcmF0aW9uID0gaXRlcmF0aW9uICsgMSwgZmluaXNoZWQgPSBuZXh0SXRlcmF0aW9uID49IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgZmlyZVVwZGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwgeyBpZCwgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBibGVuZGluZywgY2IgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVib3VuY2VkVXBkYXRlLmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5zdGFydFNjcm9sbFRvKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmICghIWl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBkeW5hbWljU2l6ZSA9IHRoaXMuZHluYW1pY1NpemUsIGl0ZW1TaXplID0gdGhpcy5hY3R1YWxJdGVtU2l6ZSwgbWluSXRlbVNpemUgPSB0aGlzLmFjdHVhbE1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgIG1heEl0ZW1TaXplID0gdGhpcy5hY3R1YWxNYXhJdGVtU2l6ZSwgc25hcFNjcm9sbFRvRW5kID0gdGhpcy5zbmFwU2Nyb2xsVG9FbmQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50U2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgICAgICAgb3B0czogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogdGhpcy5fJGFjdHVhbEFsaWdubWVudC5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSwgbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZTogdGhpcy5tYXhCdWZmZXJTaXplLCBpdGVtVHJhbnNmb3JtOiB0aGlzLml0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemU6IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsVG9wIDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsTGVmdCksXHJcbiAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW06IHRoaXMuc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduOiB0aGlzLnNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgc3RpY2t5RW5hYmxlZDogdGhpcy5zdGlja3lFbmFibGVkLCBmcm9tSXRlbUlkOiBpZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogdGhpcy5lbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHNjcm9sbFNpemUgPSBzbmFwU2Nyb2xsVG9FbmQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQgP1xyXG4gICAgICAgICAgICAgICAgKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxXaWR0aCkgOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IChpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgeyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZSwgbGVmdExheW91dE9mZnNldCB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwge1xyXG4gICAgICAgICAgICAgICAgICAuLi5vcHRzLCBzY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpc0xhc3RJdGVyYXRpb24gPyB1bmRlZmluZWQgOiBpZCxcclxuICAgICAgICAgICAgICAgIH0pLCBkZWx0YTEgPSB0aGlzLl90cmFja0JveC5kZWx0YTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFRvdGFsU2l6ZSA9IHRvdGFsU2l6ZSA8IHZpZXdwb3J0U2l6ZSA/IHZpZXdwb3J0U2l6ZSA6IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQuc3RhcnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC50b3RhbFNpemUgPSBub3JtYWxpemVkVG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gc2Nyb2xsU2l6ZSArIGRlbHRhMTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgbm9ybWFsaXplZFRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNuYXBwaW5nSGFuZGxlcigpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldHNCeUFsbGlnbm1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IG5vdENoYW5nZWQgPSBzY3JvbGxTaXplID09PSBjdXJyZW50U2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICBpZiAoIW5vdENoYW5nZWQgJiYgaXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcixcclxuICAgICAgICAgICAgICAgICAgZmlyZVVwZGF0ZSwgYmxlbmRpbmcsIGZvcmNlOiB0cnVlLCBzbmFwOiBmYWxzZSwgbm9ybWFsaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwge1xyXG4gICAgICAgICAgICAgICAgICBpZCwgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBibGVuZGluZyxcclxuICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYlxyXG4gICAgICAgICAgICAgICAgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbVt0cmFja0J5XSA9PT0gaWQpO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUgPSB0aGlzLmFjdHVhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNjcm9sbFNpemUgPSBpbmRleCAqIGl0ZW1TaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc25hcFRvSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zbmFwVG9JdGVtQWxpZ24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU25hcFRvSXRlbUFsaWducy5DRU5URVI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSArPSBpdGVtU2l6ZSAqIC41O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICAgICAgICBpdGVtQ29uZmlnTWFwID0gdGhpcy5pdGVtQ29uZmlnTWFwLCBpdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgICAgICAgICAgICBvcHRzOiBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IHRoaXMuXyRhY3R1YWxBbGlnbm1lbnQuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSwgbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5idWZmZXJTaXplLCBtYXhCdWZmZXJTaXplOiB0aGlzLm1heEJ1ZmZlclNpemUsIGl0ZW1UcmFuc2Zvcm06IHRoaXMuaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW06IHRoaXMuc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduOiB0aGlzLnNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lFbmFibGVkOiB0aGlzLnN0aWNreUVuYWJsZWQsIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IChpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplLCBsZWZ0TGF5b3V0T2Zmc2V0IH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0cywgc2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaXNMYXN0SXRlcmF0aW9uID8gdW5kZWZpbmVkIDogaWQsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbFRvdGFsU2l6ZSA9IHRoaXMuaXNJbmZpbml0eSA/ICh0b3RhbFNpemUgKyB2aWV3cG9ydFNpemUpIDogdG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUb3RhbFNpemUgPSBhY3R1YWxUb3RhbFNpemUgPCB2aWV3cG9ydFNpemUgPyB2aWV3cG9ydFNpemUgOiBhY3R1YWxUb3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQuc3RhcnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnRvdGFsU2l6ZSA9IG5vcm1hbGl6ZWRUb3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIG5vcm1hbGl6ZWRUb3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldHNCeUFsbGlnbm1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBJU2Nyb2xsVG9QYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFt0aGlzLl9pc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsU2l6ZSwgZmlyZVVwZGF0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yLCBibGVuZGluZywgZm9yY2U6IHRydWUsIHNuYXA6IGZhbHNlLCBub3JtYWxpemU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW3RydWUsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIGNiIH1dKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwgeyBpZCwgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBibGVuZGluZywgY2IgfV0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2ZpbmlzaGVkLCBwYXJhbXNdKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xyXG4gICAgICAgICAgdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IubmV4dChwYXJhbXMgYXMgSVNjcm9sbFBhcmFtcyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5wcmV2ZW50U2Nyb2xsU25hcHBpbmcodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsaW5nVG8ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LmZpbmlzaGVkU2Nyb2xsVG8oKTtcclxuICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBzY3JvbGxQYXJhbXMgPSBwYXJhbXMgYXMgSVNjcm9sbFBhcmFtcyAmIHsgc2Nyb2xsQ2FsbGVkOiBib29sZWFuOyB9O1xyXG4gICAgICAgIHNjcm9sbFBhcmFtcz8uY2I/LigpO1xyXG4gICAgICB9KSxcclxuICAgICAgZGVsYXkoMCksXHJcbiAgICAgIHRhcCgoW2ZpbmlzaGVkXSkgPT4ge1xyXG4gICAgICAgIGlmIChmaW5pc2hlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNuYXBJZk5lZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkaXRlbVJlbmRlcmVyID0gdGhpcy4kaXRlbVJlbmRlcmVyO1xyXG5cclxuICAgICRpdGVtUmVuZGVyZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkYm91bmRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodmFsdWUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNpemU6IElTaXplID0geyB3aWR0aDogdmFsdWUhLndpZHRoLCBoZWlnaHQ6IHZhbHVlIS5oZWlnaHQgfTtcclxuICAgICAgICB0aGlzLm9uVmlld3BvcnRDaGFuZ2UuZW1pdChvYmplY3RBc1JlYWRvbmx5KHNpemUpKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHZpcnR1YWxDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMub25JdGVtQ2xpY2suZW1pdChvYmplY3RBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID0gMDtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc1NpbmdsZVNlbGVjdGlvbiB8fCAodGhpcy5faXNNdWx0aVNlbGVjdGlvbiAmJiBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID49IDIpKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5zZWxlY3RlZElkcztcclxuICAgICAgICAgIGlmICgodGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fFxyXG4gICAgICAgICAgICAoaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA9PT0gMiAmJiBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpIHx8IGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPiAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChjb3B5VmFsdWVBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPCAzKSB7XHJcbiAgICAgICAgICBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNlbGVjdGVkSWRzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3RlZElkcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkdmlld0luaXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZpY2UuJGNvbGxhcHNlZElkcy5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlIHx8IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSkgJiYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KHYpO1xyXG4gICAgICAgICAgICAgIHRoaXMub25Db2xsYXBzZS5lbWl0KGNvcHlWYWx1ZUFzUmVhZG9ubHkodikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGl0ZW1Db25maWdNYXAsICRkeW5hbWljU2l6ZSwgJGRpdmlkZXNdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbaXRlbUNvbmZpZ01hcCwgZHluYW1pY1NpemUsIGRpdmlkZXNdKSA9PiAhIWl0ZW1Db25maWdNYXAgJiYgIWR5bmFtaWNTaXplICYmIGRpdmlkZXMgPiAxKSxcclxuICAgICAgdGFwKChbaXRlbUNvbmZpZ01hcF0pID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGl0ZW1Db25maWdNYXApIHtcclxuICAgICAgICAgIGNvbnN0IG1ldGFEYXRhID0gaXRlbUNvbmZpZ01hcFtpZF07XHJcbiAgICAgICAgICBpZiAobWV0YURhdGE/LmZ1bGxTaXplIHx8IG1ldGFEYXRhPy5zdGlja3kgPT09IDEgfHwgbWV0YURhdGE/LnN0aWNreSA9PT0gMikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVGhlIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBhbGdvcml0aG0gYFtkeW5hbWljU2l6ZV09XCJmYWxzZVwiYCBjYW5ub3QgY29ycmVjdGx5IGhhbmRsZSBub24tdW5pZm9ybSBsaXN0cyAodGhlIGl0ZW1Db25maWdNYXAgc3BlY2lmaWVzIGZ1bGwtc2l6ZSBlbGVtZW50cykuIEZvciBjb3JyZWN0IHJlbmRlcmluZywgc3BlY2lmeSBgW2R5bmFtaWNTaXplXT1cInRydWVcImAuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGNvbGxhcHNpbmdNb2RlLCAkaXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkdHJhY2tCeV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtjb2xsYXBzaW5nTW9kZSwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnldKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNBY2NvcmRpb24gPSBpc0NvbGxhcHNlTW9kZShjb2xsYXBzaW5nTW9kZSwgQ29sbGFwc2luZ01vZGVzLkFDQ09SRElPTik7XHJcbiAgICAgICAgaWYgKGlzQWNjb3JkaW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBhbGxHcm91cHM6IEFycmF5PElkPiA9IFtdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2lzQWNjb3JkaW9uQ29sbGFwc2UpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbVt0cmFja0J5XSwgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwPy5baWRdPy5jb2xsYXBzYWJsZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoIWNvbGxhcHNhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYWxsR3JvdXBzLnB1c2goaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKHRoaXMuX2lzQWNjb3JkaW9uQ29sbGFwc2UgfHwgdGhpcy5faXNNdWx0aXBsZUNvbGxhcHNlKSAmJiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMuZ2V0VmFsdWUoKSkgIT09IEpTT04uc3RyaW5naWZ5KGFsbEdyb3VwcykpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLm5leHQoYWxsR3JvdXBzKTtcclxuICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNlLmVtaXQoY29weVZhbHVlQXNSZWFkb25seShhbGxHcm91cHMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkY29sbGFwc2VkSXRlbUlkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VkSWRzID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGRlc3Ryb3kucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgZGVib3VuY2VkVXBkYXRlLmRpc3Bvc2UoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyR2aWV3SW5pdC5uZXh0KHRydWUpO1xyXG5cclxuICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkFmdGVyUmVzaXplKHVwZGF0ZSA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNuYXBwaW5nSGFuZGxlcigpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVSZWd1bGFyUmVuZGVyZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93ICYmIHVwZGF0ZSkge1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWJhbGUgPSB0aGlzLl9yZWFkeUZvclNob3c7XHJcbiAgICAgICAgaWYgKHVwZGF0ZWJhbGUpIHtcclxuICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY3JvbGxlci5yZWZyZXNoKHVwZGF0ZWJhbGUsIHVwZGF0ZWJhbGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrQm91bmRzT2ZFbGVtZW50cygpIHtcclxuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl90cmFja0JveC5jaGVja0JvdW5kc09mRWxlbWVudHMoKTtcclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIGNvbnN0IHJlYWR5Rm9yU2hvdyA9IHRoaXMuX3JlYWR5Rm9yU2hvdyxcclxuICAgICAgICBpc1Njcm9sbGluZyA9IHRoaXMuXyRzY3JvbGxpbmdUby5nZXRWYWx1ZSgpO1xyXG4gICAgICB0aGlzLl90cmFja0JveC5jaGFuZ2VzKHRydWUsIHJlYWR5Rm9yU2hvdyAmJiAhaXNTY3JvbGxpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzbmFwcGluZ0hhbmRsZXIoKSB7XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCxcclxuICAgICAgICBtYXhTY3JvbGxTaXplID0gTWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0ID8/IDAgOiBzY3JvbGxlci5zY3JvbGxXaWR0aCA/PyAwKSxcclxuICAgICAgICBzY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA/PyAwIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCA/PyAwLFxyXG4gICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBNYXRoLnJvdW5kKHNjcm9sbFNpemUpO1xyXG4gICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93ICYmICF0aGlzLl9pc0xvYWRpbmcpIHtcclxuICAgICAgICBjb25zdCBpc1Njcm9sbEVuZCA9IChhY3R1YWxTY3JvbGxTaXplID49IChtYXhTY3JvbGxTaXplIC0gTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORykpIHx8ICFzY3JvbGxlci5zY3JvbGxhYmxlIHx8IHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kO1xyXG4gICAgICAgIGlmIChpc1Njcm9sbEVuZCkge1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXNTY3JvbGxTdGFydCA9IChhY3R1YWxTY3JvbGxTaXplIDw9IE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChpc1Njcm9sbFN0YXJ0KTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBpc1Njcm9sbFN0YXJ0O1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgIGNvbnN0IHNuYXBTY3JvbGxUb1N0YXJ0ID0gdGhpcy5fJGFjdHVhbFNuYXBTY3JvbGxUb1N0YXJ0LmdldFZhbHVlKCksIHNuYXBTY3JvbGxUb0VuZCA9IHRoaXMuXyRhY3R1YWxTbmFwU2Nyb2xsVG9FbmQuZ2V0VmFsdWUoKTtcclxuICAgICAgICBpZiAoIXNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZW1pdFNjcm9sbEV2ZW50KGlzU2Nyb2xsRW5kOiBib29sZWFuID0gZmFsc2UsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUsIHVzZXJBY3Rpb246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKHNjcm9sbGVyRWwgJiYgc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIHNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQpLFxyXG4gICAgICAgIG1heFNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFdpZHRoKSxcclxuICAgICAgICBib3VuZHMgPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgfHwgeyB4OiAwLCB5OiAwLCB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfTtcclxuICAgICAgY29uc3QgaXRlbXNSYW5nZSA9IGZvcm1hdEFjdHVhbERpc3BsYXlJdGVtcyh0aGlzLl9zZXJ2aWNlLmRpc3BsYXlJdGVtcywgdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksIHRoaXMuXyRhY3R1YWxTY3JvbGxFbmRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgICBzY3JvbGxTaXplLCBpc1ZlcnRpY2FsLCBib3VuZHMpLFxyXG4gICAgICAgIGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbERpcmVjdGlvbiA/PyAwLCBjb250YWluZXI6IHNjcm9sbGVyRWwsXHJcbiAgICAgICAgICBsaXN0OiB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpIS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICBkZWx0YU9mTmV3SXRlbXM6IHRoaXMuX3RyYWNrQm94LmRlbHRhT2ZOZXdJdGVtcywgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICBpdGVtc1JhbmdlLFxyXG4gICAgICAgICAgaXNFbmQ6ICFzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxhYmxlIHx8IHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kIHx8IChNYXRoLnJvdW5kKHNjcm9sbFNpemUpID09PSBNYXRoLnJvdW5kKG1heFNjcm9sbFNpemUpKSxcclxuICAgICAgICAgIHVzZXJBY3Rpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICB0aGlzLl8kc2Nyb2xsLm5leHQoZXZlbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTY3JvbGxFbmQpIHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsRW5kLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25TY3JvbGwuZW1pdChldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKG0/OiBTbmFwcGluZ01ldGhvZCkge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLnNuYXBwaW5nTWV0aG9kO1xyXG4gICAgcmV0dXJuIGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZChtZXRob2QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc05vbmVTZWxlY3Rpb24obT86IFNlbGVjdGluZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuc2VsZWN0aW5nTW9kZTtcclxuICAgIHJldHVybiBpc1NlbGVjdE1vZGUobW9kZSwgU2VsZWN0aW5nTW9kZXMuTk9ORSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU2luZ2xlU2VsZWN0aW9uKG0/OiBTZWxlY3RpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLnNlbGVjdGluZ01vZGU7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RNb2RlKG1vZGUsIFNlbGVjdGluZ01vZGVzLlNFTEVDVCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTXVsdGlTZWxlY3Rpb24obT86IFNlbGVjdGluZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuc2VsZWN0aW5nTW9kZTtcclxuICAgIHJldHVybiBpc1NlbGVjdE1vZGUobW9kZSwgU2VsZWN0aW5nTW9kZXMuTVVMVElfU0VMRUNUKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNOb25lQ29sbGFwc2UobT86IENvbGxhcHNpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLmNvbGxhcHNpbmdNb2RlO1xyXG4gICAgcmV0dXJuIGlzQ29sbGFwc2VNb2RlKG1vZGUsIENvbGxhcHNpbmdNb2Rlcy5OT05FKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNNdWx0aXBsZUNvbGxhcHNlKG0/OiBDb2xsYXBzaW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5jb2xsYXBzaW5nTW9kZTtcclxuICAgIHJldHVybiBpc0NvbGxhcHNlTW9kZShtb2RlLCBDb2xsYXBzaW5nTW9kZXMuTVVMVElfQ09MTEFQU0UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc0FjY29yZGlvbkNvbGxhcHNlKG0/OiBDb2xsYXBzaW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5jb2xsYXBzaW5nTW9kZTtcclxuICAgIHJldHVybiBpc0NvbGxhcHNlTW9kZShtb2RlLCBDb2xsYXBzaW5nTW9kZXMuQUNDT1JESU9OKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNWZXJ0aWNhbChkPzogRGlyZWN0aW9uKSB7XHJcbiAgICBjb25zdCBkaXIgPSBkIHx8IHRoaXMuZGlyZWN0aW9uO1xyXG4gICAgcmV0dXJuIGlzRGlyZWN0aW9uKGRpciwgRGlyZWN0aW9ucy5WRVJUSUNBTCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTGF6eShtPzogQ29sbGVjdGlvbk1vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuY29sbGVjdGlvbk1vZGU7XHJcbiAgICByZXR1cm4gaXNDb2xsZWN0aW9uTW9kZShtb2RlLCBDb2xsZWN0aW9uTW9kZXMuTEFaWSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IG51bGwpIHtcclxuICAgIGlmICghZGlzcGxheUl0ZW1zIHx8ICF0aGlzLl9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoe30pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCAmJiB0aGlzLnN0aWNreUVuYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPCBNQVhfUkVHVUxBUl9TTkFQRURfQ09NUE9ORU5UUyAmJiAhIXRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA8IE1BWF9SRUdVTEFSX1NOQVBFRF9DT01QT05FTlRTKSB7XHJcbiAgICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBjb21wLmluc3RhbmNlLnJlZ3VsYXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLnB1c2goY29tcCk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMgPSB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHM7XHJcbiAgICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIpO1xyXG4gICAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5pdGVtcyA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICBjb25zdCBsaXN0Q29udGFpbmVyUmVmID0gdGhpcy5fbGlzdENvbnRhaW5lclJlZjtcclxuXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSBkaXNwbGF5SXRlbXMubGVuZ3RoLCBjb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgaWYgKCEhbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICBjb25zdCBkb01hcDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge307XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgZm9yIChsZXQgbCA9IGNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IGNvbXBvbmVudHNbaV07XHJcbiAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtLmluc3RhbmNlLmlkO1xyXG4gICAgICAgICAgaXRlbS5pbnN0YW5jZS5yZW5kZXJlciA9IHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGRvTWFwW2lkXSA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChjb21wb25lbnRzLmxlbmd0aCA8IG1heExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSBsaXN0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3MpO1xyXG4gICAgICAgIGNvbnN0IGlkID0gY29tcC5pbnN0YW5jZS5pZDtcclxuICAgICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGRvTWFwW2lkXSA9IGk7XHJcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXApO1xyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKGRvTWFwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlT2Zmc2V0c0J5QWxsaWdubWVudCgpIHtcclxuICAgIGNvbnN0IGFsaWdubWVudCA9IHRoaXMuXyRhY3R1YWxBbGlnbm1lbnQuZ2V0VmFsdWUoKSwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSwgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSxcclxuICAgICAgaXNJbmZpbml0eSA9IHRoaXMuaXNJbmZpbml0eSwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0sXHJcbiAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpLFxyXG4gICAgICBwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQuZ2V0VmFsdWUoKTtcclxuICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7XHJcbiAgICAgIGNhc2UgQWxpZ25tZW50cy5OT05FOiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0Lm5leHQocHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0KTtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0Lm5leHQocHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBBbGlnbm1lbnRzLkNFTlRFUjoge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0SXRlbUlkOiBJZCB8IG51bGwgPSBpdGVtcy5sZW5ndGggPiAwID8gKGl0ZW1zWzBdPy5bdHJhY2tCeV0gPz8gbnVsbCkgOiBudWxsLFxyXG4gICAgICAgICAgZW5kSXRlbUlkOiBJZCB8IG51bGwgPSBpdGVtcy5sZW5ndGggPiAwID8gKGl0ZW1zPy5baXRlbXMubGVuZ3RoIC0gMV0/Llt0cmFja0J5XSA/PyBudWxsKSA6IG51bGwsXHJcbiAgICAgICAgICBhbGlnbm1lbnRTdGFydE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41IC0gKGZpcnN0SXRlbUlkICE9PSBudWxsID8gKGlzVmVydGljYWwgPyAodGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGZpcnN0SXRlbUlkKT8uaGVpZ2h0ID8/IDApIDpcclxuICAgICAgICAgICAgKHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhmaXJzdEl0ZW1JZCk/LndpZHRoID8/IDApKSA6IDApICogKGlzSW5maW5pdHkgPyAwIDogLjUpLFxyXG4gICAgICAgICAgYWxpZ25tZW50RW5kT2Zmc2V0ID0gdmlld3BvcnRTaXplICogLjUgLSAoZW5kSXRlbUlkICE9PSBudWxsID8gKGlzVmVydGljYWwgPyAodGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGVuZEl0ZW1JZCk/LmhlaWdodCA/PyAwKSA6XHJcbiAgICAgICAgICAgICh0aGlzLl9zZXJ2aWNlLmdldEl0ZW1Cb3VuZHMoZW5kSXRlbUlkKT8ud2lkdGggPz8gMCkpIDogMCkgKiAoaXNJbmZpbml0eSA/IDAgOiAuNSk7XHJcblxyXG4gICAgICAgIHRoaXMuXyRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldC5uZXh0KGFsaWdubWVudFN0YXJ0T2Zmc2V0KTtcclxuICAgICAgICB0aGlzLl8kYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0Lm5leHQoYWxpZ25tZW50RW5kT2Zmc2V0KTtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQubmV4dChwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQgKyBhbGlnbm1lbnRTdGFydE9mZnNldCk7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbEVuZE9mZnNldC5uZXh0KHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQgKyBhbGlnbm1lbnRFbmRPZmZzZXQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl8kbGlzdC5nZXRWYWx1ZSgpLCBwcm9wID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsXHJcbiAgICAgIHNpemUgPSB0b3RhbFNpemU7XHJcbiAgICBpZiAoISFsICYmIHBhcnNlSW50KGwubmF0aXZlRWxlbWVudC5zdHlsZVtwcm9wXSkgIT09IHNpemUpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW3Byb3BdID0gYCR7c2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIGFuIGxpc3QgaXRlbSBieSBhIGdpdmVuIGlkLlxyXG4gICAqL1xyXG4gIGZvY3VzKGlkOiBJZCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLk5PTkUpIHtcclxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgdGhpcy5fc2VydmljZS5mb2N1c0J5SWQoaWQsIGFsaWduLCB0aGlzLnNjcm9sbEJlaGF2aW9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBgaWRgIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2Nyb2xsZWQgYXJlYS5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCwgb3B0aW9uczogSVNjcm9sbE9wdGlvbnMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgY29uc3QgYmVoYXZpb3IgPSBvcHRpb25zPy5iZWhhdmlvciA/PyBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IG9wdGlvbnM/LmJsZW5kaW5nID8/IGZhbHNlLFxyXG4gICAgICBmb2N1c2VkID0gb3B0aW9ucz8uZm9jdXNlZCA/PyB0cnVlLFxyXG4gICAgICBkZWxheSA9IG9wdGlvbnM/LmRlbGF5ID8/IDAsXHJcbiAgICAgIGl0ZXJhdGlvbiA9IG9wdGlvbnM/Lml0ZXJhdGlvbiA/PyAwO1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yKGJlaGF2aW9yKTtcclxuICAgIHZhbGlkYXRlSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBjb25zdCBhY3R1YWxJdGVyYXRpb24gPSB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICBpZiAoIXRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlICYmICF0aGlzLmlzSW5maW5pdHkpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgZGVsYXksIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvU3RhcnQoY2I6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsLCBvcHRpb25zOiBJU2Nyb2xsT3B0aW9ucyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IHRoaXMuaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQ7XHJcbiAgICAgIGlmIChzY3JvbGxTaXplID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHNjcm9sbGVyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmcgPSBvcHRpb25zPy5ibGVuZGluZyA/PyBmYWxzZSxcclxuICAgICAgZm9jdXNlZCA9IG9wdGlvbnM/LmZvY3VzZWQgPz8gdHJ1ZSxcclxuICAgICAgZGVsYXkgPSBvcHRpb25zPy5kZWxheSA/PyAwLFxyXG4gICAgICBpdGVyYXRpb24gPSBvcHRpb25zPy5pdGVyYXRpb24gPz8gMDtcclxuICAgIHZhbGlkYXRlU2Nyb2xsQmVoYXZpb3IoYmVoYXZpb3IpO1xyXG4gICAgdmFsaWRhdGVJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCksIGZpcnN0SXRlbSA9IGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1swXSA/PyBudWxsIDogbnVsbCwgaWQgPSBmaXJzdEl0ZW0/Llt0cmFja0J5XSA/PyBudWxsLFxyXG4gICAgICBhY3R1YWxJdGVyYXRpb24gPSB2YWxpZGF0ZVNjcm9sbEl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgaWYgKCEhZmlyc3RJdGVtKSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgZGVsYXksIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBUaGUgc2Nyb2xsVG9FbmRJdGVtIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNjcm9sbFRvRW5kIG1ldGhvZC5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZEl0ZW0oY2I/OiAoKSA9PiB2b2lkLCBvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRocm93IEVycm9yKCdUaGUgc2Nyb2xsVG9FbmRJdGVtIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNjcm9sbFRvRW5kIG1ldGhvZC4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBzaXplLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCwgb3B0aW9uczogSVNjcm9sbE9wdGlvbnMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LFxyXG4gICAgICAgIG1heFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuc2Nyb2xsVG9wO1xyXG4gICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gbWF4U2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiZWhhdmlvciA9IG9wdGlvbnM/LmJlaGF2aW9yID8/IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gb3B0aW9ucz8uYmxlbmRpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGZvY3VzZWQgPSBvcHRpb25zPy5mb2N1c2VkID8/IHRydWUsXHJcbiAgICAgIGRlbGF5ID0gb3B0aW9ucz8uZGVsYXkgPz8gMCxcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yKGJlaGF2aW9yKTtcclxuICAgIHZhbGlkYXRlSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5nZXRWYWx1ZSgpLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXSwgaWQgPSBsYXRJdGVtPy5bdHJhY2tCeV0gPz8gbnVsbCxcclxuICAgICAgYWN0dWFsSXRlcmF0aW9uID0gdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGlmIChsYXRJdGVtID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgaWYgKCF0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSkge1xyXG4gICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICBpZCwgYmVoYXZpb3IsIGJsZW5kaW5nLCBkZWxheSwgaXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24sIGlzTGFzdEl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uID09PSBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIGNiOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG9GaW5hbGl6ZShpZDogSWQsIGZvY3VzZWQ6IGJvb2xlYW4sIGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsKSB7XHJcbiAgICBpZiAoZm9jdXNlZCkge1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3NlcnZpY2UuZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkKTtcclxuICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzKGVsLCBGb2N1c0FsaWdubWVudHMuTk9ORSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2I/LigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNsZWFudXAoKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuICAgIHRoaXMudHJhY2tpbmcoKTtcclxuICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSBjbGVhcmluZyB0aGUgY2FjaGUuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNhY2hlQ2xlYW4oKSB7XHJcbiAgICB0aGlzLl9jYWNoZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmR5bmFtaWNTaXplKSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmNhY2hlQ2xlYW4oKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByZXJlbmRlckNvbnRhaW5lciA9IHRoaXMuX3ByZXJlbmRlcjtcclxuICAgIGlmICghIXByZXJlbmRlckNvbnRhaW5lcikge1xyXG4gICAgICBwcmVyZW5kZXJDb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgcHJlcmVuZGVyQ29udGFpbmVyLm9mZigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMubmV4dChbXSk7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5fJHRvdGFsU2l6ZS5uZXh0KDApO1xyXG4gICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dCgwKTtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBzY3JvbGxlci5yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBUaGUgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcHJldmVudFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKi9cclxuICBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCgpIHtcclxuICAgIHRocm93IEVycm9yKCdUaGUgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcHJldmVudFNuYXBwaW5nIG1ldGhvZC4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnRzIHRoZSBsaXN0IGZyb20gc25hcHBpbmcgdG8gaXRzIHN0YXJ0IG9yIGVuZCBlZGdlLlxyXG4gICAqL1xyXG4gIHByZXZlbnRTbmFwcGluZygpIHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxTdGFydC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgIGlmIChzY3JvbGxlcikge1xyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuXyRkZXN0cm95Lm5leHQoKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVJZCA9IHRoaXMuX3VwZGF0ZUlkO1xyXG4gICAgaWYgKHVwZGF0ZUlkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodXBkYXRlSWQpO1xyXG4gICAgICB0aGlzLl91cGRhdGVJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc2VydmljZSkge1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLl90cmFja0JveCkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoISF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5zaGlmdCgpO1xyXG4gICAgICAgIGNvbXA/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGNsYXNzPVwibmd2bF9fc2NyZWVuLXJlYWRlclwiPlxyXG4gIHt7ICRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlIHwgYXN5bmMgfX1cclxuPC9kaXY+XHJcblxyXG48bmctcHJlcmVuZGVyLWNvbnRhaW5lciAjcHJlcmVuZGVyIFtib3VuZHNdPVwiKCRib3VuZHMgfCBhc3luYykhXCIgW2RpcmVjdGlvbl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIlxyXG4gIFtkeW5hbWljXT1cIigkZHluYW1pY1NpemUgfCBhc3luYykhXCIgW2RpdmlkZXNdPVwiKCRkaXZpZGVzIHwgYXN5bmMpIVwiIFtpc1ZlcnRpY2FsXT1cIigkaXNWZXJ0aWNhbCB8IGFzeW5jKSFcIlxyXG4gIFtpdGVtU2l6ZV09XCIoJGFjdHVhbEl0ZW1TaXplIHwgYXN5bmMpIVwiIFt0cmFja0J5XT1cIigkdHJhY2tCeSB8IGFzeW5jKSFcIiBbaXRlbVJlbmRlcmVyXT1cIigkaXRlbVJlbmRlcmVyIHwgYXN5bmMpIVwiXHJcbiAgW3N0YXJ0T2Zmc2V0XT1cIigkc3RhcnRPZmZzZXQgfCBhc3luYykhXCIgW2VuZE9mZnNldF09XCIoJGVuZE9mZnNldCB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJFbmFibGVkXT1cIihzY3JvbGxlci4kc2Nyb2xsYmFyU2hvdyB8IGFzeW5jKSFcIlxyXG4gIFtlbmFibGVkXT1cIigkcHJlcmVuZGVyRW5hYmxlZCB8IGFzeW5jKSFcIj48L25nLXByZXJlbmRlci1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiKCRzdGlja3lFbmFibGVkIHwgYXN5bmMpIVwiPlxyXG4gIDxkaXYgbG9jYWxlU2Vuc2l0aXZlIFtsYW5nVGV4dERpcl09XCIoJGxhbmdUZXh0RGlyIHwgYXN5bmMpIVwiICNzbmFwcGVkQ29udGFpbmVyIGNsYXNzPVwibmd2bF9fc25hcHBlZC1jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiKCRjbGFzc2VzIHwgYXN5bmMpXCI+XHJcbiAgICA8ZGl2ICNzbmFwcGVkIHBhcnQ9XCJzbmFwcGVkLWl0ZW1cIiBjbGFzcz1cIm5ndmxfX2xpc3Qtc25hcHBlclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICNzbmFwUmVuZGVyZXJDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctc2Nyb2xsZXIgI3Njcm9sbGVyIGNsYXNzPVwibmd2bF9fbGlzdC1zY3JvbGxlclwiIFtjbGFzc2VzXT1cIigkY2xhc3NlcyB8IGFzeW5jKSFcIlxyXG4gIFtzdGFydE9mZnNldF09XCIoJHN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtlbmRPZmZzZXRdPVwiKCRlbmRPZmZzZXQgfCBhc3luYykhXCJcclxuICBbYWxpZ25tZW50U3RhcnRPZmZzZXRdPVwiKCRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldCB8IGFzeW5jKSFcIlxyXG4gIFthbGlnbm1lbnRFbmRPZmZzZXRdPVwiKCRhbGlnbm1lbnRTY3JvbGxFbmRPZmZzZXQgfCBhc3luYykhXCIgW2RpcmVjdGlvbl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJUaHVtYlJlbmRlcmVyXT1cIigkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciB8IGFzeW5jKSFcIiBbaXNJbmZpbml0eV09XCIoJGlzSW5maW5pdHkgfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyVGhpY2tuZXNzXT1cIigkc2Nyb2xsYmFyVGhpY2tuZXNzIHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJUaHVtYlBhcmFtc109XCIoJHNjcm9sbGJhclRodW1iUGFyYW1zIHwgYXN5bmMpIVwiXHJcbiAgW2FuaW1hdGlvblBhcmFtc109XCIoJGFuaW1hdGlvblBhcmFtcyB8IGFzeW5jKSFcIiBbZm9jdXNlZEVsZW1lbnRdPVwiKCRmb2N1c2VkRWxlbWVudCB8IGFzeW5jKSFcIlxyXG4gIFtsb2FkaW5nXT1cIigkbG9hZGluZyB8IGFzeW5jKSFcIiBbb3ZlcnNjcm9sbEVuYWJsZWRdPVwiKCRvdmVyc2Nyb2xsRW5hYmxlZCB8IGFzeW5jKSFcIlxyXG4gIFtzbmFwcGluZ0Rpc3RhbmNlXT1cIigkc25hcHBpbmdEaXN0YW5jZSB8IGFzeW5jKSFcIiBbb3ZlcmxhcHBpbmdTY3JvbGxiYXJdPVwiKCRvdmVybGFwcGluZ1Njcm9sbGJhciB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJFbmFibGVkXT1cIigkYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZCB8IGFzeW5jKSFcIiBbc2Nyb2xsYmFySW50ZXJhY3RpdmVdPVwiKCRzY3JvbGxiYXJJbnRlcmFjdGl2ZSB8IGFzeW5jKSFcIlxyXG4gIFtzbmFwVG9JdGVtXT1cIigkc25hcFRvSXRlbSB8IGFzeW5jKSFcIiBbc25hcFRvSXRlbUFsaWduXT1cIigkc25hcFRvSXRlbUFsaWduIHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGJhck1pblNpemVdPVwiKCRzY3JvbGxiYXJNaW5TaXplIHwgYXN5bmMpIVwiIFtzY3JvbGxCZWhhdmlvcl09XCIoJHNjcm9sbEJlaGF2aW9yIHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGluZ1NldHRpbmdzXT1cIigkc2Nyb2xsaW5nU2V0dGluZ3MgfCBhc3luYykhXCIgW3Njcm9sbGluZ09uZUJ5T25lXT1cIigkc2Nyb2xsaW5nT25lQnlPbmUgfCBhc3luYykhXCJcclxuICBbbW90aW9uQmx1cl09XCIoJG1vdGlvbkJsdXIgfCBhc3luYykhXCIgW21heE1vdGlvbkJsdXJdPVwiKCRtYXhNb3Rpb25CbHVyIHwgYXN5bmMpIVwiXHJcbiAgW21vdGlvbkJsdXJFbmFibGVkXT1cIigkbW90aW9uQmx1ckVuYWJsZWQgfCBhc3luYykhXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAjcmVuZGVyZXJzQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG48L25nLXNjcm9sbGVyPiJdfQ==
3296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUM5RSxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUMvRSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUVqRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQ25ELE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUNyRyxtQ0FBbUMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFDL0ksZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFDN0gsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQzdILDZCQUE2QixFQUFFLDZDQUE2QyxFQUFFLHlCQUF5QixFQUFFLCtCQUErQixFQUN4SSxVQUFVLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUNqSSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUN6SSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSw2QkFBNkIsRUFDekksa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsaURBQWlELEVBQ3JJLG1DQUFtQyxFQUFFLDRDQUE0QyxFQUFFLHFDQUFxQyxFQUN4SCw4Q0FBOEMsRUFBRSxrREFBa0QsRUFBRSwwQkFBMEIsRUFDOUgsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLDRCQUE0QixFQUN0SSwyQkFBMkIsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQ3JILGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLDZCQUE2QixFQUNsRyw2QkFBNkIsR0FDOUIsTUFBTSxTQUFTLENBQUM7QUFhakIsT0FBTyxFQUNMLFVBQVUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxjQUFjLEdBQzVJLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjLEdBQzdHLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFFNUcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pILE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQUVuRTs7Ozs7OztHQU9HO0FBYUgsTUFBTSxPQUFPLHNCQUF1QixTQUFRLG1CQUFtQjtJQUNyRCxNQUFNLENBQUMsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUU1QixHQUFHLEdBQVcsc0JBQXNCLENBQUMsUUFBUSxDQUFDO0lBRXREOztPQUVHO0lBQ0gsSUFBSSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVyQixRQUFRLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFHeEMsVUFBVSxDQUFtQztJQUc3QyxpQkFBaUIsQ0FBK0I7SUFHaEQsaUJBQWlCLENBQStCO0lBR2hELGtCQUFrQixDQUFrQztJQUVwRCxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQXlDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXRELE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBeUMsU0FBUyxDQUFDLENBQUM7SUFDckUsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEQ7O09BRUc7SUFFSCxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7SUFFNUM7O09BRUc7SUFFSCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7SUFFL0M7O09BRUc7SUFFSCxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBRTdDOztPQUVHO0lBRUgsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFNLENBQUM7SUFFcEM7O09BRUc7SUFFSCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXNDLENBQUM7SUFFckU7O09BRUc7SUFFSCxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFFckQ7O09BRUc7SUFFSCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUUzQzs7T0FFRztJQUVILGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFOUM7O09BRUc7SUFFSCxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRXBDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDbkQsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEQsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVMsMkJBQTJCLENBQUMsQ0FBQztJQUNyRSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFMUUsNEJBQTRCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUNuRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztZQUM5RSxPQUFPLDJCQUEyQixDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFDSSxrQkFBa0IsQ0FBQyxDQUFTO1FBQzlCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9DLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxrQkFBa0IsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFakUsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVMsMEJBQTBCLENBQUMsQ0FBQztJQUNsRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEUsMEJBQTBCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUNqRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sMEJBQTBCLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUNJLGdCQUFnQixDQUFDLENBQVM7UUFDNUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBWSxDQUFDLENBQUMsQ0FBQztJQUV2RSx3QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBMEIsSUFBSSxDQUFDLENBQUM7SUFDbkUsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxGLGdDQUFnQyxHQUFHLENBQUMsQ0FBMEIsRUFBRSxFQUFFO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztZQUNsRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFDSSxzQkFBc0IsQ0FBQyxDQUEwQjtRQUNuRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksc0JBQXNCLEtBQUssT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXpFLHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFxQyxFQUFFLENBQUMsQ0FBQztJQUMxRSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFOUUsOEJBQThCLEdBQUcsQ0FBQyxDQUFxQyxFQUFFLEVBQUU7UUFDakYsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1lBQ2hGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUNJLG9CQUFvQixDQUFDLENBQXFDO1FBQzVELElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFckUsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBELGlCQUFpQixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDekMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztZQUNwRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFDSSxPQUFPLENBQUMsQ0FBVTtRQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBYSxDQUFDLENBQUMsQ0FBQztJQUV0RCxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3ZFLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxRSw0QkFBNEIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFO1FBQ3BELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7WUFDL0UsT0FBTyw0QkFBNEIsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksa0JBQWtCLENBQUMsQ0FBVTtRQUMvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksa0JBQWtCLEtBQUssT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFhLENBQUMsQ0FBQyxDQUFDO0lBRTVFLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBUyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNELGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWhFLHVCQUF1QixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDOUMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztZQUN6RSxPQUFPLHNCQUFzQixDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFDSSxhQUFhLENBQUMsQ0FBUztRQUN6QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBWSxDQUFDLENBQUMsQ0FBQztJQUVqRSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWhELGVBQWUsR0FBRyxDQUFDLENBQXlCLEVBQUUsRUFBRTtRQUN0RCxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN6QyxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUNWLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ3ZILEtBQUssR0FBRyxLQUFLLENBQUM7NEJBQ2QsTUFBTTt3QkFDUixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUNJLEtBQUssQ0FBQyxDQUF5QjtRQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksS0FBSyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQTRCLENBQUMsQ0FBQyxDQUFDO0lBRWpFLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsSUFBSSxDQUFDLENBQUM7SUFDdEQsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUQscUJBQXFCLEdBQUcsQ0FBQyxDQUF3QixFQUFFLEVBQUU7UUFDM0QsSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLENBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLENBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6SCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFXLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBVyxDQUFDLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDWCxNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO1lBQ3pGLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksV0FBVyxDQUFDLENBQXdCO1FBQ3RDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRW5ELGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUM3RCxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFOUUsSUFDSSxnQkFBZ0IsQ0FBQyxDQUEwQjtRQUM3QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RCxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVksRUFBRSxDQUFDLENBQUM7SUFDekMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFOUQsc0JBQXNCLEdBQUcsQ0FBQyxDQUFZLEVBQUUsRUFBRTtRQUNoRCxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFXLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBVyxDQUFDLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDWCxNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1lBQzNFLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUNJLFlBQVksQ0FBQyxDQUFZO1FBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJELGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzdELGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWhFLHVCQUF1QixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDL0MsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztZQUMxRSxPQUFPLHVCQUF1QixDQUFDO1FBQ2pDLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILElBQ0ksYUFBYSxDQUFDLENBQVU7UUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkQsaUJBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUseUJBQXlCLENBQUMsQ0FBQztJQUNqRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFcEUseUJBQXlCLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRTtRQUNqRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1lBQzVFLE9BQU8seUJBQXlCLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsSUFDSSxlQUFlLENBQUMsQ0FBVTtRQUM1QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksZUFBZSxLQUFLLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuRTs7O09BR0c7SUFDSCxJQUNJLElBQUksQ0FBQyxDQUFVO1FBQ2pCLE1BQU0sS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUFBLENBQUM7SUFFTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsc0JBQXNCLENBQUMsQ0FBQztJQUM1RCxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVoRSx1QkFBdUIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFO1FBQy9DLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7WUFDMUUsT0FBTyxzQkFBc0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLENBQVU7UUFDMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkQsa0NBQWtDLEdBQUcsSUFBSSxlQUFlLENBQVMsNkNBQTZDLENBQUMsQ0FBQztJQUNyRyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEcsMENBQTBDLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUNqRSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1lBQzVGLE9BQU8sNkNBQTZDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUNJLGdDQUFnQyxDQUFDLENBQVM7UUFDNUMsSUFBSSxJQUFJLENBQUMsa0NBQWtDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0QsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGdDQUFnQyxLQUFLLE9BQU8sSUFBSSxDQUFDLGtDQUFrQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RixtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBdUIsQ0FBQyxDQUFDLENBQUM7SUFDeEQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXhFLDJCQUEyQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDbEQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7WUFDN0YsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxJQUNJLGlCQUFpQixDQUFDLENBQXVCO1FBQzNDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBUSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxpQkFBaUIsS0FBSyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsaUJBQWlCLEdBQUcsSUFBSSxlQUFlLENBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQ3RELGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwRSx5QkFBeUIsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1FBQ2hELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsSUFDSSxlQUFlLENBQUMsQ0FBdUI7UUFDekMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFRLENBQUMsQ0FBQztRQUVsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFM0QsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsMkJBQTJCLENBQUMsQ0FBQztJQUNyRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFeEUsMkJBQTJCLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRTtRQUNuRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztZQUM5RSxPQUFPLDJCQUEyQixDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNILElBQ0ksaUJBQWlCLENBQUMsQ0FBVTtRQUM5QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRS9ELGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLHlCQUF5QixDQUFDLENBQUM7SUFDakUsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBFLHlCQUF5QixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDakQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7WUFDNUUsT0FBTyx5QkFBeUIsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNILElBQ0ksZUFBZSxDQUFDLENBQVU7UUFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbkU7OztPQUdHO0lBQ0gsSUFDSSxrQkFBa0IsQ0FBQyxDQUFVO1FBQy9CLE1BQU0sS0FBSyxDQUFDLHVGQUF1RixDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUdPLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLHlCQUF5QixDQUFDLENBQUM7SUFDbEUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXRFLDBCQUEwQixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDbEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7WUFDN0UsT0FBTyx5QkFBeUIsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksZ0JBQWdCLENBQUMsQ0FBVTtRQUM3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTdELHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFVLDZCQUE2QixDQUFDLENBQUM7SUFDMUUscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTlFLDhCQUE4QixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDdEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7WUFDakYsT0FBTyw2QkFBNkIsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksb0JBQW9CLENBQUMsQ0FBVTtRQUNqQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJFLHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFVLDZCQUE2QixDQUFDLENBQUM7SUFDMUUscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTlFLDhCQUE4QixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDdEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7WUFDakYsT0FBTyw2QkFBNkIsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksb0JBQW9CLENBQUMsQ0FBVTtRQUNqQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJFLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JFLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEUsd0JBQXdCLEdBQUcsQ0FBQyxDQUFpQixFQUFFLEVBQUU7UUFDdkQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1lBQzNFLE9BQU8sdUJBQXVCLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUNJLGNBQWMsQ0FBQyxDQUFpQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQU96RCxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsMEJBQTBCLENBQUMsQ0FBQztJQUMvRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFeEUsMkJBQTJCLEdBQUcsQ0FBQyxDQUFxQixFQUFzQixFQUFFO1FBQ2xGLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixNQUFNLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDeEYsS0FBSyxHQUFHLGFBQWEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztnQkFDMUYsT0FBTywwQkFBMEIsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztnQkFDL0UsT0FBTywwQkFBMEIsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztnQkFDdEYsT0FBTywwQkFBMEIsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztnQkFDdEYsT0FBTywwQkFBMEIsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxHQUFHLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztnQkFDckYsT0FBTywwQkFBMEIsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0VBQXdFLENBQUMsQ0FBQztnQkFDeEYsT0FBTywwQkFBMEIsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztZQUNyRixPQUFPLDBCQUEwQixDQUFDO1FBQ3BDLENBQUM7UUFDRCxPQUFPO1lBQ0wsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxlQUFlO1lBQzFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsSUFBSTtZQUNuRixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLFdBQVc7WUFDdEgsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxXQUFXO1lBQ3RILFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsVUFBVTtZQUNqSCxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSwwQkFBMEIsQ0FBQyxZQUFZO1NBQ3hFLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNILElBQ0ksaUJBQWlCLENBQUMsQ0FBcUI7UUFDekMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUvRCxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBQ3ZELGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWhFLHVCQUF1QixHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDM0MsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7WUFDMUYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLENBQXVCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZELFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTFELG9CQUFvQixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDNUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztZQUN2RSxPQUFPLG9CQUFvQixDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFDSSxVQUFVLENBQUMsQ0FBVTtRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVqRCxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBa0IsMEJBQTBCLENBQUMsQ0FBQztJQUMxRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFcEUseUJBQXlCLEdBQUcsQ0FBQyxDQUFrQixFQUFFLEVBQUU7UUFDekQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUVwRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7WUFDNUYsT0FBTywwQkFBMEIsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksZUFBZSxDQUFDLENBQWtCO1FBQ3BDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNELGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFtQix5QkFBeUIsQ0FBQyxDQUFDO0lBQzNFLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV0RSwwQkFBMEIsR0FBRyxDQUFDLENBQXlCLEVBQUUsRUFBRTtRQUNqRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0VBQXdFLENBQUMsQ0FBQztZQUN4RixPQUFPLHlCQUF5QixDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILElBQ0ksZ0JBQWdCLENBQUMsQ0FBbUI7UUFDdEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RCxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3RFLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV4RSwyQkFBMkIsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQy9DLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDOUUsT0FBTyw0QkFBNEIsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksaUJBQWlCLENBQUMsQ0FBVTtRQUM5QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRS9ELFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBWSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JELFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXhELG1CQUFtQixHQUFHLENBQUMsQ0FBWSxFQUFFLEVBQUU7UUFDN0MsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1lBQy9FLE9BQU8saUJBQWlCLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsSUFDSSxTQUFTLENBQUMsQ0FBWTtRQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUvQyxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsNkJBQTZCLENBQUMsQ0FBQztJQUMvRSxvQkFBb0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUUsNkJBQTZCLEdBQUcsQ0FBQyxDQUFnQixFQUFFLEVBQUU7UUFDM0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO1lBQ3pGLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksbUJBQW1CLENBQUMsQ0FBZ0I7UUFDdEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLG1CQUFtQixLQUFLLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuRSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQWdCLHNCQUFzQixDQUFDLENBQUM7SUFDbEUsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFaEUsdUJBQXVCLEdBQUcsQ0FBQyxDQUFnQixFQUFFLEVBQUU7UUFDckQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO1lBQ3RGLE9BQU8sc0JBQXNCLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7Ozs7OztPQU1HO0lBQ0gsSUFDSSxhQUFhLENBQUMsQ0FBZ0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkQsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFTLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBELGlCQUFpQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDeEMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUNuRSxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksT0FBTyxDQUFDLENBQVM7UUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFM0MsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFTLG1CQUFtQixDQUFDLENBQUM7SUFDckQsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFMUQsb0JBQW9CLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksVUFBVSxDQUFDLENBQVM7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFakQsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFTLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFaEUsdUJBQXVCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUM5QyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sdUJBQXVCLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLENBQVM7UUFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkQsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsMkJBQTJCLENBQUMsQ0FBQztJQUNyRSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFeEUsMkJBQTJCLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRTtRQUNuRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQzlFLE9BQU8sMkJBQTJCLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUNJLGlCQUFpQixDQUFDLENBQVU7UUFDOUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUvRCxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsd0JBQXdCLENBQUMsQ0FBQztJQUN6RSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFcEUseUJBQXlCLEdBQUcsQ0FBQyxDQUFtQixFQUFFLEVBQUU7UUFDMUQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7WUFDeEUsT0FBTyx3QkFBd0IsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDdEUsT0FBTyx3QkFBd0IsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztZQUM5RSxPQUFPLHdCQUF3QixDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztZQUMxRSxPQUFPLHdCQUF3QixDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFDM0UsT0FBTyx3QkFBd0IsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksZUFBZSxDQUFDLENBQW1CO1FBQ3JDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNELG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLDBCQUEwQixDQUFDLENBQUM7SUFDcEUsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXhFLDJCQUEyQixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDbkQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDOUUsT0FBTywwQkFBMEIsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksaUJBQWlCLENBQUMsQ0FBVTtRQUM5QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRS9ELDJCQUEyQixHQUFHLElBQUksZUFBZSxDQUFVLG1DQUFtQyxDQUFDLENBQUM7SUFDckYsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXhGLG1DQUFtQyxHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUU7UUFDM0QsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztZQUN0RixPQUFPLG1DQUFtQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOzs7OztPQUtHO0lBQ0gsSUFDSSx5QkFBeUIsQ0FBQyxDQUFVO1FBQ3RDLElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSx5QkFBeUIsS0FBSyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0UsY0FBYyxHQUFHLElBQUksZUFBZSxDQUErQixTQUFTLENBQUMsQ0FBQztJQUNuRSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU5RCxzQkFBc0IsR0FBRyxDQUFDLENBQW1CLEVBQUUsRUFBRTtRQUN2RCxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsa0JBQWtCLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzRixLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFDSSxZQUFZLENBQUMsQ0FBbUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksWUFBWSxLQUFLLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQXNCLENBQUMsQ0FBQyxDQUFDO0lBRXpFLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBNEIsRUFBRSxDQUFDLENBQUM7SUFDMUQsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFaEUsdUJBQXVCLEdBQUcsQ0FBQyxDQUE0QixFQUFFLEVBQUU7UUFDakUsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNOLEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLElBQUk7d0JBQ1AsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7d0JBQ3hDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO3dCQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDM0YsQ0FBQzt3QkFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNkLE1BQU07b0JBQ1IsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7WUFDNUYsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7Ozs7Ozs7Ozs7T0FXRztJQUNILElBQ0ksYUFBYSxDQUFDLENBQTRCO1FBQzVDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZELFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBUyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pELFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXRELGtCQUFrQixHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDdEMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1lBQzlGLE9BQU8saUJBQWlCLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxJQUNJLFFBQVEsQ0FBQyxDQUFzQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU1RCxxQkFBcUIsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUZBQWlGLENBQUMsQ0FBQztZQUNqRyxPQUFPLGlCQUFpQixDQUFDO1FBQzNCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILElBQ0ksV0FBVyxDQUFDLENBQXNCO1FBQ3BDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRW5ELGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hELFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTVELHFCQUFxQixHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDekMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8saUJBQWlCLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsSUFDSSxXQUFXLENBQUMsQ0FBc0I7UUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbkQsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFVLG9CQUFvQixDQUFDLENBQUM7SUFDeEQsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUQscUJBQXFCLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRTtRQUM3QyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILElBQ0ksV0FBVyxDQUFDLENBQVU7UUFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbkQsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFZLGlCQUFpQixDQUFDLENBQUM7SUFDckQsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFeEQsbUJBQW1CLEdBQUcsQ0FBQyxDQUFZLEVBQUUsRUFBRTtRQUM3QyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7WUFDdEYsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksU0FBUyxDQUFDLENBQVk7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0MsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWlCLHVCQUF1QixDQUFDLENBQUM7SUFDckUsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVsRSx3QkFBd0IsR0FBRyxDQUFDLENBQWlCLEVBQUUsRUFBRTtRQUN2RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDOUUsT0FBTyx1QkFBdUIsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksY0FBYyxDQUFDLENBQWlCO1FBQ2xDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXpELFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTFELG9CQUFvQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDM0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUN0RSxPQUFPLG1CQUFtQixDQUFDO1FBQzdCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsSUFDSSxVQUFVLENBQUMsQ0FBUztRQUN0QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVqRCxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsdUJBQXVCLENBQUMsQ0FBQztJQUM1RCxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVoRSx1QkFBdUIsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1lBQ3pFLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQztRQUNoQyxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzNDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxJQUNJLGFBQWEsQ0FBQyxDQUFTO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkQsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWlCLHVCQUF1QixDQUFDLENBQUM7SUFDckUsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVsRSx3QkFBd0IsR0FBRyxDQUFDLENBQWlCLEVBQUUsRUFBRTtRQUN2RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssZUFBZSxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELGVBQWUsQ0FBQyxRQUFRLFNBQVMsZUFBZSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDcEksT0FBTyx1QkFBdUIsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsSUFDSSxjQUFjLENBQUMsQ0FBaUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLGNBQWMsS0FBSyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFekQsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWlCLHdCQUF3QixDQUFDLENBQUM7SUFDdEUsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVsRSx3QkFBd0IsR0FBRyxDQUFDLENBQWlCLEVBQUUsRUFBRTtRQUN2RCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssZUFBZSxDQUFDLGNBQWMsSUFBSSxDQUFDLEtBQUssZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELGVBQWUsQ0FBQyxRQUFRLFNBQVMsZUFBZSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDcEksT0FBTyx3QkFBd0IsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7Ozs7O09BTUc7SUFDSCxJQUNJLGNBQWMsQ0FBQyxDQUFpQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVqRTs7O09BR0c7SUFDSCxJQUNJLGtCQUFrQixDQUFDLENBQU07UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5RkFBeUYsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFBQSxDQUFDO0lBRU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFnQix1QkFBdUIsQ0FBQyxDQUFDO0lBQ25FLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWhFLHVCQUF1QixHQUFHLENBQUMsQ0FBZ0IsRUFBRSxFQUFFO1FBQ3JELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssY0FBYyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxrRkFBa0YsQ0FBQyxDQUFDO1lBQ2xHLE9BQU8sdUJBQXVCLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxJQUNJLGFBQWEsQ0FBQyxDQUFnQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV2RCxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQVMsc0JBQXNCLENBQUMsQ0FBQztJQUNyRCxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwRCxpQkFBaUIsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7WUFDbkUsT0FBTyxzQkFBc0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILElBQ0ksT0FBTyxDQUFDLENBQVM7UUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFM0MscUJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVMsNkJBQTZCLENBQUMsQ0FBQztJQUN4RSxvQkFBb0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUUsNkJBQTZCLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUNwRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1lBQy9FLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxJQUNjLG1CQUFtQixDQUFDLENBQVM7UUFDekMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFjLG1CQUFtQixLQUFLLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RSw4QkFBOEIsR0FBRyxJQUFJLGVBQWUsQ0FBUyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzFGLDZCQUE2QixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVyRixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQWdCLHFCQUFxQixDQUFDLENBQUM7SUFDL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUQscUJBQXFCLEdBQUcsQ0FBQyxDQUFnQixFQUFFLEVBQUU7UUFDbkQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztZQUN2RSxPQUFPLHFCQUFxQixDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILElBQ0ksV0FBVyxDQUFDLENBQWdCO1FBQzlCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRW5ELGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBRWpELGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBRS9DLG1CQUFtQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRW5ELG9CQUFvQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBRXJELHlCQUF5QixHQUFZLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0lBRXRFLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6RCxJQUFjLFVBQVU7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNDLElBQWMsVUFBVTtRQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVPLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0QsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFakQsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVksSUFBSSxDQUFDLENBQUM7SUFDdEQsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV6RCxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQStCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTNDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU3RCxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBRWhFLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFZLEVBQUUsQ0FBQyxDQUFDO0lBRXhELGtCQUFrQixHQUFzRCxFQUFFLENBQUM7SUFFM0UseUJBQXlCLEdBQXNELEVBQUUsQ0FBQztJQUVsRixRQUFRLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTyxHQUE2QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRW5FLHdCQUF3QixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdFLHVCQUF1QixHQUF3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFOUYsaUJBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLGdCQUFnQixHQUEwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUYsSUFBYyxlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJFLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hELGVBQWUsR0FBdUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JGLElBQWMsY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuRSxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNuRCxrQkFBa0IsR0FBdUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNGLElBQWMsaUJBQWlCLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXpFLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ25ELGtCQUFrQixHQUF1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0YsSUFBYyxpQkFBaUIsS0FBSyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFekUsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBRTdDLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBZSxJQUFJLENBQUMsQ0FBQztJQUV2RCxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFMUQsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBRXJELGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUVwRCxnQ0FBZ0MsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUVsRSw4QkFBOEIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUVoRSx5QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCx3QkFBd0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0UsdUJBQXVCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXZFLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUM3QyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVuRCxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFL0MseUJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFaEUsdUJBQXVCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFOUQsNEJBQTRCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWpGLDBCQUEwQixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFELHlCQUF5QixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU3RSw4QkFBOEIsR0FBRyxHQUFHLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7UUFDbEssSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUU3RixLQUFLLE1BQU0sSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUM1RixDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDM0MsSUFBSSxjQUFjLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN2QixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUU1RixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsUUFBUSxDQUFDO29CQUV4TyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFDaEcsZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsS0FBSyxHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsRUFDNUYsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFFMUMsSUFBSSxLQUFhLEVBQUUsR0FBVyxFQUFFLE1BQWMsQ0FBQztvQkFDL0MsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDZixLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7d0JBQ2xDLEdBQUcsR0FBRyxPQUFPLENBQUM7d0JBQ2QsTUFBTSxHQUFHLE1BQU0sQ0FBQzt3QkFDaEIsSUFBSSxXQUFXLEtBQUssY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUN2QyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsTUFBTSxNQUFNLEtBQUssSUFBSSxNQUFNLE1BQU0sS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLE1BQU0sYUFBYSxJQUFJLEdBQUcsR0FBRyxLQUFLLE1BQU0sYUFBYSxRQUFRLENBQUM7d0JBQ3pLLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxhQUFhLEdBQUcsR0FBRyxLQUFLLFFBQVEsTUFBTSxNQUFNLEtBQUssSUFBSSxNQUFNLE1BQU0sS0FBSyxRQUFRLEtBQUssUUFBUSxLQUFLLElBQUksR0FBRyxHQUFHLEtBQUssTUFBTSxDQUFDO3dCQUN6SixDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNkLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQ1IsTUFBTSxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7d0JBQ2hDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFdBQVcsS0FBSyxRQUFRLEtBQUssSUFBSSxNQUFNLFFBQVEsTUFBTSxZQUFZLEtBQUssUUFBUSxDQUFDO29CQUNsSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVNLHNCQUFzQixHQUEwQixJQUFJLENBQUM7SUFFckQsU0FBUyxHQUFHLENBQUMsT0FBb0IsRUFBRSxRQUFnQixFQUFFLFFBQXdCLGVBQWUsQ0FBQyxNQUFNLEVBQ3pHLFdBQTJCLGFBQWEsRUFBRSxFQUFFO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDekMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFDbkksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQzdCLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUMxQyxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUN2RSxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUMxRCxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQzdCLFFBQVEsS0FBSyxFQUFFLENBQUM7Z0JBQ2QsS0FBSyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsTUFBTSxDQUFDLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDaEQsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hELE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUM1QixNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDcEYsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hELE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN6QixNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUMvRSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEQsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQztnQkFDMUIsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxNQUFNLEdBQW9CO29CQUM5QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJO29CQUNoRyxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUs7b0JBQ3JELFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYztpQkFDbkosQ0FBQztnQkFDRixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRU8sV0FBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7SUFFbEU7O09BRUc7SUFDSyxtQkFBbUIsR0FBOEMsMEJBQTBCLENBQUM7SUFDcEcsSUFBYyxrQkFBa0IsS0FBSyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFFdkU7O09BRUc7SUFDSyxjQUFjLEdBQTBCLFFBQVEsQ0FBQztJQUV6RDs7T0FFRztJQUNLLFNBQVMsR0FBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVELFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWxELFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztJQUN4QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU3QyxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztJQUN2QyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFdEUsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRXBELFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQ0FBQztJQUN0QyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV4QyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUM1QixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwQyxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUMzQixXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxRCxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBQ3BDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU1RSx1QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNuRCxzQkFBc0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFaEYsU0FBUyxDQUFxQjtJQUU5QixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFaEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUVuQixZQUFZLEdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFbEMsSUFBYyxRQUFRO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFjLGFBQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLElBQUksS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN4QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwRCxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN2QixRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUxRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1Isc0JBQXNCLENBQUMsUUFBUSxHQUFHLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLGdCQUFnQjtZQUMvRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBRTNDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRW5ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ3BDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzQyxhQUFhLENBQUMsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxlQUFlLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsV0FBVyxDQUFDLElBQUksQ0FDZCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZELG9CQUFvQixDQUFDLElBQUksQ0FDdkIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUMvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pCLEVBQ0MscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUMvQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFOUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN0QixNQUFNLEdBQUcsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9GLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdEIsTUFBTSxHQUFHLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvRixJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUN2QixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUUvQixNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsRUFDbkQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV0QyxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4QyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUM5QyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQy9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakIsRUFDQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQ2hELGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUyxDQUFDLGVBQWUsQ0FBQyxDQUNqRCxFQUNELGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUyxDQUFDLGNBQWMsQ0FBQyxDQUNoRCxDQUFDO1FBRUosa0JBQWtCLENBQUMsSUFBSSxDQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsY0FBYyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsUUFBUSxDQUFDLElBQUksQ0FDWCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBRTNELElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEUsRUFDQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RFLEVBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0RSxFQUNELGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQ3JELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLENBQ3ZCLEVBQ0QsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDakQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztRQUVKLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0UsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFO1lBQ2hELElBQUssQ0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsR0FBRyxNQUFNLEVBQ3pELE1BQU0sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO2dCQUNqSCxPQUFPLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0UsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFO1lBQ2hELElBQUssQ0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsR0FBRyxNQUFNLEVBQ3pELE1BQU0sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO2dCQUNqSCxPQUFPLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUNoRCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFFL0MsYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNwSCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRTtZQUMxRCxJQUFLLENBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEdBQUcsTUFBTSxFQUN6RCxNQUFNLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztnQkFDakgsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFDMUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUNuRCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxDQUN2QixDQUFDO1FBRUosSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQyxhQUFhLENBQUMsRUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBb0IsRUFBRSxVQUFtQixFQUFFLEVBQUU7WUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUssRUFDNUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDbEUsWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDM0UsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLGlCQUFpQixJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDaEMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7d0JBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDekIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLEtBQUssQ0FBQyxJQUFJLENBQ1IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUM1QixTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbEIsT0FBTyxTQUFTLENBQWdCLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQzNELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDWixRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDZCxLQUFLLFlBQVk7d0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFDckIsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssVUFBVTt3QkFDYixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFDcEIsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssYUFBYTt3QkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFDckIsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssWUFBWTt3QkFDZixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFDcEIsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQzt3QkFDRCxNQUFNO2dCQUNWLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNyRCxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQzlCLEVBQ0MsVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ3JFLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQzlCLEVBQ0QsV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3ZFLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQzlCLENBQUM7UUFFSixTQUFTLENBQWdCLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQy9DLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEVBQzlCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNaLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDMUQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFDeEIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUNyQixTQUFTLENBQUMsV0FBVyxDQUFDLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1gsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzNELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQzlCLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWixPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FDN0IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUMsT0FBTyxDQUFDLENBQzNCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxXQUFXLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNmLGFBQWEsR0FBRyxVQUFVLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQzFCLGdCQUFnQixHQUFHLENBQUMsT0FBa0MsRUFBRSxFQUFFO1lBQ3hELElBQUksc0NBQXNDLEdBQUcsMEJBQTBCLEVBQ3JFLGdDQUFnQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxrQkFBa0IsRUFDeEUscUJBQXFCLEdBQUcsT0FBTyxFQUFFLHFCQUFxQixJQUFJLDJCQUEyQixDQUFDO1lBQ3hGLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDbEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixzQ0FBc0MsR0FBRywwQkFBMEIsQ0FBQztnQkFDcEUsZ0NBQWdDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNaLElBQUksQ0FBQyxDQUFDLHNDQUFzQyxLQUFLLDBCQUEwQixDQUFDLElBQUksQ0FBQyxzQ0FBc0MsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDN0gsQ0FBQyxnQ0FBZ0MsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7d0JBQ3pELElBQUksQ0FBQyxLQUFLLDBCQUEwQixFQUFFLENBQUM7NEJBQ3JDLHNDQUFzQyxHQUFHLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQzt3QkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLENBQUM7b0JBQ0QsSUFBSSxzQ0FBc0MsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDakQsSUFBSSxnQ0FBZ0MsR0FBRyxxQkFBcUIsRUFBRSxDQUFDOzRCQUM3RCxnQ0FBZ0MsRUFBRSxDQUFDOzRCQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDOUIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25CLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxzQ0FBc0MsR0FBRyxDQUFDLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLG9CQUFvQixFQUFFLENBQ3ZCLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQyxDQUFDO1FBQ0osTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQztZQUNoRCxpQkFBaUIsRUFBRSxrQkFBa0I7WUFDckMscUJBQXFCLEVBQUUsMkJBQTJCO1NBQ25ELENBQUMsRUFDQSw0QkFBNEIsR0FBRyxnQkFBZ0IsQ0FBQztZQUM5QyxpQkFBaUIsRUFBRSxtQ0FBbUM7WUFDdEQscUJBQXFCLEVBQUUsNENBQTRDO1NBQ3BFLENBQUMsRUFDRiw2QkFBNkIsR0FBRyxnQkFBZ0IsQ0FBQztZQUMvQyxpQkFBaUIsRUFBRSxtQ0FBbUM7WUFDdEQscUJBQXFCLEVBQUUsNENBQTRDO1NBQ3BFLENBQUMsRUFDRiw4QkFBOEIsR0FBRyxnQkFBZ0IsQ0FBQztZQUNoRCxpQkFBaUIsRUFBRSxxQ0FBcUM7WUFDeEQscUJBQXFCLEVBQUUsOENBQThDO1NBQ3RFLENBQUMsRUFDRixjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0QixFQUNELFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUN4QixZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFDaEMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxFQUNsRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLEVBQzlELG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFDOUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFdkIsYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckksU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFDdEUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUU7WUFDakgsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDckYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM1QixNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQ3pELE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzdELENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDeEMsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNOLGtCQUFrQixHQUFHLEtBQUssQ0FBQztvQkFDM0IsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO3dCQUMzQixJQUFJLENBQUMsaUJBQWlCLElBQUksZUFBZSxFQUFFLENBQUM7NEJBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzt3QkFDcEMsQ0FBQzt3QkFDRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDbEQsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzs0QkFDeEIsaUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs0QkFDbkMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBQ2xDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUM5QixDQUFDO3dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN6QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDbkQsSUFBSSxrQkFBa0IsRUFBRSxDQUFDOzRCQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQ0FDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0NBQ3JCLGtCQUFtQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ3JDLENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUN2QixrQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDNUIsQ0FBQzt3QkFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkIsQ0FBQztvQkFDRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbkQsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7d0JBQ2xDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDckIsa0JBQW1CLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDckMsQ0FBQzt3QkFDRCxPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7NEJBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDOzRCQUNsQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQ0FDdkIsa0JBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQzVCLENBQUM7NEJBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7NEJBQzFCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDOzRCQUNsRCxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dDQUN4QixpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dDQUNsQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs0QkFDOUIsQ0FBQzs0QkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDekIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDO29CQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUN2QixrQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDNUIsQ0FBQztvQkFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQ2xELElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0JBQ3hCLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ2xDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUM5QixDQUFDO29CQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixrQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDVixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDbEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7d0JBQ2xELElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7NEJBQ3hCLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7d0JBQ3JDLENBQUM7d0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzFCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUN4QyxvQkFBb0IsRUFBRSxFQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQzFCLElBQUksaUJBQWlCLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUN0QyxDQUFDO3lCQUFNLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDcEMsQ0FBQztvQkFDRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzt3QkFDeEIsaUJBQWlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDbEMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzlCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ3ZCLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDM0IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLEtBQUssQ0FBQyxJQUFJLENBQ1IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUM1QixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUM5QyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFDcEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUN4QyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsRUFDcEQsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsRUFDckQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQ3JELENBQUM7UUFFSixrQkFBa0IsQ0FBQyxJQUFJLENBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxnQkFBZ0IsQ0FBQyxJQUFJLENBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsV0FBVyxDQUFDLElBQUksQ0FDZCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLFlBQVksQ0FBQyxJQUFJLENBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxpQkFBaUIsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxrQkFBa0IsQ0FBQyxJQUFJLENBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGdCQUFnQixDQUFDLElBQUksQ0FDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxjQUFjLENBQUMsSUFBSSxDQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1Asb0JBQW9CLEVBQUUsRUFDdEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUN0QyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGlCQUFpQixDQUFDLElBQUksQ0FDcEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLG9CQUFvQixFQUFFLEVBQ3RCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsZ0JBQWdCLENBQUMsSUFBSSxDQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLFFBQVEsQ0FBQyxJQUFJLENBQ1gsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLFFBQVEsQ0FBQyxJQUFJLENBQ1gsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzVELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUN0QywrQkFBK0IsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsWUFBWSxFQUFFLEVBQ3RGLDZCQUE2QixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUUsRUFDbEYsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUNqRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pCLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQ2pELFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxFQUNELGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxFQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUM5QixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQ3hDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUNwQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FDdkQsRUFDRCwwQkFBMEIsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQzVELGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQ3pFLEVBQ0QsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQ3RDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUNwQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFDaEMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQyxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNwQyxFQUNELGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQzdELG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ3BDLEVBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQ2hDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUNwQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQ2hELGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFDM0MsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBRTlDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLFdBQVcsS0FBSyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN2RSxNQUFNLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1lBQ2hHLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsV0FBVyxDQUFDLElBQUksQ0FDZCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLFlBQVksQ0FBQyxJQUFJLENBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxhQUFhLENBQUMsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzNDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQzFCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxjQUFjLENBQUMsSUFBSSxDQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsYUFBYSxDQUFDLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFGLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQ3RDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU8sQ0FBQyxDQUN2RixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE9BQU8sQ0FBQyxJQUFJLENBQ1YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQixPQUFPLGFBQWEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hGLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Z0JBQzVELE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixpQkFBaUIsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDckUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFDL0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDckUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBQ0QsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQy9ELE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFlLENBQUM7WUFFNUMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUYsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ1osV0FBVyxHQUFHLFNBQVMsQ0FBQztvQkFDMUIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksV0FBVyxFQUFFLENBQUM7NEJBQ2hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUM1QixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1lBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsU0FBUztnQkFDWCxDQUFDO2dCQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUVELE1BQU0sb0JBQW9CLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFL0YsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3RDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxXQUFXLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxHQUFnQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztZQUN2RCxlQUFlLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEgsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsY0FBYyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztnQkFDaEMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ1IsRUFBVSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1lBQ2pFLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztnQkFDL0IsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ1IsRUFBVSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1lBQzNELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNSLEVBQVUsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGVBQWUsQ0FBQyxJQUFJLENBQ2xCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDdEksQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ3ZHLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNyRyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBRTNELHNCQUFzQixDQUFDLElBQUksQ0FDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO2dCQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUN6QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGlCQUFpQixDQUFDLElBQUksQ0FDcEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDaEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE9BQU8sOEJBQThCLENBQUMsSUFBSSxDQUN4QyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQ1gsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQzFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNoQixTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFDRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FDaEQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNoQixTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQzFCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsUUFBUSxDQUFDLElBQUksQ0FDWCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1Asb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDZixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLGdCQUFnQixHQUFXLENBQUMsQ0FBQyxFQUFFLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFMUQsU0FBUyxDQUFDLElBQUksQ0FDWixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNwQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQzNFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BT2YsRUFBRSxFQUFFO1lBQ0gsTUFBTSxFQUNKLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQzlHLFdBQVcsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFDckgsZUFBZSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsR0FDdkUsR0FBRyxNQUFNLENBQUM7WUFDWCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsS0FBSyxZQUFZLENBQUM7WUFDdkQsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN6QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFDNUosVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxZQUFZLElBQUksV0FBVyxJQUFJLGNBQWMsRUFDakYsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUNqRSxpQkFBaUIsR0FBRyxVQUFVLElBQUksQ0FBQyxVQUFVLEVBQzdDLGFBQWEsR0FBRyxDQUFDLFVBQVUsSUFBSSxrQkFBa0IsSUFBSSxjQUFjLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMvQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUNoQyxpQkFBaUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUMzSixJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUM3RSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUN2RCxnQkFBZ0IsR0FBRyxDQUFDLEVBQ3BCLFlBQTBDLENBQUM7b0JBRTdDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUM5QixJQUFJLEdBQXVFO3dCQUN6RSxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGFBQWE7d0JBQzVILFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLHlCQUF5Qjt3QkFDcEgsVUFBVSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsYUFBYTtxQkFDckQsQ0FBQztvQkFFSixJQUFJLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDM0MsTUFBTSxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsR0FDbEgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7d0JBQ2pKLFlBQVksR0FBRyxzQkFBc0IsQ0FBQzt3QkFDdEMsU0FBUyxHQUFHLG9CQUFvQixDQUFDO3dCQUNqQyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQzt3QkFFckMsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDakUsTUFBTSxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsR0FDbEgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDbk0sWUFBWSxHQUFHLHNCQUFzQixDQUFDOzRCQUN0QyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7NEJBQ2pDLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO3dCQUN2QyxDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDbEwsWUFBWSxHQUFHLHNCQUFzQixDQUFDO3dCQUN0QyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7d0JBQ2hDLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO3dCQUVyQyxJQUFJLENBQUMsQ0FBQyxhQUFhLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUNqRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFDeEssRUFBRSxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUM3SSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7NEJBQ3RDLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQzs0QkFDaEMsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7d0JBQ3ZDLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztvQkFFL0IsUUFBUSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO29CQUU5QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFFakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDO29CQUV4QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFFNUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUVqRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRWhCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFFdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO3dCQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QixDQUFDO29CQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUNoQyx5QkFBeUIsR0FBRyxnQkFBZ0IsR0FBRyxLQUFLLEVBQ3BELGdDQUFnQyxHQUFHLHlCQUF5QixFQUM1RCw2QkFBNkIsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUV4RyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO3dCQUNuQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDL0IsQ0FBQztvQkFFRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztvQkFFakMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBRXZCLGNBQWMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO29CQUVyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDOzRCQUMvRSxDQUFDLGlCQUFpQixJQUFJLGlCQUFpQixJQUFJLCtCQUErQixDQUFDLEVBQUUsQ0FBQzs0QkFDOUUsSUFBSSxpQkFBaUIsS0FBSyxnQ0FBZ0MsRUFBRSxDQUFDO2dDQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dDQUU1QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dDQUNoRCxDQUFDO2dDQUNELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO2dDQUMzQixNQUFNLE1BQU0sR0FBb0I7b0NBQzlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVO29DQUM1RCxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7b0NBQ3JNLFFBQVEsRUFBRSxhQUFhLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWTtpQ0FDakgsQ0FBQztnQ0FDRixNQUFNLFdBQVcsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0NBQ2pELElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0NBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO2dDQUNsQyxDQUFDO3FDQUFNLENBQUM7b0NBQ04sUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0NBQzVDLENBQUM7Z0NBQ0QsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUM3QixJQUFJLFVBQVUsRUFBRSxDQUFDO29DQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQ0FDcEgsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELE9BQU87d0JBQ1QsQ0FBQzt3QkFFRCxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDOzRCQUNqRyxDQUFDLHlCQUF5QixHQUFHLCtCQUErQixJQUFJLDZCQUE2QixDQUFDOzRCQUM5RixDQUFDLGdDQUFnQyxJQUFJLHlCQUF5QixHQUFHLCtCQUErQixDQUFDLEVBQUUsQ0FBQzs0QkFDcEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFFNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7Z0NBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQ0FDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDOzRCQUN2QyxDQUFDOzRCQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQzNDLENBQUM7NEJBQ0QsTUFBTSxNQUFNLEdBQW9CO2dDQUM5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSw2QkFBNkI7Z0NBQzVFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLO2dDQUN4TixRQUFRLEVBQUUsYUFBYSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZOzZCQUNqSSxDQUFDOzRCQUNGLE1BQU0sV0FBVyxHQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDakQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7NEJBQ2xDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDNUMsQ0FBQzs0QkFDRCxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzdCLElBQUksVUFBVSxFQUFFLENBQUM7Z0NBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzRCQUNwSCxDQUFDOzRCQUNELE9BQU87d0JBQ1QsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksVUFBVSxLQUFLLHlCQUF5Qjt3QkFDMUMsQ0FBQyxDQUFDLHlCQUF5QixJQUFJLENBQUMsSUFBSSx5QkFBeUIsR0FBRyw2QkFBNkIsQ0FBQzs0QkFDNUYsQ0FBQyxVQUFVLEtBQUssNkJBQTZCLElBQUksaUJBQWlCLEtBQUsseUJBQXlCLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ3ZHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBRTVCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ2hELENBQUM7d0JBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQzNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixDQUFDO3dCQUNELE1BQU0sTUFBTSxHQUFvQjs0QkFDOUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVOzRCQUNwRyxVQUFVLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO3lCQUNwRCxDQUFDO3dCQUNGLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzFCLElBQUksVUFBVSxFQUFFLENBQUM7NEJBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUNwSCxDQUFDO3dCQUNELE9BQU87b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNwSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLElBQUksU0FBUyxHQUEyQixFQUFFLENBQUM7UUFDM0MsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsa0RBQWtELENBQUMsQ0FBQztRQUNoRyxTQUFTLENBQUMsSUFBSSxDQUNaLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE9BQU8sYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVc7Z0JBQ3ZLLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxXQUFXO2dCQUNwSSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsVUFBVTtnQkFDN0csK0JBQStCLEVBQUUsNkJBQTZCLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQ2hHLENBQUMsQ0FBQyxJQUFJLENBQ0wsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUNySixXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQ2xJLHlCQUF5QixFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsOEJBQThCLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUNoSSxFQUFFLEVBQUU7Z0JBQ0gsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFJLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDeEIsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDcEIsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDcEIsQ0FBQztnQkFDRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLElBQUksMEJBQTBCLENBQUMsWUFBWSxFQUN6RyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsSUFBSSxDQUFDLEVBQ3hELFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUMzQyxrQkFBa0IsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxhQUFhLElBQUksQ0FBQyxXQUFXO29CQUMzSixDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLGlEQUFpRCxDQUFDLENBQUM7Z0JBQ25GLElBQUksbUJBQW1CLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO3dCQUN2QixlQUFlLENBQUMsT0FBTyxDQUFDOzRCQUN0QixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTyxFQUFFLFVBQVUsRUFBRSxVQUFXLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXOzRCQUMzSyxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGFBQWE7NEJBQy9JLFVBQVUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYTt5QkFDOUksQ0FBQyxDQUFDO3dCQUNILE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzVCLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUM7d0JBQ0wsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVzt3QkFDM0ssV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxhQUFhO3dCQUMvSSxVQUFVLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWE7cUJBQzlJLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUMsYUFBYSxDQUFDLEVBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixFQUNDLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDekMsRUFDRCxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVMsQ0FBQyxVQUFVLENBQUMsQ0FDNUMsRUFDRCxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNsRCxDQUFDO1FBRUosTUFBTSxhQUFhLEdBQUcsQ0FBQyxhQUFzQixLQUFLLEVBQUUsRUFBRTtZQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDekMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFDakMsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQ3BFLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztnQkFFaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLFNBQVMsQ0FBQyxJQUFJLENBQ1osU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUMxRyxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ2pFLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7NEJBQ3BDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzFDLENBQUM7d0JBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUNsQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMxQyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsU0FBUyxDQUFDLElBQUksQ0FDWixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2YsYUFBYSxHQUFHLFVBQVUsQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDMUcsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLFNBQVMsQ0FBQyxJQUFJLENBQ1osU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2YsYUFBYSxHQUFHLFVBQVUsQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDMUcsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQzlCLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUU3QyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRCxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxBQUFELEVBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQzdFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUN0QixNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDVCxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGlCQUFpQixDQUFDLElBQUksQ0FDcEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUN2RSxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsZUFBZSxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDL0UsTUFBTSxhQUFhLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsYUFBYSxJQUFJLHdCQUF3QixFQUFFLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFOUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDO1lBRUQsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFeEMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDeEIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBRWxDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFDeEcsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQkFFL0UsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDaEIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxFQUMzRyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFDakUsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFDckMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQzNGLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQzNGLElBQUksR0FBc0U7NEJBQ3hFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVE7NEJBQ3pDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVc7NEJBQzNILFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTs0QkFDakcsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDaEYsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlOzRCQUNsRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLHlCQUF5QixFQUFFLElBQUksQ0FBQyx5QkFBeUI7eUJBQzdHLENBQUM7d0JBRUosSUFBSSxVQUFVLEdBQUcsZUFBZSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7NEJBQ2pFLGFBQWEsQ0FBQyxDQUFDOzRCQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBRTFELElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ3RCLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZGLENBQUM7d0JBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFFNUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ2hELEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTs0QkFDcEcsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO3lCQUMxSCxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO3dCQUVwQyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUVoRixpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQzt3QkFFdkQsaUJBQWlCLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDO3dCQUVsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7d0JBRXhDLElBQUksZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQzt3QkFFM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzt3QkFFdEQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUVqRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBRWhCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFFdkIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7d0JBRWpDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUU1SyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUN0QixPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2RixDQUFDO3dCQUNELE1BQU0sVUFBVSxHQUFHLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQzs0QkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQzs0QkFDNUIsTUFBTSxNQUFNLEdBQW9CO2dDQUM5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGdCQUFrQztnQ0FDdkcsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUs7NkJBQ2pFLENBQUM7NEJBQ0YsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQ3RDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO29DQUNuQixFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRO29DQUN0QyxlQUFlLEVBQUUsYUFBYSxHQUFHLHdCQUF3QixFQUFFLEVBQUU7aUNBQzlELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckIsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7NEJBQ3pDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25GLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQzVELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFDN0gsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7NEJBQ3pDLElBQUksVUFBVSxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7NEJBRWxDLElBQUksVUFBVSxFQUFFLENBQUM7Z0NBQ2YsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQ0FDZixRQUFRLGVBQWUsRUFBRSxDQUFDO3dDQUN4QixLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7NENBQzdCLFVBQVUsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDOzRDQUM1QixNQUFNO3dDQUNSLENBQUM7b0NBQ0gsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7NEJBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxFQUMzRyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFDekUsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFDckMsYUFBYSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxFQUM3RixnQkFBZ0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFDNUYsSUFBSSxHQUFzRTtnQ0FDeEUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUTtnQ0FDekMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVztnQ0FDM0gsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dDQUNqRyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO2dDQUM5RSxVQUFVLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFO2dDQUM5RSx5QkFBeUIsRUFBRSxJQUFJLENBQUMseUJBQXlCOzZCQUMxRCxDQUFDOzRCQUVKLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7NEJBRTVCLE1BQU0sWUFBWSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNoRCxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUU7Z0NBQ3BHLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQ0FDM0UsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFOzZCQUM3QyxDQUFDLENBQUM7NEJBRUwsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFFakYsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQzs0QkFFNUYsaUJBQWlCLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7NEJBRXZELGlCQUFpQixDQUFDLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQzs0QkFFbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDOzRCQUV4QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDOzRCQUV0RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBRWpELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFFaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDOzRCQUV2QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQzs0QkFFakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFFeEMsTUFBTSxNQUFNLEdBQW9CO2dDQUM5QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLO2dDQUNsRixRQUFRLEVBQUUsZ0JBQWtDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSzs2QkFDbkcsQ0FBQzs0QkFDRixpQkFBaUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDdEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNwRSxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUF1QixDQUFDLENBQUM7Z0JBQ3RELE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLFlBQVksR0FBRyxNQUFvRCxDQUFDO1lBQzFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDakIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRXpDLGFBQWEsQ0FBQyxJQUFJLENBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLE9BQU8sQ0FBQyxJQUFJLENBQ1YsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksR0FBVSxFQUFFLEtBQUssRUFBRSxLQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDN0IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksc0JBQXNCLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdkYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pFLENBQUMsc0JBQXNCLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLHNCQUFzQixHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3RyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksc0JBQXNCLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLHNCQUFzQixFQUFFLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxZQUFZLENBQUMsSUFBSSxDQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsU0FBUyxDQUFDLElBQUksQ0FDWixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzVHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLGFBQWEsQ0FBQyxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQ2pHLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUN0QixLQUFLLE1BQU0sRUFBRSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUMvQixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLElBQUksUUFBUSxFQUFFLFFBQVEsSUFBSSxRQUFRLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMzRSxNQUFNLEtBQUssQ0FBQyxnTkFBZ04sQ0FBQyxDQUFDO2dCQUNoTyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxhQUFhLENBQUMsQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckUsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3RELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlFLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sU0FBUyxHQUFjLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxLQUFLLElBQUksQ0FBQzt3QkFDbkcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNqQixTQUFTO3dCQUNYLENBQUM7d0JBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDckIsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsSixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxpQkFBaUIsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLG9CQUFvQixFQUFFLEVBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBTSxHQUFHLEtBQUs7UUFDbEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDekMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDdEMsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUNyQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQ2hDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLEVBQy9GLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsRUFDNUUsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sV0FBVyxHQUFHLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxhQUFhLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztnQkFDbEosSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDcEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sYUFBYSxHQUFHLENBQUMsZ0JBQWdCLElBQUksK0JBQStCLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7b0JBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDckMsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLEVBQUUsZUFBZSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDL0gsSUFBSSxDQUFDLGlCQUFpQixJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxDQUFDO3FCQUFNLElBQUksaUJBQWlCLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3JDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUEsQ0FBQztJQUVNLGVBQWUsQ0FBQyxjQUF1QixLQUFLLEVBQUUsU0FBa0IsSUFBSSxFQUFFLGFBQXNCLEtBQUs7UUFDdkcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUMxRyxJQUFJLFVBQVUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUN6SCxhQUFhLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQzdGLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztZQUMzRyxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxFQUN4SixVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUMvQixLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQ3RCLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVTtnQkFDL0UsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7Z0JBQ3hFLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxVQUFVO2dCQUMzRCxVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsS0FBSyxFQUFFLENBQUMsaUJBQWlCLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMvSCxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBRUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDJCQUEyQixDQUFDLENBQWtCO1FBQ3BELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3hDLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLENBQWlCO1FBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLENBQWlCO1FBQzVDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLENBQWlCO1FBQzNDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLENBQWtCO1FBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3RDLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLHFCQUFxQixDQUFDLENBQWtCO1FBQzlDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3RDLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLENBQWtCO1FBQy9DLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3RDLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxDQUFhO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLE9BQU8sV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFrQjtRQUNsQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN0QyxPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLDZCQUE2QixDQUFDLFlBQWlEO1FBQ3JGLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pELElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyw2QkFBNkIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RHLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyw2QkFBNkIsRUFBRSxDQUFDO29CQUM3RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQzdCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO29CQUN6RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7b0JBQ3RGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBRXBDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUU1RSxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxHQUE2QixFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDWCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDeEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hELEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEIsQ0FBQyxFQUFFLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQ2hILFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUMzRCxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxFQUN2RyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDMUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFFBQVEsRUFBRSxFQUNqRiw0QkFBNEIsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEYsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztnQkFDaEUsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixNQUFNLFdBQVcsR0FBYyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUNwRixTQUFTLEdBQWMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQy9GLG9CQUFvQixHQUFHLFlBQVksR0FBRyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ3RGLGtCQUFrQixHQUFHLFlBQVksR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRXZGLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLG9CQUFvQixDQUFDLENBQUM7Z0JBQzNGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztnQkFDckYsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxRQUFRO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sZUFBZSxDQUFDLFVBQW1CLEVBQUUsU0FBaUI7UUFDNUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUN0RixJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEVBQU07UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsRUFBTSxFQUFFLFFBQXdCLGVBQWUsQ0FBQyxJQUFJO1FBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxFQUFNLEVBQUUsS0FBMEIsSUFBSSxFQUFFLFVBQWlDLElBQUk7UUFDcEYsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxnQkFBZ0IsRUFDcEQsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksS0FBSyxFQUNyQyxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQ2xDLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFDM0IsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsS0FBSyx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUNqSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQTBCLElBQUksRUFBRSxVQUFpQyxJQUFJO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDOUUsSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU87WUFDVCxDQUFDO1lBQ0QsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixFQUNwRCxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxLQUFLLEVBQ3JDLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksRUFDbEMsS0FBSyxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUMzQixTQUFTLEdBQUcsT0FBTyxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDdEMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUM1SixlQUFlLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLEtBQUssd0JBQXdCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtvQkFDakksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxFQUFlLEVBQUUsT0FBd0I7UUFDdkQsTUFBTSxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsS0FBMEIsSUFBSSxFQUFFLFVBQWlDLElBQUk7UUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFDaEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDbEUsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUMxRSxJQUFJLFVBQVUsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDakMsT0FBTztZQUNULENBQUM7WUFDRCxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksZ0JBQWdCLEVBQ3BELFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLEtBQUssRUFDckMsT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxFQUNsQyxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQzNCLFNBQVMsR0FBRyxPQUFPLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUN0QyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUM1SixlQUFlLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsS0FBSyx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUNqSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEVBQU0sRUFBRSxPQUFnQixFQUFFLEVBQXVCO1FBQ3hFLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdCLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVTLE9BQU87UUFDZixNQUFNLFlBQVksR0FBaUMsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztRQUN4QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxVQUFVO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMzQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pCLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNmLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QjtRQUNyQixNQUFNLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVRLFdBQVc7UUFDbEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQixvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BELElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQTl5SVUsc0JBQXNCOzRGQUF0QixzQkFBc0IsczFFQUZ0QixDQUFDLG9CQUFvQixFQUFFLDBCQUEwQixDQUFDLDhHQWM3QixvQkFBb0Isa0hBR1gsZ0JBQWdCLHFIQUdiLGdCQUFnQix5R0FHN0IsbUJBQW1CLG9EQ3BIcEQseXBGQW9DYzs7NEZEMkRELHNCQUFzQjtrQkFabEMsU0FBUzsrQkFDRSxpQkFBaUIsUUFHckI7d0JBQ0osT0FBTyxFQUFFLHFCQUFxQjtxQkFDL0IsY0FDVyxLQUFLLG1CQUNBLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFNBQVMsYUFDL0IsQ0FBQyxvQkFBb0IsRUFBRSwwQkFBMEIsQ0FBQzt3REFlckQsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7Z0JBSTlDLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbkQsaUJBQWlCO3NCQUR4QixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUl0RCxrQkFBa0I7c0JBRHpCLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFO2dCQWFwRCxRQUFRO3NCQURQLE1BQU07Z0JBT1AsV0FBVztzQkFEVixNQUFNO2dCQU9QLGdCQUFnQjtzQkFEZixNQUFNO2dCQU9QLFVBQVU7c0JBRFQsTUFBTTtnQkFPUCxXQUFXO3NCQURWLE1BQU07Z0JBT1AsUUFBUTtzQkFEUCxNQUFNO2dCQU9QLFVBQVU7c0JBRFQsTUFBTTtnQkFPUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBT1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBMEJILGtCQUFrQjtzQkFEckIsS0FBSztnQkE2QkYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQTZCRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBNkJGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkE2QkYsT0FBTztzQkFEVixLQUFLO2dCQTZCRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBNkJGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBNENGLEtBQUs7c0JBRFIsS0FBSztnQkF3Q0YsV0FBVztzQkFEZCxLQUFLO2dCQWdCRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBc0NGLFlBQVk7c0JBRGYsS0FBSztnQkE4QkYsYUFBYTtzQkFEaEIsS0FBSztnQkE4QkYsZUFBZTtzQkFEbEIsS0FBSztnQkFpQkYsSUFBSTtzQkFEUCxLQUFLO2dCQXNCRixhQUFhO3NCQURoQixLQUFLO2dCQTZCRixnQ0FBZ0M7c0JBRG5DLEtBQUs7Z0JBOEJGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkE4QkYsZUFBZTtzQkFEbEIsS0FBSztnQkFvQ0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQW1DRixlQUFlO3NCQURsQixLQUFLO2dCQWlCRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBdUJGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkE2QkYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQTZCRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBNkJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBK0VGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkE0QkYsYUFBYTtzQkFEaEIsS0FBSztnQkE2QkYsVUFBVTtzQkFEYixLQUFLO2dCQTZCRixlQUFlO3NCQURsQixLQUFLO2dCQThCRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBNkJGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkE4QkYsU0FBUztzQkFEWixLQUFLO2dCQTZCRixtQkFBbUI7c0JBRHRCLEtBQUs7Z0JBaUNGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBNkJGLE9BQU87c0JBRFYsS0FBSztnQkE2QkYsVUFBVTtzQkFEYixLQUFLO2dCQTZCRixhQUFhO3NCQURoQixLQUFLO2dCQTZCRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBNkNGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBNkJGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFnQ0YseUJBQXlCO3NCQUQ1QixLQUFLO2dCQStCRixZQUFZO3NCQURmLEtBQUs7Z0JBb0RGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBK0JGLFFBQVE7c0JBRFgsS0FBSztnQkE2QkYsV0FBVztzQkFEZCxLQUFLO2dCQTZCRixXQUFXO3NCQURkLEtBQUs7Z0JBOEJGLFdBQVc7c0JBRGQsS0FBSztnQkE0QkYsU0FBUztzQkFEWixLQUFLO2dCQTRCRixjQUFjO3NCQURqQixLQUFLO2dCQTRCRixVQUFVO3NCQURiLEtBQUs7Z0JBb0NGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBNkJGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBZ0NGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBaUJGLGtCQUFrQjtzQkFEckIsS0FBSztnQkF3QkYsYUFBYTtzQkFEaEIsS0FBSztnQkE0QkYsT0FBTztzQkFEVixLQUFLO2dCQStCUSxtQkFBbUI7c0JBRGhDLEtBQUs7Z0JBZ0NGLFdBQVc7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsXHJcbiAgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBvZiwgc2tpcCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfSU5TVEFOVCwgQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCBDTEFTU19MSVNUX1ZFUlRJQ0FMLCBERUZBVUxUX0RJUkVDVElPTiwgREVGQVVMVF9EWU5BTUlDX1NJWkUsXHJcbiAgREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04sIERFRkFVTFRfSVRFTV9TSVpFLCBERUZBVUxUX0JVRkZFUl9TSVpFLCBERUZBVUxUX0xJU1RfU0laRSwgREVGQVVMVF9TVElDS1lfRU5BQkxFRCwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QsXHJcbiAgSEVJR0hUX1BST1BfTkFNRSwgTEVGVF9QUk9QX05BTUUsIE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgUFgsIEZPQ1VTLCBUT1BfUFJPUF9OQU1FLCBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgREVGQVVMVF9NQVhfQlVGRkVSX1NJWkUsIERFRkFVTFRfU0VMRUNUSU5HX01PREVTLCBERUZBVUxUX1NFTEVDVF9CWV9DTElDSywgREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSywgREVGQVVMVF9DT0xMRUNUSU9OX01PREUsXHJcbiAgREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0UsIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVCwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX0VORCwgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORyxcclxuICBNT1VTRV9ET1dOLCBUT1VDSF9TVEFSVCwgREVGQVVMVF9MQU5HX1RFWFRfRElSLCBERUZBVUxUX0NMSUNLX0RJU1RBTkNFLCBERUZBVUxUX1dBSVRfRk9SX1BSRVBBUkFUSU9OLCBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MsXHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfTUlOX1NJWkUsIEtFWV9ET1dOLCBCRUhBVklPUl9BVVRPLCBERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVELCBERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSwgREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQsXHJcbiAgREVGQVVMVF9BTklNQVRJT05fUEFSQU1TLCBERUZBVUxUX1NDUk9MTF9CRUhBVklPUiwgREVGQVVMVF9TTkFQX1NDUk9MTFRPX1NUQVJULCBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTiwgTUFYX1JFR1VMQVJfU05BUEVEX0NPTVBPTkVOVFMsXHJcbiAgUFJFUEFSRV9JVEVSQVRJT05TLCBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEgsIFJPTEVfTElTVF9CT1gsIFJPTEVfTElTVCwgS0VZX1RBQiwgTUFYX1ZFTE9DSVRZX0ZPUl9TQ1JPTExfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMSxcclxuICBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUywgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9VUERBVEVfSVRFTVMsIFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfQ09MTEFQU0VfSVRFTVMsXHJcbiAgUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9DT0xMQVBTRV9JVEVNUywgTUFYX05VTUJFUlNfT0ZfU0tJUFNfRk9SX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEsIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLFxyXG4gIERFRkFVTFRfU05BUF9UT19JVEVNLCBERUZBVUxUX1NOQVBfVE9fSVRFTV9BTElHTiwgVklFV1BPUlQsIERFRkFVTFRfTU9USU9OX0JMVVIsIERFRkFVTFRfTUFYX01PVElPTl9CTFVSLCBERUZBVUxUX1NDUk9MTElOR19PTkVfQllfT05FLFxyXG4gIERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCwgREVGQVVMVF9ESVZJREVTLCBERUZBVUxUX1NOQVBQSU5HX0RJU1RBTkNFLCBERUZBVUxUX01BWF9JVEVNX1NJWkUsIERFRkFVTFRfTUlOX0lURU1fU0laRSxcclxuICBERUZBVUxUX0FMSUdOTUVOVCwgREVGQVVMVF9DT0xMQVBTSU5HX01PREVTLCBERUZBVUxUX1NQUkVBRElOR19NT0RFLCBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORyxcclxuICBERUZBVUxUX09WRVJMQVBQSU5HX1NDUk9MTEJBUixcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHtcclxuICBJUmVuZGVyVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uLCBJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG59IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBJU2Nyb2xsRXZlbnQsIElTY3JvbGxPcHRpb25zLCBJQW5pbWF0aW9uUGFyYW1zLCBJU2l6ZSwgSVJlbmRlclN0YWJpbGl6ZXJPcHRpb25zLCBJU2Nyb2xsaW5nU2V0dGluZ3MsXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBBbGlnbm1lbnQsIEFyaXRobWV0aWNFeHByZXNzaW9uLCBGb2N1c0FsaWdubWVudCwgSWQsIEl0ZW1UcmFuc2Zvcm0sIFNuYXBwaW5nRGlzdGFuY2UsIENvbGxlY3Rpb25Nb2RlLCBEaXJlY3Rpb24sIFNlbGVjdGluZ01vZGUsXHJcbiAgU25hcHBpbmdNZXRob2QsIFNuYXBUb0l0ZW1BbGlnbiwgVGV4dERpcmVjdGlvbiwgQ29sbGFwc2luZ01vZGUsXHJcbiAgU3ByZWFkaW5nTW9kZSxcclxufSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gJy4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBBbGlnbm1lbnRzLCBDb2xsZWN0aW9uTW9kZXMsIERpcmVjdGlvbnMsIEZvY3VzQWxpZ25tZW50cywgU2VsZWN0aW5nTW9kZXMsIFNuYXBwaW5nTWV0aG9kcywgU25hcFRvSXRlbUFsaWducywgU3ByZWFkaW5nTW9kZXMsIFRleHREaXJlY3Rpb25zLFxyXG59IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSwgU2Nyb2xsRXZlbnQsIHRvZ2dsZUNsYXNzTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vY29yZS90cmFjay1ib3gnO1xyXG5pbXBvcnQgeyBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQgfSBmcm9tICcuL3V0aWxzL3NuYXBwaW5nLW1ldGhvZCc7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL2Jhc2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQkMSB9IGZyb20gJy4vbW9kZWxzL2NvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IGlzRGlyZWN0aW9uIH0gZnJvbSAnLi91dGlscy9pcy1kaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB9IGZyb20gJy4vbmctdmlydHVhbC1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc1NlbGVjdE1vZGUgfSBmcm9tICcuL3V0aWxzL2lzLXNlbGVjdC1tb2RlJztcclxuaW1wb3J0IHsgaXNDb2xsYXBzZU1vZGUgfSBmcm9tICcuL3V0aWxzL2lzLWNvbGxhcHNlLW1vZGUnO1xyXG5pbXBvcnQgeyBTZWxlY3RpbmdNb2Rlc1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9zZWxlY3RpbmctbW9kZXMtdHlwZXMnO1xyXG5pbXBvcnQgeyBDTWFwIH0gZnJvbSAnLi91dGlscy9jbWFwJztcclxuaW1wb3J0IHtcclxuICB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUJvb2xlYW4sIHZhbGlkYXRlRmxvYXQsIHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50LCB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcsXHJcbn0gZnJvbSAnLi91dGlscy92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgY29weVZhbHVlQXNSZWFkb25seSwgb2JqZWN0QXNSZWFkb25seSB9IGZyb20gJy4vdXRpbHMvb2JqZWN0JztcclxuaW1wb3J0IHsgaXNDb2xsZWN0aW9uTW9kZSB9IGZyb20gJy4vdXRpbHMvaXMtY29sbGVjdGlvbi1tb2RlJztcclxuaW1wb3J0IHsgTmdTY3JvbGxlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctc2Nyb2xsLXZpZXcnO1xyXG5pbXBvcnQgeyBOZ1ByZXJlbmRlckNvbnRhaW5lciB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1wcmVyZW5kZXItY29udGFpbmVyL25nLXByZXJlbmRlci1jb250YWluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVNjcm9sbFBhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGZvcm1hdEFjdHVhbERpc3BsYXlJdGVtcywgZm9ybWF0U2NyZWVuUmVhZGVyTWVzc2FnZSB9IGZyb20gJy4vdXRpbHMvc2NyZWVuLXJlYWRlci1mb3JtYXR0ZXInO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZUlkLCB2YWxpZGF0ZUl0ZXJhdGlvbiwgdmFsaWRhdGVTY3JvbGxCZWhhdmlvciwgdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24gfSBmcm9tICcuL3V0aWxzL2xpc3QtdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IEVWRU5UX0tFWV9ET1dOLCBLRVlfQVJSX0RPV04sIEtFWV9BUlJfTEVGVCwgS0VZX0FSUl9SSUdIVCwgS0VZX0FSUl9VUCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vY29uc3QnO1xyXG5pbXBvcnQgeyBOZ1ZpcnR1YWxMaXN0UHVibGljU2VydmljZSB9IGZyb20gJy4vbmctdmlydHVhbC1saXN0LXB1YmxpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNQZXJjZW50YWdlVmFsdWUgfSBmcm9tICcuL3V0aWxzL2lzLXBlcnNlbnRhZ2UtdmFsdWUnO1xyXG5pbXBvcnQgeyBwYXJzZUFyaXRobWV0aWNFeHByZXNzaW9uIH0gZnJvbSAnLi91dGlscy9wYXJzZS1hcml0aG1ldGljLWV4cHJlc3Npb24nO1xyXG5pbXBvcnQgeyBub3JtYWxpemVDb2xsZWN0aW9uIH0gZnJvbSAnLi91dGlscy9ub3JtYWxpemUtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IENvbGxhcHNpbmdNb2RlcyB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBpc1NwcmVhZGluZ01vZGUgfSBmcm9tICcuL3V0aWxzL2lzLXNwcmVhZGluZy1tb2RlJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vY29yZS9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uIH0gZnJvbSAnLi91dGlscy9nZXQtc2Nyb2xsLXN0YXRlLXZlcnNpb24nO1xyXG5pbXBvcnQgeyBEaXNwb3NhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVmlydHVhbCBsaXN0IGNvbXBvbmVudC5cclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdzdHlsZSc6ICdwb3NpdGlvbjogcmVsYXRpdmU7J1xyXG4gIH0sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxyXG4gIHByb3ZpZGVyczogW05nVmlydHVhbExpc3RTZXJ2aWNlLCBOZ1ZpcnR1YWxMaXN0UHVibGljU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX19uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG5cclxuICAvKipcclxuICAgKiBSZWFkb25seS4gUmV0dXJucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKi9cclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cclxuICBwcml2YXRlIF9zZXJ2aWNlID0gaW5qZWN0KE5nVmlydHVhbExpc3RTZXJ2aWNlKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncHJlcmVuZGVyJywgeyByZWFkOiBOZ1ByZXJlbmRlckNvbnRhaW5lciB9KVxyXG4gIHByaXZhdGUgX3ByZXJlbmRlcjogTmdQcmVyZW5kZXJDb250YWluZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyc0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX2xpc3RDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NuYXBSZW5kZXJlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByaXZhdGUgX3NuYXBDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbGVyJywgeyByZWFkOiBOZ1Njcm9sbGVyQ29tcG9uZW50IH0pXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsZXJDb21wb25lbnQ6IE5nU2Nyb2xsZXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxlciA9IHRoaXMuXyRzY3JvbGxlci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbGlzdCA9IHRoaXMuXyRsaXN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGNvbXBsZXRlZCBzY3JvbGxpbmcuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgdmlld3BvcnQgc2l6ZSBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uVmlld3BvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTaXplPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0IHRoZSBjb21wb25lbnQgSUQgd2hlbiBhbiBlbGVtZW50IGNyb3NzZXMgdGhlIGFsaWdubWVudCBsaW5lIHNwZWNpZmllZCBieSB0aGUgc25hcFRvSXRlbUFsaWduIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU25hcEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPElkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY2xpY2tlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvbkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgbnVsbD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBlbGVtZW50cyBhcmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElkPiB8IElkIHwgbnVsbD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiBlbGVtZW50cyBhcmUgY29sbGFwc2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElkPj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgc2Nyb2xsIHJlYWNoZXMgdGhlIHN0YXJ0LlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsUmVhY2hTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgc2Nyb2xsIHJlYWNoZXMgdGhlIGVuZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbFJlYWNoRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF8kc2hvdyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRzaG93ID0gdGhpcy5fJHNob3cuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRpbml0aWFsaXplZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRpbml0aWFsaXplZCA9IHRoaXMuXyRpbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRoaWNrbmVzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGhpY2tuZXNzVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhclRoaWNrbmVzc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxiYXIgdGhpY2tuZXNzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRoaWNrbmVzcyh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJUaGlja25lc3NUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhclRoaWNrbmVzcygpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyTWluU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJNaW5TaXplID0gdGhpcy5fJHNjcm9sbGJhck1pblNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhck1pblNpemVUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlSW50KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyTWluU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9NSU5fU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1pbmltdW0gc2Nyb2xsYmFyIHNpemUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyTWluU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyTWluU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpIGFzIG51bWJlcjsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciA9IHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxiYXJUaHVtYlJlbmRlcmVyVHJhbnNmb3JtID0gKHY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlT2JqZWN0KHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFyVGh1bWJSZW5kZXJlclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsYmFyIGN1c3RvbWl6YXRpb24gdGVtcGxhdGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcih2OiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxiYXJUaHVtYlJlbmRlcmVyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsPih7fSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJUaHVtYlBhcmFtcyA9IHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsYmFyVGh1bWJQYXJhbXNUcmFuc2Zvcm0gPSAodjogeyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGJhclRodW1iUGFyYW1zXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgb2JqZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBzY3JvbGxiYXIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGh1bWJQYXJhbXModjogeyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaHVtYlBhcmFtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyVGh1bWJQYXJhbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsYmFyVGh1bWJQYXJhbXMoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbG9hZGluZyA9IHRoaXMuXyRsb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9sb2FkaW5nVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibG9hZGluZ1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzY3JvbGxCYXIgZ29lcyBpbnRvIGxvYWRpbmcgc3RhdGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbG9hZGluZyh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2xvYWRpbmdUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGxvYWRpbmcubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyR3YWl0Rm9yUHJlcGFyYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfV0FJVF9GT1JfUFJFUEFSQVRJT04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfd2FpdEZvclByZXBhcmF0aW9uVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJ3YWl0Rm9yUHJlcGFyYXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfV0FJVF9GT1JfUFJFUEFSQVRJT047XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0cnVlLCBpdCB3aWxsIHdhaXQgdW50aWwgdGhlIGxpc3QgaXRlbXMgYXJlIGZ1bGx5IHByZXBhcmVkIGJlZm9yZSBkaXNwbGF5aW5nIHRoZW0uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgd2FpdEZvclByZXBhcmF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kd2FpdEZvclByZXBhcmF0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl93YWl0Rm9yUHJlcGFyYXRpb25UcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHdhaXRGb3JQcmVwYXJhdGlvbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHdhaXRGb3JQcmVwYXJhdGlvbigpIHsgcmV0dXJuIHRoaXMuXyR3YWl0Rm9yUHJlcGFyYXRpb24uZ2V0VmFsdWUoKSBhcyBib29sZWFuOyB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY2xpY2tEaXN0YW5jZSA9IHRoaXMuXyRjbGlja0Rpc3RhbmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jbGlja0Rpc3RhbmNlVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImNsaWNrRGlzdGFuY2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DTElDS19ESVNUQU5DRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtYXhpbXVtIHNjcm9sbCBkaXN0YW5jZSBhdCB3aGljaCBhIGNsaWNrIGV2ZW50IGlzIHRyaWdnZXJlZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjbGlja0Rpc3RhbmNlKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jbGlja0Rpc3RhbmNlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjbGlja0Rpc3RhbmNlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY2xpY2tEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCkgYXMgbnVtYmVyOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbXMgPSB0aGlzLl8kaXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1zVHJhbnNmb3JtID0gKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24pID0+IHtcclxuICAgIGxldCB2YWxpZCA9IHZhbGlkYXRlQXJyYXkodiwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2ldO1xyXG4gICAgICAgICAgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdChpdGVtLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSAmJiAhKHZhbGlkYXRlRmxvYXQoaXRlbT8uW3RyYWNrQnldIGFzIG51bWJlciwgdHJ1ZSkgfHwgdmFsaWRhdGVTdHJpbmcoaXRlbT8uW3RyYWNrQnldIGFzIHN0cmluZywgdHJ1ZSwgdHJ1ZSkpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiaXRlbXNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJVmlydHVhbExpc3RDb2xsZWN0aW9uYCBvciBgbnVsbGAuJyk7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgbGlzdCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtcyh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtcygpIHsgcmV0dXJuIHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpIGFzIElWaXJ0dWFsTGlzdENvbGxlY3Rpb247IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdGVkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4gfCBJZCB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2VsZWN0ZWRJZHMgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSWRzVHJhbnNmb3JtID0gKHY6IEFycmF5PElkPiB8IElkIHwgbnVsbCkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVBcnJheSh2IGFzIGFueSwgdHJ1ZSwgdHJ1ZSkgfHwgdmFsaWRhdGVTdHJpbmcodiBhcyBhbnksIHRydWUsIHRydWUpIHx8IHZhbGlkYXRlRmxvYXQodiBhcyBhbnksIHRydWUpO1xyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIGlmICh2ICYmIEFycmF5LmlzQXJyYXkodikpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdltpXTtcclxuICAgICAgICAgIHZhbGlkID0gdmFsaWRhdGVTdHJpbmcoaXRlbSBhcyBhbnkpIHx8IHZhbGlkYXRlRmxvYXQoaXRlbSBhcyBhbnkpO1xyXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdGVkSWRzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgQXJyYXk8SWQ+IHwgSWRgIG9yIGBudWxsYC4nKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gPyBbXSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZWxlY3RlZElkcyh2OiBBcnJheTxJZD4gfCBJZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NlbGVjdGVkSWRzVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNlbGVjdGVkSWRzKCkgeyByZXR1cm4gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRlZmF1bHRJdGVtVmFsdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsPihudWxsKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGRlZmF1bHRJdGVtVmFsdWUgPSB0aGlzLl8kZGVmYXVsdEl0ZW1WYWx1ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGVmYXVsdEl0ZW1WYWx1ZSh2OiBJVmlydHVhbExpc3RJdGVtIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgZGVmYXVsdEl0ZW1WYWx1ZSgpIHsgcmV0dXJuIHRoaXMuXyRkZWZhdWx0SXRlbVZhbHVlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRjb2xsYXBzZWRJZHMgPSB0aGlzLl8kY29sbGFwc2VkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzZWRJZHNUcmFuc2Zvcm0gPSAodjogQXJyYXk8SWQ+KSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZUFycmF5KHYgYXMgYW55LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodiAmJiBBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHZbaV07XHJcbiAgICAgICAgICB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKGl0ZW0gYXMgYW55KSB8fCB2YWxpZGF0ZUZsb2F0KGl0ZW0gYXMgYW55KTtcclxuICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZWRJZHNcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBBcnJheTxJZD5gLicpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb2xsYXBzZWQgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sbGFwc2VkSWRzKHY6IEFycmF5PElkPikge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2NvbGxhcHNlZElkc1RyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGFwc2VkSWRzKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RCeUNsaWNrID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NFTEVDVF9CWV9DTElDSyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzZWxlY3RCeUNsaWNrID0gdGhpcy5fJHNlbGVjdEJ5Q2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdEJ5Q2xpY2tUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzZWxlY3RCeUNsaWNrXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NFTEVDVF9CWV9DTElDSztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGBmYWxzZWAsIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIHVzaW5nIHRoZSBjb25maWcuYXBpIG1ldGhvZCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlOyBcclxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIGJ5IGNsaWNraW5nIG9uIGl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2VsZWN0QnlDbGljayh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNlbGVjdEJ5Q2xpY2suZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NlbGVjdEJ5Q2xpY2tUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNlbGVjdEJ5Q2xpY2submV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzZWxlY3RCeUNsaWNrKCkgeyByZXR1cm4gdGhpcy5fJHNlbGVjdEJ5Q2xpY2suZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VCeUNsaWNrID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxhcHNlQnlDbGljayA9IHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbGxhcHNlQnlDbGlja1RyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImNvbGxhcHNlQnlDbGlja1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSztcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGBmYWxzZWAsIHRoZSBlbGVtZW50IGlzIGNvbGxhcHNlZCB1c2luZyB0aGUgY29uZmlnLmNvbGxhcHNlIG1ldGhvZCBwYXNzZWQgdG8gdGhlIHRlbXBsYXRlOyBcclxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IGlzIGNvbGxhcHNlZCBieSBjbGlja2luZyBvbiBpdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNlQnlDbGljayh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbGxhcHNlQnlDbGljay5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGFwc2VCeUNsaWNrVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRjb2xsYXBzZUJ5Q2xpY2submV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzZUJ5Q2xpY2soKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VCeUNsaWNrLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKiBVc2UgdGhlIGBzdGlja3lFbmFibGVkYCBwcm9wZXJ0eSBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXAodjogYm9vbGVhbikge1xyXG4gICAgdGhyb3cgRXJyb3IoYFByb3BlcnR5IHNuYXAgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBcXGBzdGlja3lFbmFibGVkXFxgIHByb3BlcnR5IGluc3RlYWQuYCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJHN0aWNreUVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU1RJQ0tZX0VOQUJMRUQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc3RpY2t5RW5hYmxlZCA9IHRoaXMuXyRzdGlja3lFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zdGlja3lFbmFibGVkVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic3RpY2t5RW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TVElDS1lfRU5BQkxFRDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciBpdGVtcyB3aXRoIHRoZSBnaXZlbiBgc3RpY2t5YCBpbiBgaXRlbUNvbmZpZ01hcGAgd2lsbCBzdGljayB0byB0aGUgZWRnZXMuIERlZmF1bHQgdmFsdWUgaXMgXCJ0cnVlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc3RpY2t5RW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHN0aWNreUVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3N0aWNreUVuYWJsZWRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHN0aWNreUVuYWJsZWQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzdGlja3lFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJHN0aWNreUVuYWJsZWQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TTkFQX1RPX0VORF9UUkFOU0lUSU9OX0lOU1RBTlRfT0ZGU0VUKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0ID0gdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUF9UT19FTkRfVFJBTlNJVElPTl9JTlNUQU5UX09GRlNFVDtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIG9mZnNldCB2YWx1ZTsgaWYgdGhlIHNjcm9sbCBhcmVhIHZhbHVlIGlzIGV4Y2VlZGVkLCB0aGUgc2Nyb2xsIGFuaW1hdGlvbiB3aWxsIGJlIGRpc2FibGVkLiBEZWZhdWx0IHZhbHVlIGlzIFwiMFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0KHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwVG9FbmRUcmFuc2l0aW9uSW5zdGFudE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBUb0VuZFRyYW5zaXRpb25JbnN0YW50T2Zmc2V0Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kc25hcFRvRW5kVHJhbnNpdGlvbkluc3RhbnRPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsU3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFyaXRobWV0aWNFeHByZXNzaW9uPigwKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxTdGFydE9mZnNldFRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2LCB0cnVlKSB8fCBpc1BlcmNlbnRhZ2VWYWx1ZSh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbFN0YXJ0T2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHR5cGUgYG51bWJlcmAgb3IgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2Nyb2xsIHN0YXJ0IG9mZnNldCB2YWx1ZS4gQ2FuIGJlIHNwZWNpZmllZCBpbiBhYnNvbHV0ZSBvciBwZXJjZW50YWdlIHZhbHVlcy5cclxuICAgKiBTdXBwb3J0cyBhcml0aG1ldGljIGV4cHJlc3Npb25zIG9mIGFkZGl0aW9uIGA1MCUgKyAyNWAgb3Igc3VidHJhY3Rpb24gYDUwJSAtIDI1YC4gRGVmYXVsdCB2YWx1ZSBpcyBcIjBcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxTdGFydE9mZnNldCh2OiBBcml0aG1ldGljRXhwcmVzc2lvbikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXRUcmFuc2Zvcm0odiBhcyBhbnkpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxTdGFydE9mZnNldC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJpdGhtZXRpY0V4cHJlc3Npb24+KDApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsRW5kT2Zmc2V0VHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYsIHRydWUpIHx8IGlzUGVyY2VudGFnZVZhbHVlKHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsRW5kT2Zmc2V0XCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIHR5cGUgYG51bWJlcmAgb3IgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2Nyb2xsIGVuZCBvZmZzZXQgdmFsdWUuIENhbiBiZSBzcGVjaWZpZWQgaW4gYWJzb2x1dGUgb3IgcGVyY2VudGFnZSB2YWx1ZXMuXHJcbiAgICogU3VwcG9ydHMgYXJpdGhtZXRpYyBleHByZXNzaW9ucyBvZiBhZGRpdGlvbiBgNTAlICsgMjVgIG9yIHN1YnRyYWN0aW9uIGA1MCUgLSAyNWAuIERlZmF1bHQgdmFsdWUgaXMgXCIwXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsRW5kT2Zmc2V0KHY6IEFyaXRobWV0aWNFeHByZXNzaW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbEVuZE9mZnNldC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0VHJhbnNmb3JtKHYgYXMgYW55KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsRW5kT2Zmc2V0Lm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsRW5kT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbEVuZE9mZnNldC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwU2Nyb2xsVG9TdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQX1NDUk9MTFRPX1NUQVJUKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBTY3JvbGxUb1N0YXJ0ID0gdGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zbmFwU2Nyb2xsVG9TdGFydFRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2LCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNuYXBTY3JvbGxUb1N0YXJ0XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfU0NST0xMVE9fU1RBUlQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbCB3aWxsIGJlIGFuY2hvcmVkIHRvIHRoZSBzdGFydCBvZiB0aGUgbGlzdC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKiBUaGlzIHByb3BlcnR5IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgc25hcFNjcm9sbFRvRW5kIHByb3BlcnR5LlxyXG4gICAqIFRoYXQgaXMsIGlmIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgaW5pdGlhbGx5IHNuYXAgXHJcbiAgICogdG8gdGhlIGJlZ2lubmluZzsgaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGVuZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQuIFxyXG4gICAqIElmIHNuYXBTY3JvbGxUb1N0YXJ0IGlzIGRpc2FibGVkIGFuZCBzbmFwU2Nyb2xsVG9FbmQgaXMgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQ7IFxyXG4gICAqIGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBiZWdpbm5pbmcsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgYmVnaW5uaW5nLiBcclxuICAgKiBJZiBib3RoIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGRpc2FibGVkLCB0aGUgbGlzdCB3aWxsIG5ldmVyIHNuYXAgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICogSW4gdGhlIGBzcHJlYWRpbmdNb2RlPVNwcmVhZGluZ01vZGVzLklORklOSVRZYCBtb2RlLCB0aGUgYHNuYXBTY3JvbGxUb1N0YXJ0YCBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLCBzaW5jZSB0aGUgbGlzdCBoYXMgbm8gYmVnaW5uaW5nIG9yIGVuZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9TdGFydCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBTY3JvbGxUb1N0YXJ0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9TdGFydFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFNjcm9sbFRvU3RhcnQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzbmFwU2Nyb2xsVG9TdGFydCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwU2Nyb2xsVG9TdGFydC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwU2Nyb2xsVG9FbmQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUF9TQ1JPTExUT19FTkQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFNjcm9sbFRvRW5kID0gdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFNjcm9sbFRvRW5kVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic25hcFNjcm9sbFRvRW5kXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfU0NST0xMVE9fRU5EO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGwgd2lsbCBiZSBhbmNob3JlZCB0byB0aGUg0YPRgtCyIG9mIHRoZSBsaXN0LiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqIFRoYXQgaXMsIGlmIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGVuYWJsZWQsIHRoZSBsaXN0IHdpbGwgaW5pdGlhbGx5IHNuYXAgXHJcbiAgICogdG8gdGhlIGJlZ2lubmluZzsgaWYgeW91IG1vdmUgdGhlIHNjcm9sbCBiYXIgdG8gdGhlIGVuZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQuIFxyXG4gICAqIElmIHNuYXBTY3JvbGxUb1N0YXJ0IGlzIGRpc2FibGVkIGFuZCBzbmFwU2Nyb2xsVG9FbmQgaXMgZW5hYmxlZCwgdGhlIGxpc3Qgd2lsbCBzbmFwIHRvIHRoZSBlbmQ7IFxyXG4gICAqIGlmIHlvdSBtb3ZlIHRoZSBzY3JvbGwgYmFyIHRvIHRoZSBiZWdpbm5pbmcsIHRoZSBsaXN0IHdpbGwgc25hcCB0byB0aGUgYmVnaW5uaW5nLiBcclxuICAgKiBJZiBib3RoIHNuYXBTY3JvbGxUb1N0YXJ0IGFuZCBzbmFwU2Nyb2xsVG9FbmQgYXJlIGRpc2FibGVkLCB0aGUgbGlzdCB3aWxsIG5ldmVyIHNuYXAgdG8gdGhlIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICogSW4gdGhlIGBzcHJlYWRpbmdNb2RlPVNwcmVhZGluZ01vZGVzLklORklOSVRZYCBtb2RlLCB0aGUgYHNuYXBTY3JvbGxUb0VuZGAgcHJvcGVydHkgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCwgc2luY2UgdGhlIGxpc3QgaGFzIG5vIGJlZ2lubmluZyBvciBlbmQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFNjcm9sbFRvRW5kKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFNjcm9sbFRvRW5kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zbmFwU2Nyb2xsVG9FbmRUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNuYXBTY3JvbGxUb0VuZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBTY3JvbGxUb0VuZCgpIHsgcmV0dXJuIHRoaXMuXyRzbmFwU2Nyb2xsVG9FbmQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIFRoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwU2Nyb2xsVG9Cb3R0b20odjogYm9vbGVhbikge1xyXG4gICAgdGhyb3cgRXJyb3IoJ1RoZSBzdG9wU25hcHBpbmdTY3JvbGxUb0VuZCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHNuYXBTY3JvbGxUb0VuZCBwcm9wZXJ0eS4nKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxiYXJFbmFibGVkID0gdGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhckVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxiYXJFbmFibGVkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTEJBUl9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc2hvd24gb3Igbm90LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsYmFyRW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhckVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsYmFySW50ZXJhY3RpdmUgPSB0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbGJhckludGVyYWN0aXZlVHJhbnNmb3JtID0gKHY6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHYsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsYmFySW50ZXJhY3RpdmVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMQkFSX0lOVEVSQUNUSVZFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHNjcm9sbGluZyB1c2luZyB0aGUgc2Nyb2xsYmFyIHdpbGwgYmUgcG9zc2libGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhckludGVyYWN0aXZlKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFySW50ZXJhY3RpdmUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3Njcm9sbGJhckludGVyYWN0aXZlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNjcm9sbGJhckludGVyYWN0aXZlKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG92ZXJsYXBwaW5nU2Nyb2xsYmFyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX09WRVJMQVBQSU5HX1NDUk9MTEJBUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRvdmVybGFwcGluZ1Njcm9sbGJhciA9IHRoaXMuXyRvdmVybGFwcGluZ1Njcm9sbGJhci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb3ZlcmxhcHBpbmdTY3JvbGxiYXJUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvdmVybGFwcGluZ1Njcm9sbGJhclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9PVkVSTEFQUElOR19TQ1JPTExCQVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNjcm9sbCBiYXIgd2lsbCBvdmVybGFwIHRoZSBsaXN0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcImZhbHNlXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgb3ZlcmxhcHBpbmdTY3JvbGxiYXIodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRvdmVybGFwcGluZ1Njcm9sbGJhci5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fb3ZlcmxhcHBpbmdTY3JvbGxiYXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgb3ZlcmxhcHBpbmdTY3JvbGxiYXIoKSB7IHJldHVybiB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsQmVoYXZpb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjcm9sbEJlaGF2aW9yPihERUZBVUxUX1NDUk9MTF9CRUhBVklPUik7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxCZWhhdmlvciA9IHRoaXMuXyRzY3JvbGxCZWhhdmlvci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQmVoYXZpb3JUcmFuc2Zvcm0gPSAodjogU2Nyb2xsQmVoYXZpb3IpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodiwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzY3JvbGxCZWhhdmlvclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExfQkVIQVZJT1I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSBzY3JvbGxpbmcgYmVoYXZpb3IgZm9yIGFueSBlbGVtZW50IG9uIHRoZSBwYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNtb290aFwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbEJlaGF2aW9yKHY6IFNjcm9sbEJlaGF2aW9yKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbEJlaGF2aW9yLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxCZWhhdmlvclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsQmVoYXZpb3IubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxCZWhhdmlvcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxCZWhhdmlvci5nZXRWYWx1ZSgpOyB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGluZ1NldHRpbmdzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2Nyb2xsaW5nU2V0dGluZ3M+KERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcm9sbGluZ1NldHRpbmdzID0gdGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zY3JvbGxpbmdTZXR0aW5nc1RyYW5zZm9ybSA9ICh2OiBJU2Nyb2xsaW5nU2V0dGluZ3MpOiBJU2Nyb2xsaW5nU2V0dGluZ3MgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QodiwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAodmFsaWQgJiYgISF2KSB7XHJcbiAgICAgIGNvbnN0IHsgZnJpY3Rpb25hbEZvcmNlLCBtYXNzLCBtYXhEaXN0YW5jZSwgbWF4RHVyYXRpb24sIHNwZWVkU2NhbGUsIG9wdGltaXphdGlvbiB9ID0gdjtcclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KGZyaWN0aW9uYWxGb3JjZSwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJmcmljdGlvbmFsRm9yY2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgICAgfVxyXG4gICAgICB2YWxpZCA9IHZhbGlkYXRlRmxvYXQobWFzcywgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtYXNzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1heERpc3RhbmNlLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heERpc3RhbmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KG1heER1cmF0aW9uLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heER1cmF0aW9uXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHNwZWVkU2NhbGUsIHRydWUpO1xyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic3BlZWRTY2FsZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTO1xyXG4gICAgICB9XHJcbiAgICAgIHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKG9wdGltaXphdGlvbiwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvcHRpbWl6YXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm4gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwic2Nyb2xsaW5nU2V0dGluZ3NcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBvYmplY3RgIG9yIG51bGwuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUztcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZyaWN0aW9uYWxGb3JjZTogdi5mcmljdGlvbmFsRm9yY2UgIT09IHVuZGVmaW5lZCAmJiB2LmZyaWN0aW9uYWxGb3JjZSA+IDAgPyB2LmZyaWN0aW9uYWxGb3JjZSA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLmZyaWN0aW9uYWxGb3JjZSxcclxuICAgICAgbWFzczogdi5tYXNzICE9PSB1bmRlZmluZWQgJiYgdi5tYXNzID4gMCA/IHYubWFzcyA6IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm1hc3MsXHJcbiAgICAgIG1heERpc3RhbmNlOiB2Lm1heERpc3RhbmNlICE9PSB1bmRlZmluZWQgJiYgdi5tYXhEaXN0YW5jZSA+IDAgPyB2Lm1heERpc3RhbmNlIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MubWF4RGlzdGFuY2UsXHJcbiAgICAgIG1heER1cmF0aW9uOiB2Lm1heER1cmF0aW9uICE9PSB1bmRlZmluZWQgJiYgdi5tYXhEdXJhdGlvbiA+IDAgPyB2Lm1heER1cmF0aW9uIDogREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1MubWF4RHVyYXRpb24sXHJcbiAgICAgIHNwZWVkU2NhbGU6IHYuc3BlZWRTY2FsZSAhPT0gdW5kZWZpbmVkICYmIHYuc3BlZWRTY2FsZSA+IDAgPyB2LnNwZWVkU2NhbGUgOiBERUZBVUxUX1NDUk9MTElOR19TRVRUSU5HUy5zcGVlZFNjYWxlLFxyXG4gICAgICBvcHRpbWl6YXRpb246IHYub3B0aW1pemF0aW9uID8/IERFRkFVTFRfU0NST0xMSU5HX1NFVFRJTkdTLm9wdGltaXphdGlvbixcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsaW5nIHNldHRpbmdzLlxyXG4gICAqIC0gZnJpY3Rpb25hbEZvcmNlIC0gRnJpY3Rpb25hbCBmb3JjZS4gRGVmYXVsdCB2YWx1ZSBpcyAwLjAzNS5cclxuICAgKiAtIG1hc3MgLSBNYXNzLiBEZWZhdWx0IHZhbHVlIGlzIDAuMDA1LlxyXG4gICAqIC0gbWF4RGlzdGFuY2UgLSBNYXhpbXVtIHNjcm9sbGluZyBkaXN0YW5jZS4gRGVmYXVsdCB2YWx1ZSBpcyAxMDAwMDAuXHJcbiAgICogLSBtYXhEdXJhdGlvbiAtIE1heGltdW0gYW5pbWF0aW9uIGR1cmF0aW9uLiBEZWZhdWx0IHZhbHVlIGlzIDQwMDAuXHJcbiAgICogLSBzcGVlZFNjYWxlIC0gU3BlZWQgc2NhbGUuIERlZmF1bHQgdmFsdWUgaXMgMTAuXHJcbiAgICogLSBvcHRpbWl6YXRpb24gLSBFbmFibGVzIHNjcm9sbGluZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGluZ1NldHRpbmdzKHY6IElTY3JvbGxpbmdTZXR0aW5ncykge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxpbmdTZXR0aW5ncy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2Nyb2xsaW5nU2V0dGluZ3NUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGluZ1NldHRpbmdzLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2Nyb2xsaW5nU2V0dGluZ3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsaW5nU2V0dGluZ3MuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbVRyYW5zZm9ybSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SXRlbVRyYW5zZm9ybSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkaXRlbVRyYW5zZm9ybSA9IHRoaXMuXyRpdGVtVHJhbnNmb3JtLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtVHJhbnNmb3JtVHJhbnNmb3JtID0gKHY6IGFueSkgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVGdW5jdGlvbih2LCB0cnVlLCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiaXRlbVRyYW5zZm9ybVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYEl0ZW1UcmFuc2Zvcm1gIG9yIGBudWxsYC4nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDdXN0b20gdHJhbnNmb3JtYXRpb24gb2YgZWxlbWVudCdzIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUsIG9wYWNpdHkgYW5kIHpJbmRleC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG51bGxgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1UcmFuc2Zvcm0odjogSXRlbVRyYW5zZm9ybSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbVRyYW5zZm9ybS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbVRyYW5zZm9ybVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVRyYW5zZm9ybS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1UcmFuc2Zvcm0oKSB7IHJldHVybiB0aGlzLl8kaXRlbVRyYW5zZm9ybS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwVG9JdGVtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NOQVBfVE9fSVRFTSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzbmFwVG9JdGVtID0gdGhpcy5fJHNuYXBUb0l0ZW0uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBUb0l0ZW1UcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9JdGVtXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfVE9fSVRFTTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXAgdG8gYW4gaXRlbS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwVG9JdGVtKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcFRvSXRlbS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcFRvSXRlbVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFRvSXRlbS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBUb0l0ZW0oKSB7IHJldHVybiB0aGlzLl8kc25hcFRvSXRlbS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwVG9JdGVtQWxpZ24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNuYXBUb0l0ZW1BbGlnbj4oREVGQVVMVF9TTkFQX1RPX0lURU1fQUxJR04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcFRvSXRlbUFsaWduID0gdGhpcy5fJHNuYXBUb0l0ZW1BbGlnbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcFRvSXRlbUFsaWduVHJhbnNmb3JtID0gKHY6IFNuYXBUb0l0ZW1BbGlnbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ3N0YXJ0JyB8fCB2ID09PSAnY2VudGVyJyB8fCB2ID09PSAnZW5kJyk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9JdGVtQWxpZ25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYHN0YXJ0YCwgYGNlbnRlcmAgb3IgYGVuZGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NOQVBfVE9fSVRFTV9BTElHTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsaWdubWVudCBmb3Igc25hcFRvSXRlbS4gQXZhaWxhYmxlIHZhbHVlcyDigIvigIthcmUgYHN0YXJ0YCwgYGNlbnRlcmAsIGFuZCBgZW5kYC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGNlbnRlcmAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcFRvSXRlbUFsaWduKHY6IFNuYXBUb0l0ZW1BbGlnbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwVG9JdGVtQWxpZ24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBUb0l0ZW1BbGlnblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcFRvSXRlbUFsaWduLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc25hcFRvSXRlbUFsaWduKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBUb0l0ZW1BbGlnbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwcGluZ0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ0Rpc3RhbmNlPihERUZBVUxUX1NOQVBQSU5HX0RJU1RBTkNFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNuYXBwaW5nRGlzdGFuY2UgPSB0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc25hcHBpbmdEaXN0YW5jZVRyYW5zZm9ybSA9ICh2OiBTbmFwcGluZ0Rpc3RhbmNlIHwgYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpIHx8IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwcGluZ0Rpc3RhbmNlXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYCBvciBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUFBJTkdfRElTVEFOQ0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTbmFwcGluZyBhY3RpdmF0aW9uIGRpc3RhbmNlLiBDYW4gYmUgc3BlY2lmaWVkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZWxlbWVudCBzaXplIG9yIGluIGFic29sdXRlIHZhbHVlcy5cclxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMjUlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwcGluZ0Rpc3RhbmNlKHY6IFNuYXBwaW5nRGlzdGFuY2UpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc25hcHBpbmdEaXN0YW5jZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nRGlzdGFuY2UoKSB7IHJldHVybiB0aGlzLl8kc25hcHBpbmdEaXN0YW5jZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdPbmVCeU9uZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExJTkdfT05FX0JZX09ORSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxpbmdPbmVCeU9uZSA9IHRoaXMuXyRzY3JvbGxpbmdPbmVCeU9uZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsaW5nT25lQnlPbmVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbGluZ09uZUJ5T25lXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NDUk9MTElOR19PTkVfQllfT05FO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gc2Nyb2xsIG9uZSBpdGVtIGF0IGEgdGltZSBpZiB0cnVlIGFuZCB0aGUgc2Nyb2xsVG9JdGVtIHByb3BlcnR5IGlzIHNldC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxpbmdPbmVCeU9uZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGluZ09uZUJ5T25lLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zY3JvbGxpbmdPbmVCeU9uZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsaW5nT25lQnlPbmUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBzY3JvbGxpbmdPbmVCeU9uZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxpbmdPbmVCeU9uZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhbGlnbm1lbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFsaWdubWVudD4oREVGQVVMVF9BTElHTk1FTlQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkYWxpZ25tZW50ID0gdGhpcy5fJGFsaWdubWVudC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYWxpZ25tZW50VHJhbnNmb3JtID0gKHY6IEFsaWdubWVudCkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vbmUnIHx8IHYgPT09ICdjZW50ZXInKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImFsaWdubWVudFwiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZiBgbm9uZWAgb3IgYGNlbnRlcnRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9BTElHTk1FTlQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGxpc3QuIFR3byBtb2RlcyBhcmUgYXZhaWxhYmxlOiBgbm9uZWAgYW5kIGBjZW50ZXJgLiBUaGUgYGNlbnRlcmAgbW9kZSBhbGlnbnMgdGhlIGxpc3QgaXRlbXMgdG8gdGhlIGNlbnRlciBvZiB0aGUgdmlld3BvcnQsIGlkZWFsIGZvciB1c2Ugd2l0aCB0aGUgYGl0ZW1UcmFuc2Zvcm1gIHByb3BlcnR5LlxyXG4gICAqIFRoZSBgbm9uZWAgbW9kZSBtZWFucyBubyBhbGlnbm1lbnQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBub25lYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBhbGlnbm1lbnQodjogQWxpZ25tZW50KSB7XHJcbiAgICBpZiAodGhpcy5fJGFsaWdubWVudC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYWxpZ25tZW50VHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRhbGlnbm1lbnQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBhbGlnbm1lbnQoKSB7IHJldHVybiB0aGlzLl8kYWxpZ25tZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHpJbmRleFdoZW5TZWxlY3RpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHpJbmRleFdoZW5TZWxlY3RpbmcgPSB0aGlzLl8kekluZGV4V2hlblNlbGVjdGluZy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfekluZGV4V2hlblNlbGVjdGluZ1RyYW5zZm9ybSA9ICh2OiBzdHJpbmcgfCBudWxsKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYsIHRydWUsIHRydWUpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwiekluZGV4V2hlblNlbGVjdGluZ1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAgb3IgYG51bGxgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdiA/PyBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIHpJbmRleCB3aGVuIGEgbGlzdCBpdGVtIGlzIHNlbGVjdGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgekluZGV4V2hlblNlbGVjdGluZyh2OiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHpJbmRleFdoZW5TZWxlY3RpbmcuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3pJbmRleFdoZW5TZWxlY3RpbmdUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJHpJbmRleFdoZW5TZWxlY3RpbmcubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCB6SW5kZXhXaGVuU2VsZWN0aW5nKCkgeyByZXR1cm4gdGhpcy5fJHpJbmRleFdoZW5TZWxlY3RpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc3ByZWFkaW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3ByZWFkaW5nTW9kZT4oREVGQVVMVF9TUFJFQURJTkdfTU9ERSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzcHJlYWRpbmdNb2RlID0gdGhpcy5fJHNwcmVhZGluZ01vZGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NwcmVhZGluZ01vZGVUcmFuc2Zvcm0gPSAodjogU3ByZWFkaW5nTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ25vcm1hbCcgfHwgdiA9PT0gJ2luZmluaXR5Jyk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzcHJlYWRpbmdNb2RlXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBub3JtYWxgIG9yIGBpbmZpbml0eWAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX1NQUkVBRElOR19NT0RFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG9yZGVyIG9mIGxpc3QgZWxlbWVudHMuIEF2YWlsYWJsZSB2YWx1ZXMg4oCL4oCLYXJlIGBzdGFuZGFyZGAgYW5kIGBpbmZpbml0eWAuXHJcbiAgICogYG5vcm1hbGAg4oCUIGxpc3QgZWxlbWVudHMgYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZSBjb2xsZWN0aW9uIHNlcXVlbmNlLlxyXG4gICAqIGBpbmZpbml0eWAg4oCUIGxpc3QgZWxlbWVudHMgYXJlIG9yZGVyZWQgY3ljbGljYWxseSwgZm9ybWluZyBhbiBpbmZpbml0ZSBsaXN0LlxyXG4gICAqIFdoZW4gc2V0IHRvIGBpbmZpbml0eWAsIHRoZSBgYWxpZ25tZW50YCBwcm9wZXJ0eSBpcyBmb3JjZWQgdG8gdGhlIHZhbHVlIGBBbGlnbm1lbnRzLkNFTlRFUmAsIHRoZSBgc2Nyb2xsYmFyRW5hYmxlZGAgcHJvcGVydHkgaXMgZm9yY2VkIHRvIHRoZSBgZmFsc2VgXHJcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHN0YW5kYXJkYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzcHJlYWRpbmdNb2RlKHY6IFNwcmVhZGluZ01vZGUpIHtcclxuICAgIGlmICh0aGlzLl8kc3ByZWFkaW5nTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc3ByZWFkaW5nTW9kZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc3ByZWFkaW5nTW9kZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNwcmVhZGluZ01vZGUoKSB7IHJldHVybiB0aGlzLl8kc3ByZWFkaW5nTW9kZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXZpZGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfRElWSURFUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkaXZpZGVzID0gdGhpcy5fJGRpdmlkZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2RpdmlkZXNUcmFuc2Zvcm0gPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXZpZGVzXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRElWSURFUztcclxuICAgIH1cclxuICAgIHJldHVybiB2IDw9IDAgPyBERUZBVUxUX0RJVklERVMgOiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbHVtbiBvciByb3cgbnVtYmVycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDFgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpdmlkZXModjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGRpdmlkZXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2RpdmlkZXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGRpdmlkZXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkaXZpZGVzKCkgeyByZXR1cm4gdGhpcy5fJGRpdmlkZXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbW90aW9uQmx1ciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX01PVElPTl9CTFVSKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1vdGlvbkJsdXIgPSB0aGlzLl8kbW90aW9uQmx1ci5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbW90aW9uQmx1clRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVGbG9hdCh2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1vdGlvbkJsdXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9NT1RJT05fQkxVUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2IDw9IDAgPyBERUZBVUxUX01PVElPTl9CTFVSIDogdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNb3Rpb24gYmx1ciBlZmZlY3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwLjE1YC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtb3Rpb25CbHVyKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRtb3Rpb25CbHVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tb3Rpb25CbHVyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtb3Rpb25CbHVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgbW90aW9uQmx1cigpIHsgcmV0dXJuIHRoaXMuXyRtb3Rpb25CbHVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1heE1vdGlvbkJsdXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9NQVhfTU9USU9OX0JMVVIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkbWF4TW90aW9uQmx1ciA9IHRoaXMuXyRtYXhNb3Rpb25CbHVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9tYXhNb3Rpb25CbHVyVHJhbnNmb3JtID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUZsb2F0KHYpO1xyXG5cclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4TW90aW9uQmx1clwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX01BWF9NT1RJT05fQkxVUjtcclxuICAgIH1cclxuICAgIHJldHVybiB2IDw9IDAgPyBERUZBVUxUX01BWF9NT1RJT05fQkxVUiA6IHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4aW11bSBtb3Rpb24gYmx1ciBlZmZlY3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAwLjVgLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heE1vdGlvbkJsdXIodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJG1heE1vdGlvbkJsdXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21heE1vdGlvbkJsdXJUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJG1heE1vdGlvbkJsdXIubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBtYXhNb3Rpb25CbHVyKCkgeyByZXR1cm4gdGhpcy5fJG1heE1vdGlvbkJsdXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kbW90aW9uQmx1ckVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtb3Rpb25CbHVyRW5hYmxlZCA9IHRoaXMuXyRtb3Rpb25CbHVyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbW90aW9uQmx1ckVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJtb3Rpb25CbHVyRW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9NT1RJT05fQkxVUl9FTkFCTEVEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGFwcGx5IG1vdGlvbiBibHVyIG9yIG5vdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtb3Rpb25CbHVyRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9tb3Rpb25CbHVyRW5hYmxlZFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBtb3Rpb25CbHVyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRtb3Rpb25CbHVyRW5hYmxlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRhbmltYXRpb25QYXJhbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElBbmltYXRpb25QYXJhbXM+KERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUyk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRhbmltYXRpb25QYXJhbXMgPSB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25QYXJhbXNUcmFuc2Zvcm0gPSAodjogSUFuaW1hdGlvblBhcmFtcykgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2LCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoIXZhbGlkYXRlRmxvYXQodi5zY3JvbGxUb0l0ZW0pKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcm9sbFRvSXRlbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkYXRlRmxvYXQodi5zbmFwVG9JdGVtKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJzbmFwVG9JdGVtXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuICAgIH1cclxuICAgIGlmICghdmFsaWRhdGVGbG9hdCh2Lm5hdmlnYXRlQnlLZXlib2FyZCkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibmF2aWdhdGVCeUtleWJvYXJkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgbnVtYmVyYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuICAgIH1cclxuICAgIGlmICghdmFsaWRhdGVGbG9hdCh2Lm5hdmlnYXRlVG9JdGVtKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJuYXZpZ2F0ZVRvSXRlbVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImFuaW1hdGlvblBhcmFtc1wiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG9iamVjdGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBbmltYXRpb24gcGFyYW1ldGVycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJ7IHNjcm9sbFRvSXRlbTogMTUwLCBzbmFwVG9JdGVtOiAxNTAsIG5hdmlnYXRlVG9JdGVtOiAxNTAsIG5hdmlnYXRlQnlLZXlib2FyZDogNTAgfVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFuaW1hdGlvblBhcmFtcyh2OiBJQW5pbWF0aW9uUGFyYW1zKSB7XHJcbiAgICBpZiAodGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYW5pbWF0aW9uUGFyYW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRhbmltYXRpb25QYXJhbXMubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBhbmltYXRpb25QYXJhbXMoKSB7IHJldHVybiB0aGlzLl8kYW5pbWF0aW9uUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG92ZXJzY3JvbGxFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX09WRVJTQ1JPTExfRU5BQkxFRCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRvdmVyc2Nyb2xsRW5hYmxlZCA9IHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfb3ZlcnNjcm9sbEVuYWJsZWRUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odiwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJvdmVyc2Nyb2xsRW5hYmxlZFwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYGJvb2xlYW5gLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9PVkVSU0NST0xMX0VOQUJMRUQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG92ZXJzY3JvbGwgKHJlLXNjcm9sbCkgZmVhdHVyZSB3aWxsIHdvcmsuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJzY3JvbGxFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcnNjcm9sbEVuYWJsZWQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX292ZXJzY3JvbGxFbmFibGVkVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRvdmVyc2Nyb2xsRW5hYmxlZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG92ZXJzY3JvbGxFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJzY3JvbGxFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSA9ICh2OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlQm9vbGVhbih2KTtcclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIVxyXG4gICAqIEVuYWJsZXMgYnVmZmVyIG9wdGltaXphdGlvbi5cclxuICAgKiBDYW4gb25seSBiZSB1c2VkIGlmIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIGFyZSBub3QgYWRkZWQgb3IgdXBkYXRlZC4gT3RoZXJ3aXNlLCBhcnRpZmFjdHMgaW4gdGhlIGZvcm0gb2YgdHdpdGNoaW5nIG9mIHRoZSBzY3JvbGwgYXJlYSBhcmUgcG9zc2libGUuXHJcbiAgICogV29ya3Mgb25seSBpZiB0aGUgcHJvcGVydHkgZHluYW1pYyA9IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvblRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24oKSB7IHJldHVybiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtUmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtUmVuZGVyZXJUcmFuc2Zvcm0gPSAodjogVGVtcGxhdGVSZWY8YW55PikgPT4ge1xyXG4gICAgbGV0IHZhbGlkID0gdmFsaWRhdGVPYmplY3Qodik7XHJcbiAgICBpZiAodiAmJiAhKHR5cGVvZiB2LmVsZW1lbnRSZWYgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2LmNyZWF0ZUVtYmVkZGVkVmlldyA9PT0gJ2Z1bmN0aW9uJykpIHtcclxuICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgXCJpdGVtUmVuZGVyZXJcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBUZW1wbGF0ZVJlZmAuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBSZW5kZXJpbmcgZWxlbWVudCB0ZW1wbGF0ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1SZW5kZXJlclRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVJlbmRlcmVyLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVJlbmRlcmVyKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpIGFzIFRlbXBsYXRlUmVmPGFueT47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1Db25maWdNYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXA+KHt9KTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGl0ZW1Db25maWdNYXAgPSB0aGlzLl8kaXRlbUNvbmZpZ01hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbUNvbmZpZ01hcFRyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwKSA9PiB7XHJcbiAgICBsZXQgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdCh2KTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIGZvciAobGV0IGlkIGluIHYpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2W2lkXTtcclxuICAgICAgICAgIGlmICghaXRlbSB8fFxyXG4gICAgICAgICAgICAhdmFsaWRhdGVCb29sZWFuKGl0ZW0uY29sbGFwc2FibGUsIHRydWUpIHx8XHJcbiAgICAgICAgICAgICF2YWxpZGF0ZUJvb2xlYW4oaXRlbS5zZWxlY3RhYmxlLCB0cnVlKSB8fFxyXG4gICAgICAgICAgICAhKGl0ZW0uc3RpY2t5ID09PSB1bmRlZmluZWQgfHwgaXRlbS5zdGlja3kgPT09IDAgfHwgaXRlbS5zdGlja3kgPT09IDEgfHwgaXRlbS5zdGlja3kgPT09IDIpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1Db25maWdNYXBcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwYC4nKTtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBgc3RpY2t5YCBwb3NpdGlvbiwgYGZ1bGxTaXplYCwgYGNvbGxhcHNhYmxlYCBhbmQgYHNlbGVjdGFibGVgIGZvciB0aGUgbGlzdCBpdGVtIGVsZW1lbnQuIElmIGBzdGlja3lgIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gYHN0aWNreWAgcG9zaXRpb24gaXMgYXBwbGllZC4gXHJcbiAgICogSWYgdGhlIGBzdGlja3lgIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBgMGAsIHRoZW4gdGhlIGBzdGlja3lgIHBvc2l0aW9uIG1vZGUgaXMgZW5hYmxlZCBmb3IgdGhlIGVsZW1lbnQuIGAxYCAtIHBvc2l0aW9uIHN0YXJ0LCBgMmAgLSBwb3NpdGlvbiBlbmQuXHJcbiAgICogIERlZmF1bHQgdmFsdWUgaXMgYDBgLlxyXG4gICAqIGBzZWxlY3RhYmxlYCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQgb3Igbm90LiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cclxuICAgKiBgY29sbGFwc2FibGVgIGRldGVybWluZXMgd2hldGhlciBhbiBlbGVtZW50IHdpdGggYSBgc3RpY2t5YCBwcm9wZXJ0eSBncmVhdGVyIHRoYW4gemVybyBjYW4gY29sbGFwc2UgYW5kXHJcbiAgICogIGNvbGxhcHNlIGVsZW1lbnRzIGluIGZyb250IHRoYXQgZG8gbm90IGhhdmUgYSBgc3RpY2t5YCBwcm9wZXJ0eS5cclxuICAgKiBgZnVsbFNpemVgIGRldGVybWluZXMgdGhlIHNpemUgb2YgYW4gZWxlbWVudCB3aGVuIHJlbmRlcmluZyBsaXN0cyB3aXRoIGNlbGwgZGl2aXNpb25zLiBJZiBzdGlja3kgaXMgMSBvciAyLCBmdWxsU2l6ZSBhdXRvbWF0aWNhbGx5IGJlY29tZXMgdHJ1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXHJcbiAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaXRlbS1jb25maWctbWFwLm1vZGVsLnRzXHJcbiAgICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICAgKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtQ29uZmlnTWFwKHY6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXApIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbUNvbmZpZ01hcFRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbUNvbmZpZ01hcC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1Db25maWdNYXAoKSB7IHJldHVybiB0aGlzLl8kaXRlbUNvbmZpZ01hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpdGVtU2l6ZSA9IHRoaXMuXyRpdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIml0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBkaXJlY3Rpb24gPSAndmVydGljYWwnLCB0aGVuIHRoZSBoZWlnaHQgb2YgYSB0eXBpY2FsIGVsZW1lbnQuIElmIGRpcmVjdGlvbiA9ICdob3Jpem9udGFsJywgdGhlbiB0aGUgd2lkdGggb2YgYSB0eXBpY2FsIGVsZW1lbnQuXHJcbiAgICogSWYgdGhlIGBkeW5hbWljU2l6ZWAgcHJvcGVydHkgaXMgdHJ1ZSwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGBpdGVtU2l6ZWAgcHJvcGVydHkgXHJcbiAgICogdG8gYWRqdXN0IHRoZSBzaXplcyBvZiB0aGUgaXRlbXMgaW4gdGhlIHVuYWxsb2NhdGVkIGFyZWEuXHJcbiAgICogSWYgdGhlIHZhbHVlIGlzICd2aWV3cG9ydCcsIHRoZSBzaXplcyBvZiBlbGVtZW50cyBhcmUgYXV0b21hdGljYWxseSByZXNpemVkIHRvIGZpdCB0aGUgdmlld3BvcnQgc2l6ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtU2l6ZSh2OiBudW1iZXIgfCAndmlld3BvcnQnKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9pdGVtU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kaXRlbVNpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBpdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtaW5JdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtaW5JdGVtU2l6ZSA9IHRoaXMuXyRtaW5JdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWluSXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1pbkl0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYGR5bmFtaWNTaXplYCBwcm9wZXJ0eSBpcyBlbmFibGVkLCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBlbGVtZW50IGlzIHNldC5cclxuICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3ZpZXdwb3J0JywgdGhlIHNpemVzIG9mIGVsZW1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gZml0IHRoZSB2aWV3cG9ydCBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1pbkl0ZW1TaXplKHY6IG51bWJlciB8ICd2aWV3cG9ydCcpIHtcclxuICAgIGlmICh0aGlzLl8kbWluSXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21pbkl0ZW1TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtaW5JdGVtU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1pbkl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJG1pbkl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1heEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0lURU1fU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRtYXhJdGVtU2l6ZSA9IHRoaXMuXyRtYXhJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4SXRlbVNpemVUcmFuc2Zvcm0gPSAodjogYW55KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlRmxvYXQodikgfHwgdiA9PT0gVklFV1BPUlQ7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcIm1heEl0ZW1TaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb25lIG9mIGBudW1iZXJgLCBgdmlld3BvcnRgIG9yIGB1bmRlZmluZWRgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9JVEVNX1NJWkU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYGR5bmFtaWNTaXplYCBwcm9wZXJ0eSBpcyBlbmFibGVkLCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBlbGVtZW50IGlzIHNldC5cclxuICAgKiBJZiB0aGUgdmFsdWUgaXMgJ3ZpZXdwb3J0JywgdGhlIHNpemVzIG9mIGVsZW1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gZml0IHRoZSB2aWV3cG9ydCBzaXplLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1heEl0ZW1TaXplKHY6IG51bWJlciB8ICd2aWV3cG9ydCcpIHtcclxuICAgIGlmICh0aGlzLl8kbWF4SXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX21heEl0ZW1TaXplVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRtYXhJdGVtU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IG1heEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJG1heEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGR5bmFtaWNTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0RZTkFNSUNfU0laRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRkeW5hbWljU2l6ZSA9IHRoaXMuXyRkeW5hbWljU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZHluYW1pY1NpemVUcmFuc2Zvcm0gPSAodjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUJvb2xlYW4odik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImR5bmFtaWNTaXplXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RZTkFNSUNfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGl0ZW1zIGluIHRoZSBsaXN0IG1heSBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBtdXN0IGJlIHNwZWNpZmllZCB0byBhZGp1c3RcclxuICAgKiB0aGUgc2l6ZXMgb2YgaXRlbXMgaW4gdGhlIHVuYWxsb2NhdGVkIGFyZWEuXHJcbiAgICogSWYgZmFsc2UgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgaGF2ZSBhIGZpeGVkIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkeW5hbWljU2l6ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9keW5hbWljU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kZHluYW1pY1NpemUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkeW5hbWljU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZGlyZWN0aW9uID0gdGhpcy5fJGRpcmVjdGlvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGlyZWN0aW9uVHJhbnNmb3JtID0gKHY6IERpcmVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gJ2hvcml6b250YWwnIHx8IHYgPT09ICd2ZXJ0aWNhbCcpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXJlY3Rpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYGhvcml6b250YWxgIG9yIGB2ZXJ0aWNhbGAuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0RJUkVDVElPTjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBlbGVtZW50cyBhcmUgcGxhY2VkLiBEZWZhdWx0IHZhbHVlIGlzIFwidmVydGljYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXJlY3Rpb24odjogRGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fZGlyZWN0aW9uVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRkaXJlY3Rpb24ubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxlY3Rpb25Nb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsZWN0aW9uTW9kZT4oREVGQVVMVF9DT0xMRUNUSU9OX01PREUpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkY29sbGVjdGlvbk1vZGUgPSB0aGlzLl8kY29sbGVjdGlvbk1vZGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb25Nb2RlVHJhbnNmb3JtID0gKHY6IENvbGxlY3Rpb25Nb2RlKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSAnbm9ybWFsJyB8fCB2ID09PSAnbGF6eScpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJkaXJlY3Rpb25cIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vcm1hbGAgb3IgYGxhenlgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMRUNUSU9OX01PREU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gbW9kZXMgZm9yIGNvbGxlY3Rpb24gZWxlbWVudHMuIERlZmF1bHQgdmFsdWUgaXMgXCJub3JtYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2xsZWN0aW9uTW9kZSh2OiBDb2xsZWN0aW9uTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRjb2xsZWN0aW9uTW9kZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fY29sbGVjdGlvbk1vZGVUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGNvbGxlY3Rpb25Nb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgY29sbGVjdGlvbk1vZGUoKSB7IHJldHVybiB0aGlzLl8kY29sbGVjdGlvbk1vZGUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kYnVmZmVyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGJ1ZmZlclNpemUgPSB0aGlzLl8kYnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVJbnQodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcImJ1ZmZlclNpemVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBudW1iZXJgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9CVUZGRVJfU0laRTtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgYnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fYnVmZmVyU2l6ZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kYnVmZmVyU2l6ZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl8kYnVmZmVyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhCdWZmZXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJG1heEJ1ZmZlclNpemUgPSB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfbWF4QnVmZmVyU2l6ZVRyYW5zZm9ybSA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIGxldCB2YWwgPSB2O1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZUludCh2LCB0cnVlKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVGhlIFwibWF4QnVmZmVyU2l6ZVwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYG51bWJlcmAuJyk7XHJcbiAgICAgIHZhbCA9IERFRkFVTFRfTUFYX0JVRkZFUl9TSVpFO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlclNpemUgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsIDw9IGJ1ZmZlclNpemUpIHtcclxuICAgICAgcmV0dXJuIGJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMTAwLlxyXG4gICAqIElmIG1heEJ1ZmZlclNpemUgaXMgc2V0IHRvIGJlIGdyZWF0ZXIgdGhhbiBidWZmZXJTaXplLCB0aGVuIGFkYXB0aXZlIGJ1ZmZlciBtb2RlIGlzIGVuYWJsZWQuXHJcbiAgICogVGhlIGdyZWF0ZXIgdGhlIHNjcm9sbCBzaXplLCB0aGUgbW9yZSBlbGVtZW50cyBhcmUgYWxsb2NhdGVkIGZvciByZW5kZXJpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgbWF4QnVmZmVyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuX21heEJ1ZmZlclNpemVUcmFuc2Zvcm0odik7XHJcbiAgICBpZiAodGhpcy5fJG1heEJ1ZmZlclNpemUuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kbWF4QnVmZmVyU2l6ZS5uZXh0KHZhbCk7XHJcbiAgfTtcclxuICBnZXQgbWF4QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRtYXhCdWZmZXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc25hcHBpbmdNZXRob2QgPSB0aGlzLl8kc25hcHBpbmdNZXRob2QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwaW5nTWV0aG9kVHJhbnNmb3JtID0gKHY6IFNuYXBwaW5nTWV0aG9kKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpICYmICh2ID09PSBTbmFwcGluZ01ldGhvZHMuQURWQU5DRUQgfHwgdiA9PT0gU25hcHBpbmdNZXRob2RzLlNUQU5EQVJUKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIFwic25hcHBpbmdNZXRob2RcIiBwYXJhbWV0ZXIgbXVzdCBoYXZlIHRoZSB2YWx1ZSAnJHtTbmFwcGluZ01ldGhvZHMuQURWQU5DRUR9JyBvciAnJHtTbmFwcGluZ01ldGhvZHMuU1RBTkRBUlR9Jy5gKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU05BUFBJTkdfTUVUSE9EO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcHBpbmcgbWV0aG9kLiBEZWZhdWx0IHZhbHVlIGlzICdzdGFuZGFydCcuXHJcbiAgICogJ3N0YW5kYXJ0JyAtIENsYXNzaWMgZ3JvdXAgdmlzdWFsaXphdGlvbi5cclxuICAgKiAnYWR2YW5jZWQnIC0gQSBtYXNrIGlzIGFwcGxpZWQgdG8gdGhlIHZpZXdwb3J0IGFyZWEgc28gdGhhdCB0aGUgYmFja2dyb3VuZCBpcyBkaXNwbGF5ZWQgdW5kZXJuZWF0aCB0aGUgYXR0YWNoZWQgZ3JvdXAuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcHBpbmdNZXRob2QodjogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX3NuYXBwaW5nTWV0aG9kVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nTWV0aG9kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNpbmdNb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsYXBzaW5nTW9kZT4oREVGQVVMVF9DT0xMQVBTSU5HX01PREVTKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGNvbGxhcHNpbmdNb2RlID0gdGhpcy5fJGNvbGxhcHNpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9jb2xsYXBzaW5nTW9kZVRyYW5zZm9ybSA9ICh2OiBDb2xsYXBzaW5nTW9kZSkgPT4ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZVN0cmluZyh2KSAmJiAodiA9PT0gQ29sbGFwc2luZ01vZGVzLk5PTkUgfHwgdiA9PT0gQ29sbGFwc2luZ01vZGVzLk1VTFRJX0NPTExBUFNFIHx8IHYgPT09IENvbGxhcHNpbmdNb2Rlcy5BQ0NPUkRJT04pO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgXCJjb2xsYXBzaW5nTW9kZVwiIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlIHZhbHVlICcke1NuYXBwaW5nTWV0aG9kcy5BRFZBTkNFRH0nIG9yICcke1NuYXBwaW5nTWV0aG9kcy5TVEFOREFSVH0nLmApO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9DT0xMQVBTSU5HX01PREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW9kZSBmb3IgY29sbGFwc2luZyBsaXN0IGl0ZW1zLiBcclxuICAgKiBgbm9uZWAgLSBMaXN0IGl0ZW1zIGFyZSBub3Qgc2VsZWN0YWJsZS5cclxuICAgKiBgbXVsdGktY29sbGFwc2VgIC0gTGlzdCBpdGVtcyBhcmUgY29sbGFwc2VkIG9uZSBieSBvbmUuXHJcbiAgICogJ2FjY29yZGlvbicgLSBBY2NvcmRpb24gY29sbGFwc2libGUgbGlzdCBpdGVtcy5cclxuICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBtdWx0aS1jb2xsYXBzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbGxhcHNpbmdNb2RlKHY6IENvbGxhcHNpbmdNb2RlKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbGxhcHNpbmdNb2RlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9jb2xsYXBzaW5nTW9kZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kY29sbGFwc2luZ01vZGUubmV4dCh0cmFuc2Zvcm1lZFZhbHVlKTtcclxuICB9O1xyXG4gIGdldCBjb2xsYXBzaW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzaW5nTW9kZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIFwibWV0aG9kRm9yU2VsZWN0aW5nXCIgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBcInNlbGVjdE1vZGVcIiBwcm9wZXJ0eS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBtZXRob2RGb3JTZWxlY3RpbmcodjogYW55KSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIm1ldGhvZEZvclNlbGVjdGluZ1wiIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgXCJzZWxlY3RNb2RlXCIgcHJvcGVydHkgaW5zdGVhZC4nKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0aW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW5nTW9kZT4oREVGQVVMVF9TRUxFQ1RJTkdfTU9ERVMpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuXyRzZWxlY3RpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RpbmdNb2RlVHJhbnNmb3JtID0gKHY6IFNlbGVjdGluZ01vZGUpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodikgJiYgKHYgPT09ICdub25lJyB8fCB2ID09PSAnc2VsZWN0JyB8fCB2ID09PSAnbXVsdGktc2VsZWN0Jyk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdGluZ01vZGVcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvbmUgb2YgYG5vbmVgLCBgc2VsZWN0YCBvciBgbXVsdGktc2VsZWN0YC4nKTtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfU0VMRUNUSU5HX01PREVTO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogIE1ldGhvZCBmb3Igc2VsZWN0aW5nIGxpc3QgaXRlbXMuIERlZmF1bHQgdmFsdWUgaXMgJ25vbmUnLlxyXG4gICAqICdzZWxlY3QnIC0gTGlzdCBpdGVtcyBhcmUgc2VsZWN0ZWQgb25lIGJ5IG9uZS5cclxuICAgKiAnbXVsdGktc2VsZWN0JyAtIE11bHRpcGxlIHNlbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqICdub25lJyAtIExpc3QgaXRlbXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGluZ01vZGUodjogU2VsZWN0aW5nTW9kZSkge1xyXG4gICAgaWYgKHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVmFsdWUgPSB0aGlzLl9zZWxlY3RpbmdNb2RlVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcbiAgfTtcclxuICBnZXQgc2VsZWN0aW5nTW9kZSgpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRyYWNrQnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICR0cmFja0J5ID0gdGhpcy5fJHRyYWNrQnkuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQnlUcmFuc2Zvcm0gPSAodjogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJ0cmFja0J5XCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgc3RyaW5nYC4nKTtcclxuICAgICAgcmV0dXJuIFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYnkgd2hpY2ggdHJhY2tpbmcgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdHJhY2tCeSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fdHJhY2tCeVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kdHJhY2tCeS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JlZW5SZWFkZXJNZXNzYWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KERFRkFVTFRfU0NSRUVOX1JFQURFUl9NRVNTQUdFKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHNjcmVlblJlYWRlck1lc3NhZ2UgPSB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSA9ICh2OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVTdHJpbmcodik7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNjcmVlblJlYWRlck1lc3NhZ2VcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBzdHJpbmdgLicpO1xyXG4gICAgICByZXR1cm4gREVGQVVMVF9TQ1JFRU5fUkVBREVSX01FU1NBR0U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBNZXNzYWdlIGZvciBzY3JlZW4gcmVhZGVyLlxyXG4gICAqIFRoZSBtZXNzYWdlIGZvcm1hdCBpczogXCJzb21lIHRleHQgJDEgc29tZSB0ZXh0ICQyXCIsXHJcbiAgICogd2hlcmUgJDEgaXMgdGhlIG51bWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgc2NyZWVuIGNvbGxlY3Rpb24sXHJcbiAgICogJDIgaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzY3JlZW4gY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHByb3RlY3RlZCBzZXQgc2NyZWVuUmVhZGVyTWVzc2FnZSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5fc2NyZWVuUmVhZGVyTWVzc2FnZVRyYW5zZm9ybSh2KTtcclxuXHJcbiAgICB0aGlzLl8kc2NyZWVuUmVhZGVyTWVzc2FnZS5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGdldCBzY3JlZW5SZWFkZXJNZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5fJHNjcmVlblJlYWRlck1lc3NhZ2UuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX1NDUkVFTl9SRUFERVJfTUVTU0FHRSk7XHJcbiAgcHJvdGVjdGVkICRzY3JlZW5SZWFkZXJGb3JtYXR0ZWRNZXNzYWdlID0gdGhpcy5fJHNjcmVlblJlYWRlckZvcm1hdHRlZE1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsYW5nVGV4dERpciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dERpcmVjdGlvbj4oREVGQVVMVF9MQU5HX1RFWFRfRElSKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9sYW5nVGV4dERpclRyYW5zZm9ybSA9ICh2OiBUZXh0RGlyZWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZCA9IHZhbGlkYXRlU3RyaW5nKHYpO1xyXG4gICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJsYW5nVGV4dERpclwiIHBhcmFtZXRlciBtdXN0IGJlIG9mIHR5cGUgYHN0cmluZ2AuJyk7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0xBTkdfVEVYVF9ESVI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb24gb2YgdGV4dCBmb3IgdGhlIGxvY2FsZS5cclxuICAgKiBDYW4gYmUgZWl0aGVyIFwibHRyXCIgKGxlZnQtdG8tcmlnaHQpIG9yIFwicnRsXCIgKHJpZ2h0LXRvLWxlZnQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxhbmdUZXh0RGlyKHY6IFRleHREaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2xhbmdUZXh0RGlyVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG4gIH07XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTaW5nbGVTZWxlY3Rpb24gPSB0aGlzLmdldElzU2luZ2xlU2VsZWN0aW9uKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzTXVsdGlTZWxlY3Rpb24gPSB0aGlzLmdldElzTXVsdGlTZWxlY3Rpb24oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5nZXRJc011bHRpcGxlQ29sbGFwc2UoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuZ2V0SXNBY2NvcmRpb25Db2xsYXBzZSgpO1xyXG5cclxuICBwcml2YXRlIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCgpO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRpc0luZmluaXR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkICRpc0luZmluaXR5ID0gdGhpcy5fJGlzSW5maW5pdHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBpc0luZmluaXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuXyRpc0luZmluaXR5LmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZlcnRpY2FsID0gdGhpcy5nZXRJc1ZlcnRpY2FsKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBpc1ZlcnRpY2FsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVmVydGljYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaXNWZXJ0aWNhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5pc1ZlcnRpY2FsKTtcclxuICBwcm90ZWN0ZWQgJGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRFbGVtZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkZm9jdXNlZEVsZW1lbnQgPSB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGFzc2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtjTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9Pih7fSk7XHJcbiAgcHJvdGVjdGVkICRjbGFzc2VzID0gdGhpcy5fJGNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmVyZW5kZXJFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkICRwcmVyZW5kZXJFbmFibGVkID0gdGhpcy5fJHByZXJlbmRlckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSXRlbUlkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcblxyXG4gIHByaXZhdGUgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8QmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByaXZhdGUgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcml2YXRlIF8kYm91bmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2l6ZSB8IG51bGw+KG51bGwpO1xyXG4gIHByb3RlY3RlZCAkYm91bmRzOiBPYnNlcnZhYmxlPElTaXplIHwgbnVsbD4gPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5zY3JvbGxiYXJFbmFibGVkKTtcclxuICBwcm90ZWN0ZWQgJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbEFsaWdubWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWxpZ25tZW50Pih0aGlzLmFsaWdubWVudCk7XHJcbiAgcHJvdGVjdGVkICRhY3R1YWxBbGlnbm1lbnQ6IE9ic2VydmFibGU8QWxpZ25tZW50PiA9IHRoaXMuXyRhY3R1YWxBbGlnbm1lbnQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJvdGVjdGVkIGdldCBhY3R1YWxBbGlnbm1lbnQoKSB7IHJldHVybiB0aGlzLl8kYWN0dWFsQWxpZ25tZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsSXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbE1pbkl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsTWluSXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxNaW5JdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbE1pbkl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbE1pbkl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbE1heEl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsTWF4SXRlbVNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMuXyRhY3R1YWxNYXhJdGVtU2l6ZS5hc09ic2VydmFibGUoKTtcclxuICBwcm90ZWN0ZWQgZ2V0IGFjdHVhbE1heEl0ZW1TaXplKCkgeyByZXR1cm4gdGhpcy5fJGFjdHVhbE1heEl0ZW1TaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRvdGFsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGxpc3RCb3VuZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElTaXplIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaXNTY3JvbGxTdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHByaXZhdGUgXyRpc1Njcm9sbEVuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF8kcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLl8kYWN0dWFsU2Nyb2xsU3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxTY3JvbGxFbmRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRhY3R1YWxTY3JvbGxFbmRPZmZzZXQgPSB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc3RhcnRPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcHJvdGVjdGVkICRzdGFydE9mZnNldCA9IHRoaXMuXyRzdGFydE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGVuZE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGVuZE9mZnNldCA9IHRoaXMuXyRlbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxTbmFwU2Nyb2xsVG9TdGFydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kYWN0dWFsU25hcFNjcm9sbFRvRW5kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgXyRhbGlnbm1lbnRTY3JvbGxTdGFydE9mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICBwcm90ZWN0ZWQgJGFsaWdubWVudFNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudFNjcm9sbFN0YXJ0T2Zmc2V0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHByb3RlY3RlZCAkYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSwgc2Nyb2xsZXIgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKSwgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpLCBzbmFwcGVkQ29tcG9uZW50cyA9IHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cztcclxuICAgIGlmICghIWxpc3QgJiYgISFzY3JvbGxlciAmJiBzbmFwcGVkQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBsaXN0Qm91bmRzID0gbGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBjb21wIG9mIHNuYXBwZWRDb21wb25lbnRzKSB7XHJcbiAgICAgICAgaWYgKCEhY29tcCkge1xyXG4gICAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyTGVuZ3RoID0gYCR7aXNWZXJ0aWNhbCA/IGxpc3RCb3VuZHMud2lkdGggOiBsaXN0Qm91bmRzLmhlaWdodH0ke1BYfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzbmFwcGluZ01ldGhvZCA9IHRoaXMuc25hcHBpbmdNZXRob2Q7XHJcbiAgICAgIGlmIChzbmFwcGluZ01ldGhvZCA9PT0gU25hcHBpbmdNZXRob2RzLkFEVkFOQ0VEKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcHBlZENvbXBvbmVudCA9IHNuYXBwZWRDb21wb25lbnRzPy5bMF0/Lmluc3RhbmNlO1xyXG4gICAgICAgIGlmICghIXNuYXBwZWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LCBsYW5nVGV4dERpciA9IHRoaXMubGFuZ1RleHREaXI7XHJcblxyXG4gICAgICAgICAgc25hcHBlZENvbXBvbmVudC5lbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgMCBMIDAgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRofSAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGh9IDAgWlwiKWA7XHJcblxyXG4gICAgICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudCA9IHNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQsIGRlbHRhID0gc25hcHBlZENvbXBvbmVudC5pdGVtPy5tZWFzdXJlcy5kZWx0YSA/PyAwLFxyXG4gICAgICAgICAgICBzY3JvbGxCYXJTaXplID0gdGhpcy5zY3JvbGxiYXJUaGlja25lc3M7XHJcblxyXG4gICAgICAgICAgbGV0IHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgIHJpZ2h0ID0gd2lkdGggLSBzY3JvbGxCYXJTaXplICsgMjtcclxuICAgICAgICAgICAgdG9wID0gc0hlaWdodDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICBpZiAobGFuZ1RleHREaXIgPT09IFRleHREaXJlY3Rpb25zLlJUTCkge1xyXG4gICAgICAgICAgICAgIHNjcm9sbGVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAwIDAgTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7dG9wICsgZGVsdGF9IEwgJHtzY3JvbGxCYXJTaXplfSAke3RvcCArIGRlbHRhfSBMICR7c2Nyb2xsQmFyU2l6ZX0gMCBaXCIpYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzY3JvbGxlckVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAke3RvcCArIGRlbHRhfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBMICR7cmlnaHR9IDAgTCAke3JpZ2h0fSAke3RvcCArIGRlbHRhfSBaXCIpYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmlnaHQgPSB3aWR0aDtcclxuICAgICAgICAgICAgdG9wID0gMDtcclxuICAgICAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICAgICAgc2Nyb2xsZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7d2lkdGh9IDAgTCAke3dpZHRofSAke2JvdHRvbX0gTCAwICR7Ym90dG9tfSBMIDAgMCBMICR7d2lkdGh9IDAgWlwiKWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGZvY3VzSXRlbSA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zaXRpb246IG51bWJlciwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUixcclxuICAgIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pID0+IHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSEsIHsgd2lkdGg6IGVsZW1lbnRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50SGVpZ2h0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxyXG4gICAgICAgIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICBtYXhQb3NpdGlvbiA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlci5zY3JvbGxXaWR0aCxcclxuICAgICAgICBlbGVtZW50U2l6ZSA9IGlzVmVydGljYWwgPyBlbGVtZW50SGVpZ2h0IDogZWxlbWVudFdpZHRoO1xyXG4gICAgICBsZXQgcG9zOiBudW1iZXIgPSBOdW1iZXIuTmFOO1xyXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuU1RBUlQ6IHtcclxuICAgICAgICAgIGNvbnN0IHAgPSBwb3NpdGlvbiArIHNjcm9sbGVyLnN0YXJ0TGF5b3V0T2Zmc2V0O1xyXG4gICAgICAgICAgcG9zID0gc2Nyb2xsZXIuaW52ZXJ0ZWQgPyAobWF4UG9zaXRpb24gLSBwKSA6IHA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSOiB7XHJcbiAgICAgICAgICBjb25zdCBwID0gcG9zaXRpb24gLSAodmlld3BvcnRTaXplIC0gZWxlbWVudFNpemUpICogLjUgKyBzY3JvbGxlci5zdGFydExheW91dE9mZnNldDtcclxuICAgICAgICAgIHBvcyA9IHNjcm9sbGVyLmludmVydGVkID8gKG1heFBvc2l0aW9uIC0gcCkgOiBwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgRm9jdXNBbGlnbm1lbnRzLkVORDoge1xyXG4gICAgICAgICAgY29uc3QgcCA9IHBvc2l0aW9uIC0gKHZpZXdwb3J0U2l6ZSAtIGVsZW1lbnRTaXplKSArIHNjcm9sbGVyLnN0YXJ0TGF5b3V0T2Zmc2V0O1xyXG4gICAgICAgICAgcG9zID0gc2Nyb2xsZXIuaW52ZXJ0ZWQgPyAobWF4UG9zaXRpb24gLSBwKSA6IHA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBGb2N1c0FsaWdubWVudHMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocG9zKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgIFt0aGlzLl9pc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogcG9zLCBiZWhhdmlvciwgc25hcDogZmFsc2UsIG5vcm1hbGl6ZTogdHJ1ZSxcclxuICAgICAgICAgIGZpcmVVcGRhdGU6IGZhbHNlLCBibGVuZGluZzogZmFsc2UsIHVzZXJBY3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgZHVyYXRpb246IHRoaXMuc25hcFRvSXRlbSA/IE1hdGgubWF4KHRoaXMuYW5pbWF0aW9uUGFyYW1zLnNjcm9sbFRvSXRlbSwgdGhpcy5hbmltYXRpb25QYXJhbXMubmF2aWdhdGVUb0l0ZW0pIDogdGhpcy5hbmltYXRpb25QYXJhbXMubmF2aWdhdGVUb0l0ZW0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzY3JvbGxlci5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyBvZiB0aGUgZWxlbWVudCBjb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtQ29tcG9uZW50Q2xhc3M6IENvbXBvbmVudCQxPEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+ID0gTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ7XHJcbiAgcHJvdGVjdGVkIGdldCBpdGVtQ29tcG9uZW50Q2xhc3MoKSB7IHJldHVybiB0aGlzLl9pdGVtQ29tcG9uZW50Q2xhc3M7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBjbGFzcyB0cmFja0JveFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYWNrQm94Q2xhc3M6IENvbXBvbmVudCQxPFRyYWNrQm94PiA9IFRyYWNrQm94O1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IG9mIGVsZW1lbnQgc2l6ZXMgYnkgdGhlaXIgaWRcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggPSBuZXcgdGhpcy5fdHJhY2tCb3hDbGFzcyh0aGlzLnRyYWNrQnkpO1xyXG5cclxuICBwcml2YXRlIF8kdXBkYXRlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkdXBkYXRlID0gdGhpcy5fJHVwZGF0ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvID0gbmV3IFN1YmplY3Q8SVNjcm9sbFBhcmFtcz4oKTtcclxuICBwcm90ZWN0ZWQgJHNjcm9sbFRvID0gdGhpcy5fJHNjcm9sbFRvLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9FeGVjdXRvciA9IG5ldyBTdWJqZWN0PElTY3JvbGxQYXJhbXM+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRzY3JvbGxUb0V4ZWN1dG9yID0gdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxpbmdUbyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsID0gbmV3IFN1YmplY3Q8SVNjcm9sbEV2ZW50PigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGwgPSB0aGlzLl8kc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGljayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHRpY2sgPSB0aGlzLl8kdGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGZpcmVVcGRhdGUgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSAkZmlyZVVwZGF0ZSA9IHRoaXMuXyRmaXJlVXBkYXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kZmlyZVVwZGF0ZU5leHRGcmFtZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5ICRmaXJlVXBkYXRlTmV4dEZyYW1lID0gdGhpcy5fJGZpcmVVcGRhdGVOZXh0RnJhbWUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHByZXZlbnRTY3JvbGxTbmFwcGluZyA9IHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUlkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3JlYWR5Rm9yU2hvdyA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jYWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJvdGVjdGVkIGdldCBjYWNoYWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmVyZW5kZXI/LmFjdGl2ZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgcHJlcmVuZGVyYWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmR5bmFtaWNTaXplICYmICh0aGlzLl90cmFja0JveD8uaXNTbmFwcGVkVG9FbmQgPz8gZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJHZpZXdJbml0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSAkdmlld0luaXQgPSB0aGlzLl8kdmlld0luaXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRkZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5ICRkZXN0cm95ID0gdGhpcy5fJGRlc3Ryb3kuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMSA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDE7XHJcbiAgICB0aGlzLl9pZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS5pbml0aWFsaXplKHRoaXMuX2lkLCB0aGlzLl90cmFja0JveCk7XHJcblxyXG4gICAgY29uc3QgJGR5bmFtaWNTaXplID0gdGhpcy4kZHluYW1pY1NpemUsXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLiRzbmFwU2Nyb2xsVG9FbmQ7XHJcbiAgICBjb21iaW5lTGF0ZXN0KFskZHluYW1pY1NpemUsICRzbmFwU2Nyb2xsVG9FbmRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbZHluYW1pY1NpemUsIHNuYXBTY3JvbGxUb0VuZF0pID0+IHtcclxuICAgICAgICB0aGlzLl8kcHJlcmVuZGVyRW5hYmxlZC5uZXh0KGR5bmFtaWNTaXplICYmIHNuYXBTY3JvbGxUb0VuZCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRhbmltYXRpb25QYXJhbXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmFuaW1hdGlvblBhcmFtcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRzcHJlYWRpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzSW5maW5pdHkubmV4dChpc1NwcmVhZGluZ01vZGUodiwgU3ByZWFkaW5nTW9kZXMuSU5GSU5JVFkpKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kc3RhcnRPZmZzZXQubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJGFjdHVhbFNjcm9sbEVuZE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGVuZE9mZnNldC5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGlzSW5maW5pdHkgPSB0aGlzLiRpc0luZmluaXR5O1xyXG4gICAgJGlzSW5maW5pdHkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc0luZmluaXR5ID0gdGhpcy5fc2VydmljZS5pc0luZmluaXR5ID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR6SW5kZXhXaGVuU2VsZWN0aW5nID0gdGhpcy4kekluZGV4V2hlblNlbGVjdGluZztcclxuICAgICR6SW5kZXhXaGVuU2VsZWN0aW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS56SW5kZXhXaGVuU2VsZWN0aW5nID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLFxyXG4gICAgICAkcmF3U2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLiRzY3JvbGxTdGFydE9mZnNldCxcclxuICAgICAgJHJhd1Njcm9sbEVuZE9mZnNldCA9IHRoaXMuJHNjcm9sbEVuZE9mZnNldDtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskYm91bmRzLCAkcmF3U2Nyb2xsU3RhcnRPZmZzZXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbdl0pID0+ICEhdiksXHJcbiAgICAgIHRhcCgoW2JvdW5kcywgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VBcml0aG1ldGljRXhwcmVzc2lvbih2YWx1ZSwgdGhpcy5pc1ZlcnRpY2FsID8gYm91bmRzIS5oZWlnaHQgOiBib3VuZHMhLndpZHRoKTtcclxuICAgICAgICB0aGlzLl8kcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0Lm5leHQodmFsKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRib3VuZHMsICRyYXdTY3JvbGxFbmRPZmZzZXRdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbdl0pID0+ICEhdiksXHJcbiAgICAgIHRhcCgoW2JvdW5kcywgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VBcml0aG1ldGljRXhwcmVzc2lvbih2YWx1ZSwgdGhpcy5pc1ZlcnRpY2FsID8gYm91bmRzIS5oZWlnaHQgOiBib3VuZHMhLndpZHRoKTtcclxuICAgICAgICB0aGlzLl8kcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldC5uZXh0KHZhbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+IHYgIT09IG51bGwpLFxyXG4gICAgICB0YXAoaWQgPT4ge1xyXG4gICAgICAgIHRoaXMub25TbmFwSXRlbS5lbWl0KGlkISk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR0aWNrLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWNTaXplID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrQm91bmRzT2ZFbGVtZW50cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8udGljaygpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBsZXQgcmVhZHlGb3JBbmltYXRpb25zID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgXyRjcmVhdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXHJcbiAgICAgICRjcmVhdGVkID0gXyRjcmVhdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRjcmVhdGVkLCB0aGlzLiRzaG93XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW2NyZWF0ZWQsIHNob3duXSkgPT4gY3JlYXRlZCAmJiBzaG93biksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbGVyLm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbFZpZXdwb3J0KTtcclxuICAgIHRoaXMuXyRsaXN0Lm5leHQodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbENvbnRlbnQpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLFxyXG4gICAgICAkc2Nyb2xsZXJDb21wb25lbnQgPSBvZih0aGlzLl9zY3JvbGxlckNvbXBvbmVudCksXHJcbiAgICAgICRyZXNpemVWaWV3cG9ydCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kcmVzaXplVmlld3BvcnQpLFxyXG4gICAgICApLFxyXG4gICAgICAkcmVzaXplQ29udGVudCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgc3dpdGNoTWFwKHNjcm9sbGVyID0+IHNjcm9sbGVyIS4kcmVzaXplQ29udGVudCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNjcm9sbGVyQ29tcG9uZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxEaXJlY3Rpb24pLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGlyZWN0aW9uID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRyZXNpemVWaWV3cG9ydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRib3VuZHMubmV4dCh2KTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJSZXNpemUodHJ1ZSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkcmVzaXplQ29udGVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRsaXN0Qm91bmRzLm5leHQodik7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyUmVzaXplKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdHJhY2tCeSA9IHRoaXMuJHRyYWNrQnk7XHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UudHJhY2tCeSA9IHRoaXMuX3RyYWNrQm94LnRyYWNrQnkgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guZGlzcGxheUNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuXHJcbiAgICBsZXQgaGFzVXNlckFjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0ICRpdGVtU2l6ZSA9IHRoaXMuJGl0ZW1TaXplLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiB2IDw9IDAgPyBERUZBVUxUX0lURU1fU0laRSA6IHYpLFxyXG4gICAgKSxcclxuICAgICAgJG1pbkl0ZW1TaXplID0gdGhpcy4kbWluSXRlbVNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgdiA8PSAwID8gREVGQVVMVF9NSU5fSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRtYXhJdGVtU2l6ZSA9IHRoaXMuJG1heEl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIHYgPD0gMCA/IERFRkFVTFRfTUFYX0lURU1fU0laRSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsU3RhcnRPZmZzZXQgPSB0aGlzLiRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICksXHJcbiAgICAgICRzY3JvbGxFbmRPZmZzZXQgPSB0aGlzLiRhY3R1YWxTY3JvbGxFbmRPZmZzZXQucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRtaW5JdGVtU2l6ZSwgJGJvdW5kcywgJHNjcm9sbFN0YXJ0T2Zmc2V0LCAkc2Nyb2xsRW5kT2Zmc2V0XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcCgoW3YsIGJvdW5kcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0pID0+IHtcclxuICAgICAgICBpZiAoKHYgYXMgYW55KSA9PT0gVklFV1BPUlQpIHtcclxuICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsIHZpZXdwb3J0Qm91bmRzID0gYm91bmRzLFxyXG4gICAgICAgICAgICByZXN1bHQgPSAoaXNWZXJ0aWNhbCA/ICh2aWV3cG9ydEJvdW5kcz8uaGVpZ2h0ID8/IDApIDogKHZpZXdwb3J0Qm91bmRzPy53aWR0aCA/PyAwKSkgLSBzdGFydE9mZnNldCAtIGVuZE9mZnNldDtcclxuICAgICAgICAgIHJldHVybiBvZihyZXN1bHQgPD0gMCA/IDEgOiByZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2Yodik7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbE1pbkl0ZW1TaXplLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskbWF4SXRlbVNpemUsICRib3VuZHMsICRzY3JvbGxTdGFydE9mZnNldCwgJHNjcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt2LCBib3VuZHMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXRdKSA9PiB7XHJcbiAgICAgICAgaWYgKCh2IGFzIGFueSkgPT09IFZJRVdQT1JUKSB7XHJcbiAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLCB2aWV3cG9ydEJvdW5kcyA9IGJvdW5kcyxcclxuICAgICAgICAgICAgcmVzdWx0ID0gKGlzVmVydGljYWwgPyAodmlld3BvcnRCb3VuZHM/LmhlaWdodCA/PyAwKSA6ICh2aWV3cG9ydEJvdW5kcz8ud2lkdGggPz8gMCkpIC0gc3RhcnRPZmZzZXQgLSBlbmRPZmZzZXQ7XHJcbiAgICAgICAgICByZXR1cm4gb2YocmVzdWx0IDw9IDAgPyAxIDogcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHYpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxNYXhJdGVtU2l6ZS5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGFjdHVhbE1pbkl0ZW1TaXplID0gdGhpcy4kYWN0dWFsTWluSXRlbVNpemUsXHJcbiAgICAgICRhY3R1YWxNYXhJdGVtU2l6ZSA9IHRoaXMuJGFjdHVhbE1heEl0ZW1TaXplO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpdGVtU2l6ZSwgJGJvdW5kcywgJGFjdHVhbE1pbkl0ZW1TaXplLCAkYWN0dWFsTWF4SXRlbVNpemUsICRzY3JvbGxTdGFydE9mZnNldCwgJHNjcm9sbEVuZE9mZnNldF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFt2LCBib3VuZHMsIG1pbiwgbWF4LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0XSkgPT4ge1xyXG4gICAgICAgIGlmICgodiBhcyBhbnkpID09PSBWSUVXUE9SVCkge1xyXG4gICAgICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuaXNWZXJ0aWNhbCwgdmlld3BvcnRCb3VuZHMgPSBib3VuZHMsXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IChpc1ZlcnRpY2FsID8gKHZpZXdwb3J0Qm91bmRzPy5oZWlnaHQgPz8gMCkgOiAodmlld3BvcnRCb3VuZHM/LndpZHRoID8/IDApKSAtIHN0YXJ0T2Zmc2V0IC0gZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCA8IG1pbiA/IG1pbiA6IChyZXN1bHQgPiBtYXggPyBtYXggOiByZXN1bHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHYgPCBtaW4gPyBtaW4gOiAodiA+IG1heCA/IG1heCA6IHYpKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsSXRlbVNpemUubmV4dCh2KTtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLml0ZW1TaXplID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRhY3R1YWxJdGVtU2l6ZSA9IHRoaXMuJGFjdHVhbEl0ZW1TaXplLFxyXG4gICAgICAkYWN0dWFsSXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzSXRlbS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBlbGVtZW50LCBwb3NpdGlvbiwgYWxpZ24sIGJlaGF2aW9yIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oZWxlbWVudCwgcG9zaXRpb24sIGFsaWduLCBiZWhhdmlvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkbGlzdCA9IHRoaXMuJGxpc3QucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwcmV2ZW50S2V5Ym9hcmRFdmVudCA9IChldmVudDogS2V5Ym9hcmRFdmVudCwgaXNWZXJ0aWNhbDogYm9vbGVhbikgPT4ge1xyXG4gICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0LmdldFZhbHVlKCksIHNjcm9sbGFibGUgPSBzY3JvbGxlci5zY3JvbGxhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgc2Nyb2xsV2VpZ2h0ID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyLnNjcm9sbFdpZHRoO1xyXG4gICAgICAgIGlmIChzY3JvbGxhYmxlIHx8IHNjcm9sbFNpemUgPD0gc2Nyb2xsU3RhcnRPZmZzZXQgfHwgc2Nyb2xsU2l6ZSA+PSBzY3JvbGxXZWlnaHQpIHtcclxuICAgICAgICAgIGlmICghIWV2ZW50ICYmIGV2ZW50LmNhbmNlbGFibGUpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRsaXN0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoZWxlbWVudCA9PiAhIWVsZW1lbnQpLFxyXG4gICAgICBzd2l0Y2hNYXAoZWxlbWVudCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihlbGVtZW50LCBFVkVOVF9LRVlfRE9XTikucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0xFRlQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1VQOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1JJR0hUOlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgICAgcHJldmVudEtleWJvYXJkRXZlbnQoZSwgdGhpcy5pc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9ET1dOOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgICBwcmV2ZW50S2V5Ym9hcmRFdmVudChlLCB0aGlzLmlzVmVydGljYWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLiRzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAkc2Nyb2xsYmFyVGhpY2tuZXNzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoc2Nyb2xsYmFyVGhpY2tuZXNzID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNjcm9sbEJhclNpemUgPSBzY3JvbGxiYXJUaGlja25lc3M7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRmaXJlVXBkYXRlTmV4dEZyYW1lLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbFRvSXRlbSA9IHRoaXMuJHNjcm9sbFRvLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgKSxcclxuICAgICAgJG1vdXNlRG93biA9IGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIE1PVVNFX0RPV04pLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICksXHJcbiAgICAgICR0b3VjaFN0YXJ0ID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgVE9VQ0hfU1RBUlQpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCBLRVlfRE9XTikucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcihlID0+IGUua2V5ID09PSBLRVlfVEFCKSxcclxuICAgICAgc3dpdGNoTWFwKGUgPT4ge1xyXG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVUykucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGVsYXkoMCksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHNjcm9sbFRvSXRlbSksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJG1vdXNlRG93biksXHJcbiAgICAgICAgICB0YWtlVW50aWwoJHRvdWNoU3RhcnQpLFxyXG4gICAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzRmlyc3RFbGVtZW50KCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2Nyb2xsVG9TdGFydC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TdGFydChudWxsLCBvcHRpb25zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJHNjcm9sbFRvLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAocGFyYW1zID0+IHtcclxuICAgICAgICBjb25zdCB7IGlkLCBjYiwgb3B0aW9ucyB9ID0gcGFyYW1zITtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvKGlkLCBjYiwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiRzY3JvbGxUb0VuZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9FbmQobnVsbCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRsYW5nVGV4dERpci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGFuZ1RleHREaXIgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kY2xpY2tEaXN0YW5jZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY2xpY2tEaXN0YW5jZSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzbmFwU2Nyb2xsVG9TdGFydCwgdGhpcy4kaXNJbmZpbml0eV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtzbmFwU2Nyb2xsVG9TdGFydCwgaXNJbmZpbml0eV0pID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvU3RhcnQubmV4dChpc0luZmluaXR5ID8gZmFsc2UgOiBzbmFwU2Nyb2xsVG9TdGFydCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzbmFwU2Nyb2xsVG9FbmQsIHRoaXMuJGlzSW5maW5pdHldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbc25hcFNjcm9sbFRvRW5kLCBpc0luZmluaXR5XSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxTbmFwU2Nyb2xsVG9FbmQubmV4dChpc0luZmluaXR5ID8gZmFsc2UgOiBzbmFwU2Nyb2xsVG9FbmQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHZpZXdJbml0ID0gdGhpcy4kdmlld0luaXQsXHJcbiAgICAgICRwcmVyZW5kZXJDb250YWluZXIgPSBvZih0aGlzLl9wcmVyZW5kZXIpO1xyXG5cclxuICAgIGNvbnN0ICRwcmVyZW5kZXIgPSAkdmlld0luaXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICByZXR1cm4gJHByZXJlbmRlckNvbnRhaW5lci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKHYgPT4gdiEuJHJlbmRlciksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0ICRmaXJlVXBkYXRlID0gdGhpcy4kZmlyZVVwZGF0ZTtcclxuICAgICRmaXJlVXBkYXRlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkdXBkYXRlID0gdGhpcy4kdXBkYXRlLFxyXG4gICAgICByZW5kZXJTdGFiaWxpemVyID0gKG9wdGlvbnM/OiBJUmVuZGVyU3RhYmlsaXplck9wdGlvbnMpID0+IHtcclxuICAgICAgICBsZXQgcmVuZGVyU3RhYmlsaXplclByZXZTY3JvbGxTdGF0ZVZlcnNpb24gPSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTixcclxuICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICBjb25zdCBwcmVwYXJlSXRlcmF0aW9ucyA9IG9wdGlvbnM/LnByZXBhcmVJdGVyYXRpb25zID8/IFBSRVBBUkVfSVRFUkFUSU9OUyxcclxuICAgICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aCA9IG9wdGlvbnM/LnByZXBhcmVSZXVwZGF0ZUxlbmd0aCA/PyBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEg7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gRU1QVFlfU0NST0xMX1NUQVRFX1ZFUlNJT047XHJcbiAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zID0gMDtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiAkdXBkYXRlLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgoKHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID09PSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTikgfHwgKHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uICE9PSB2KSkgJiZcclxuICAgICAgICAgICAgICAgICAgKHJlbmRlclN0YWJpbGl6ZXJVcGRhdGVJdGVyYXRpb25zIDwgcHJlcGFyZUl0ZXJhdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBFTVBUWV9TQ1JPTExfU1RBVEVfVkVSU0lPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gdjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGFiaWxpemVyUHJldlNjcm9sbFN0YXRlVmVyc2lvbiA9PT0gdikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhYmlsaXplclVwZGF0ZUl0ZXJhdGlvbnMgPCBwcmVwYXJlUmV1cGRhdGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFiaWxpemVyVXBkYXRlSXRlcmF0aW9ucysrO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlbmRlclN0YWJpbGl6ZXJQcmV2U2Nyb2xsU3RhdGVWZXJzaW9uID0gdjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgIClcclxuICAgICAgfTtcclxuICAgIGNvbnN0ICRpbml0aWFsUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICBwcmVwYXJlSXRlcmF0aW9uczogUFJFUEFSRV9JVEVSQVRJT05TLFxyXG4gICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSCxcclxuICAgIH0pLFxyXG4gICAgICAkdXBkYXRlSXRlbXNSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICAgIHByZXBhcmVSZXVwZGF0ZUxlbmd0aDogUFJFUEFSQVRJT05fUkVVUERBVEVfTEVOR1RIX0ZPUl9VUERBVEVfSVRFTVMsXHJcbiAgICAgIH0pLFxyXG4gICAgICAkY2h1bmtMb2FkaW5nUmVuZGVyU3RhYmlsaXplciA9IHJlbmRlclN0YWJpbGl6ZXIoe1xyXG4gICAgICAgIHByZXBhcmVJdGVyYXRpb25zOiBQUkVQQVJFX0lURVJBVElPTlNfRk9SX1VQREFURV9JVEVNUyxcclxuICAgICAgICBwcmVwYXJlUmV1cGRhdGVMZW5ndGg6IFBSRVBBUkFUSU9OX1JFVVBEQVRFX0xFTkdUSF9GT1JfVVBEQVRFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGNvbGxhcHNlSXRlbXNSZW5kZXJTdGFiaWxpemVyID0gcmVuZGVyU3RhYmlsaXplcih7XHJcbiAgICAgICAgcHJlcGFyZUl0ZXJhdGlvbnM6IFBSRVBBUkVfSVRFUkFUSU9OU19GT1JfQ09MTEFQU0VfSVRFTVMsXHJcbiAgICAgICAgcHJlcGFyZVJldXBkYXRlTGVuZ3RoOiBQUkVQQVJBVElPTl9SRVVQREFURV9MRU5HVEhfRk9SX0NPTExBUFNFX0lURU1TLFxyXG4gICAgICB9KSxcclxuICAgICAgJGl0ZW1Db25maWdNYXAgPSB0aGlzLiRpdGVtQ29uZmlnTWFwLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gIXYgPyB7fSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkZGl2aWRlcyA9IHRoaXMuJGRpdmlkZXMsXHJcbiAgICAgICRkeW5hbWljU2l6ZSA9IHRoaXMuJGR5bmFtaWNTaXplLFxyXG4gICAgICAkc25hcFNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvU3RhcnQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkd2FpdEZvclByZXBhcmF0aW9uID0gdGhpcy4kd2FpdEZvclByZXBhcmF0aW9uLFxyXG4gICAgICAkaXRlbXMgPSB0aGlzLiRpdGVtcztcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskdmlld0luaXQsICRwcmVyZW5kZXJDb250YWluZXIsICRkaXZpZGVzLCAkZHluYW1pY1NpemUsICRzbmFwU2Nyb2xsVG9TdGFydCwgJHNuYXBTY3JvbGxUb0VuZCwgJHdhaXRGb3JQcmVwYXJhdGlvbl0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0LCBwcmVyZW5kZXJDb250YWluZXJdKSA9PiAhIWluaXQgJiYgISFwcmVyZW5kZXJDb250YWluZXIpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHN3aXRjaE1hcCgoWywgcHJlcmVuZGVyQ29udGFpbmVyLCBkaXZpZGVzLCBkeW5hbWljU2l6ZSwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgd2FpdEZvclByZXBhcmF0aW9uXSkgPT4ge1xyXG4gICAgICAgIGlmICghIWR5bmFtaWNTaXplICYmICFzbmFwU2Nyb2xsVG9TdGFydCAmJiAhIXNuYXBTY3JvbGxUb0VuZCAmJiAhIXdhaXRGb3JQcmVwYXJhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgJGNvbGxlY3Rpb24gPSAoZGl2aWRlcyA+IDEgPyAkYWN0dWFsSXRlbXMgOiAkaXRlbXMpO1xyXG4gICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBMZW5ndGggPSBwPy5sZW5ndGggPz8gMCwgY0xlbmd0aCA9IGM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgICAgICAgICAgIHJldHVybiAhKChjTGVuZ3RoID4gMCkgfHwgKHBMZW5ndGggIT09IGNMZW5ndGggJiYgKHBMZW5ndGggPT09IDAgfHwgY0xlbmd0aCA9PT0gMCkpKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRhcChpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLmFjdHVhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgICByZWFkeUZvckFuaW1hdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVDbGVhbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICghc25hcFNjcm9sbFRvU3RhcnQgJiYgc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMud2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKHdhaXRGb3JQcmVwYXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vbih0aGlzLml0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JQcmVwYXJhdGlvbiA9IHRoaXMud2FpdEZvclByZXBhcmF0aW9uO1xyXG4gICAgICAgICAgICAgIGlmICh3YWl0Rm9yUHJlcGFyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHByZXJlbmRlckNvbnRhaW5lciEub24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJGluaXRpYWxSZW5kZXJTdGFiaWxpemVyLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwcmVyZW5kZXJDb250YWluZXIhLm9mZigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUZvclNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJlcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoIXNuYXBTY3JvbGxUb1N0YXJ0ICYmIHNuYXBTY3JvbGxUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5wcmVwYXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJlcmVuZGVyQ29udGFpbmVyIS5vZmYoKTtcclxuICAgICAgICAgIGNvbnN0ICRjb2xsZWN0aW9uID0gKGRpdmlkZXMgPiAxID8gJGFjdHVhbEl0ZW1zIDogJGl0ZW1zKTtcclxuICAgICAgICAgIHJldHVybiAkY29sbGVjdGlvbi5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgdGFwKGl0ZW1zID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZUNsZWFuKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQucHJlcGFyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuXyRjbGFzc2VzLm5leHQoeyBwcmVwYXJlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gucmVzZXRDb2xsZWN0aW9uKGl0ZW1zLCB0aGlzLmFjdHVhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpID0+IG9mKChpID8/IFtdKS5sZW5ndGggPiAwKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVhZHlGb3JTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoc25hcFNjcm9sbFRvU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc25hcFNjcm9sbFRvRW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnByZXBhcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh7IHByZXBhcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzaG93Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkaXRlbXMucGlwZShcclxuICAgICAgbWFwKHYgPT4gdj8ubGVuZ3RoID4gMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IGZhbHNlO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gJHByZXJlbmRlci5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgdGFwKGNhY2hlID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZWZyZXNoQ2FjaGUoY2FjaGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2NhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2UuJGZvY3VzZWRJZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYgPz8gbnVsbCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkbGlzdC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKGVsZW1lbnQgPT4gISFlbGVtZW50KSxcclxuICAgICAgdGFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGRlZmF1bHRJdGVtVmFsdWUgPSB0aGlzLiRkZWZhdWx0SXRlbVZhbHVlLFxyXG4gICAgICAkc2VsZWN0QnlDbGljayA9IHRoaXMuJHNlbGVjdEJ5Q2xpY2ssXHJcbiAgICAgICRjb2xsYXBzZUJ5Q2xpY2sgPSB0aGlzLiRjb2xsYXBzZUJ5Q2xpY2ssXHJcbiAgICAgICRpc1Njcm9sbFN0YXJ0ID0gdGhpcy5fJGlzU2Nyb2xsU3RhcnQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRpc1Njcm9sbEZpbmlzaGVkID0gdGhpcy5fJGlzU2Nyb2xsRW5kLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXNWZXJ0aWNhbCA9IHRoaXMuJGRpcmVjdGlvbi5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNWZXJ0aWNhbCh2IHx8IERFRkFVTFRfRElSRUNUSU9OKSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgJHNuYXBTY3JvbGxUb1N0YXJ0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9TdGFydCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcFNjcm9sbFRvRW5kLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zbmFwU2Nyb2xsVG9FbmQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzVmVydGljYWwgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGR5bmFtaWNTaXplLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5keW5hbWljID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRkZWZhdWx0SXRlbVZhbHVlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5kZWZhdWx0SXRlbVZhbHVlID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzY3JvbGxTdGFydE9mZnNldC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNjcm9sbFN0YXJ0T2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxTdGFydE9mZnNldCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsRW5kT2Zmc2V0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fc2VydmljZS5zY3JvbGxFbmRPZmZzZXQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsU3RhcnQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2Nyb2xsUmVhY2hTdGFydC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzU2Nyb2xsRmluaXNoZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHNraXAoMSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2ICYmIHRoaXMuX3JlYWR5Rm9yU2hvdyksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgICAgIHRoaXMub25TY3JvbGxSZWFjaEVuZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNlbGVjdEJ5Q2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2sgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlQnlDbGljay5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2VCeUNsaWNrID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGRpdmlkZXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5kaXZpZGVzID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGFsaWdubWVudCwgdGhpcy4kaXNJbmZpbml0eV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFthbGlnbm1lbnQsIGlzSW5maW5pdHldKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbEFsaWdubWVudC5uZXh0KGlzSW5maW5pdHkgPyBBbGlnbm1lbnRzLkNFTlRFUiA6IGFsaWdubWVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRzY3JvbGxiYXJFbmFibGVkLCB0aGlzLiRpc0luZmluaXR5XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKChbc2Nyb2xsYmFyRW5hYmxlZCwgaXNJbmZpbml0eV0pID0+IHtcclxuICAgICAgICB0aGlzLl8kYWN0dWFsU2Nyb2xsYmFyRW5hYmxlZC5uZXh0KGlzSW5maW5pdHkgPyBmYWxzZSA6IHNjcm9sbGJhckVuYWJsZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGFsaWdubWVudCA9IHRoaXMuJGFjdHVhbEFsaWdubWVudCxcclxuICAgICAgJHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0ID0gdGhpcy5fJHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRsaXN0Qm91bmRzID0gdGhpcy5fJGxpc3RCb3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICBmaWx0ZXIoYiA9PiAhIWIpLFxyXG4gICAgICApLCAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkYnVmZmVyU2l6ZSA9IHRoaXMuJGJ1ZmZlclNpemUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfQlVGRkVSX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJG1heEJ1ZmZlclNpemUgPSB0aGlzLiRtYXhCdWZmZXJTaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzbmFwVG9JdGVtID0gdGhpcy4kc25hcFRvSXRlbSxcclxuICAgICAgJHNuYXBUb0l0ZW1BbGlnbiA9IHRoaXMuJHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgJHN0aWNreUVuYWJsZWQgPSB0aGlzLiRzdGlja3lFbmFibGVkLFxyXG4gICAgICAkaXNMYXp5ID0gdGhpcy4kY29sbGVjdGlvbk1vZGUucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzTGF6eSh2IHx8IERFRkFVTFRfQ09MTEVDVElPTl9NT0RFKSksXHJcbiAgICAgICksXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy4kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy4kc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSksXHJcbiAgICAgICksXHJcbiAgICAgICRjb2xsYXBzaW5nTW9kZSA9IHRoaXMuJGNvbGxhcHNpbmdNb2RlLFxyXG4gICAgICAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuJHNlbGVjdGluZ01vZGUsXHJcbiAgICAgICRzZWxlY3RlZElkcyA9IHRoaXMuJHNlbGVjdGVkSWRzLFxyXG4gICAgICAkY29sbGFwc2VkSWRzID0gdGhpcy4kY29sbGFwc2VkSWRzLnBpcGUoXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICBtYXAodiA9PiBBcnJheS5pc0FycmF5KHYpID8gdiA6IFtdKSxcclxuICAgICAgKSxcclxuICAgICAgJGNvbGxhcHNlZEl0ZW1JZHMgPSB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgbWFwKHYgPT4gQXJyYXkuaXNBcnJheSh2KSA/IHYgOiBbXSksXHJcbiAgICAgICksXHJcbiAgICAgICRsYW5nVGV4dERpciA9IHRoaXMuJGxhbmdUZXh0RGlyLFxyXG4gICAgICAkaXRlbVRyYW5zZm9ybSA9IHRoaXMuJGl0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICRzY3JlZW5SZWFkZXJNZXNzYWdlID0gdGhpcy4kc2NyZWVuUmVhZGVyTWVzc2FnZSxcclxuICAgICAgJGRpc3BsYXlJdGVtcyA9IHRoaXMuX3NlcnZpY2UuJGRpc3BsYXlJdGVtcyxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuX3NlcnZpY2UuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskaXNWZXJ0aWNhbCwgJGxhbmdUZXh0RGlyLCAkaXRlbVRyYW5zZm9ybV0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoW2lzVmVydGljYWwsIGxhbmdUZXh0RGlyLCBpdGVtVHJhbnNmb3JtXSkgPT4ge1xyXG4gICAgICAgIGlmIChsYW5nVGV4dERpciA9PT0gVGV4dERpcmVjdGlvbnMuUlRMICYmICFpc1ZlcnRpY2FsICYmIGl0ZW1UcmFuc2Zvcm0pIHtcclxuICAgICAgICAgIHRocm93IEVycm9yKCdDdXJyZW50bHksIGNvbnZlcnRpbmcgcmlnaHQtdG8tbGVmdCBpdGVtcyBpbiBob3Jpem9udGFsIGxpc3RzIGlzIG5vdCBwb3NzaWJsZS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcFRvSXRlbS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc25hcFRvSXRlbSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkYWN0dWFsSXRlbXMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLml0ZW1zID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRhY3R1YWxJdGVtcywgJHZpZXdJbml0XSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoWywgaW5pdF0pID0+IGluaXQpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNuYXBJZk5lZWQoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpdGVtQ29uZmlnTWFwLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5pdGVtQ29uZmlnTWFwID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlZElkcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskZGlzcGxheUl0ZW1zLCAkc2NyZWVuUmVhZGVyTWVzc2FnZSwgJGlzVmVydGljYWwsICRzY3JvbGxTaXplLCAkYm91bmRzXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbaXRlbXMsIHNjcmVlblJlYWRlck1lc3NhZ2UsIGlzVmVydGljYWwsIHNjcm9sbFNpemUsIGJvdW5kc10pID0+IHtcclxuICAgICAgICB0aGlzLl8kc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZS5uZXh0KFxyXG4gICAgICAgICAgZm9ybWF0U2NyZWVuUmVhZGVyTWVzc2FnZShpdGVtcywgc2NyZWVuUmVhZGVyTWVzc2FnZSwgc2Nyb2xsU2l6ZSwgaXNWZXJ0aWNhbCwgYm91bmRzISlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGlzTGF6eS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzTGF6eSA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkaXRlbXNDb21wb3NpdGlvbiA9ICRpdGVtcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcclxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbJGNvbGxhcHNlZEl0ZW1JZHMsICRpdGVtQ29uZmlnTWFwLCAkdHJhY2tCeSwgJGRpdmlkZXNdKS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKFtjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXNdKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcblxyXG4gICAgJGl0ZW1zQ29tcG9zaXRpb24ucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHN3aXRjaE1hcCgoeyBpdGVtcywgY29sbGFwc2VkSWRzLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5LCBkaXZpZGVzIH0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgISh0aGlzLmNhY2hhYmxlICYmICF0aGlzLl9jYWNoZWQgJiZcclxuICAgICAgICAgICF0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb1N0YXJ0ICYmIHRoaXMuX3RyYWNrQm94LmlzU25hcHBlZFRvRW5kKSkge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHsgaXRlbXMsIGNvbGxhcHNlZElkcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICR1cGRhdGVJdGVtc1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKCh7IGl0ZW1zLCBjb2xsYXBzZWRJZHMsIGl0ZW1Db25maWdNYXAsIHRyYWNrQnksIGRpdmlkZXMgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhpZGRlbkl0ZW1zID0gbmV3IENNYXA8SWQsIGJvb2xlYW4+KCk7XHJcblxyXG4gICAgICAgIGxldCBpc0NvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbT8uW3RyYWNrQnldO1xyXG4gICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IChpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDApID4gMCwgY29sbGFwc2VkID0gY29sbGFwc2VkSWRzLmluY2x1ZGVzKGlkKTtcclxuICAgICAgICAgICAgaWYgKCEhZ3JvdXApIHtcclxuICAgICAgICAgICAgICBpc0NvbGxhcHNlZCA9IGNvbGxhcHNlZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoaXNDb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgIGhpZGRlbkl0ZW1zLnNldChpZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhY3R1YWxJdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbT8uW3RyYWNrQnldO1xyXG4gICAgICAgICAgaWYgKCEhaXRlbSAmJiBoaWRkZW5JdGVtcy5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWN0dWFsSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDb2xsZWN0aW9uID0gbm9ybWFsaXplQ29sbGVjdGlvbihhY3R1YWxJdGVtcywgaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSwgZGl2aWRlcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uaW52ZXJ0ZWQpIHtcclxuICAgICAgICAgIG5vcm1hbGl6ZWRDb2xsZWN0aW9uLnJldmVyc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxJdGVtcy5uZXh0KG5vcm1hbGl6ZWRDb2xsZWN0aW9uKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRpc1ZlcnRpY2FsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5faXNWZXJ0aWNhbCA9IHY7XHJcbiAgICAgICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRvZ2dsZUNsYXNzTmFtZShlbCwgdiA/IENMQVNTX0xJU1RfVkVSVElDQUwgOiBDTEFTU19MSVNUX0hPUklaT05UQUwsIHYgPyBDTEFTU19MSVNUX0hPUklaT05UQUwgOiBDTEFTU19MSVNUX1ZFUlRJQ0FMKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX3RyYWNrQm94LmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2VsZWN0aW5nTW9kZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpZiAodGhpcy5nZXRJc011bHRpU2VsZWN0aW9uKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc011bHRpU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX2lzU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoISFlbCkge1xyXG4gICAgICAgICAgICAoZWwgYXMgYW55KS5yb2xlID0gUk9MRV9MSVNUX0JPWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0aW5nTW9kZSA9IFNlbGVjdGluZ01vZGVzVHlwZXMuTVVMVElfU0VMRUNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc1NpbmdsZVNlbGVjdGlvbih2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSkge1xyXG4gICAgICAgICAgdGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCEhZWwpIHtcclxuICAgICAgICAgICAgKGVsIGFzIGFueSkucm9sZSA9IFJPTEVfTElTVF9CT1g7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdGluZ01vZGUgPSBTZWxlY3RpbmdNb2Rlc1R5cGVzLlNFTEVDVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNOb25lU2VsZWN0aW9uKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSB7XHJcbiAgICAgICAgICB0aGlzLl9pc1NpbmdsZVNlbGVjdGlvbiA9IHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgICAgIChlbCBhcyBhbnkpLnJvbGUgPSBST0xFX0xJU1Q7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLnNlbGVjdGluZ01vZGUgPSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0SXNOb25lQ29sbGFwc2UoKSkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc05vbmVDb2xsYXBzZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzQWNjb3JkaW9uQ29sbGFwc2UgPSB0aGlzLl9zZXJ2aWNlLmlzTXVsdGlwbGVDb2xsYXBzZSA9IHRoaXMuX2lzQWNjb3JkaW9uQ29sbGFwc2UgPSB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNNdWx0aXBsZUNvbGxhcHNlKCkpIHtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNNdWx0aXBsZUNvbGxhcHNlID0gdGhpcy5faXNNdWx0aXBsZUNvbGxhcHNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuaXNBY2NvcmRpb25Db2xsYXBzZSA9IHRoaXMuX3NlcnZpY2UuaXNOb25lQ29sbGFwc2UgPSB0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzQWNjb3JkaW9uQ29sbGFwc2UoKSkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5pc0FjY29yZGlvbkNvbGxhcHNlID0gdGhpcy5faXNBY2NvcmRpb25Db2xsYXBzZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmlzTXVsdGlwbGVDb2xsYXBzZSA9IHRoaXMuX3NlcnZpY2UuaXNOb25lQ29sbGFwc2UgPSB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkcHJldmVudFNjcm9sbFNuYXBwaW5nID0gdGhpcy4kcHJldmVudFNjcm9sbFNuYXBwaW5nO1xyXG5cclxuICAgICRwcmV2ZW50U2Nyb2xsU25hcHBpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LnByZXZlbnRTY3JvbGxTbmFwcGluZyh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZEl0ZW1JZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9yZWFkeUZvclNob3cpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAkY29sbGFwc2VJdGVtc1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRmaXJlVXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgbGV0IGlzQ2h1bmtMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBjb25zdCAkbG9hZGluZyA9IHRoaXMuJGxvYWRpbmc7XHJcbiAgICAkbG9hZGluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgc2tpcCgxKSxcclxuICAgICAgZmlsdGVyKHYgPT4gIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIGlzQ2h1bmtMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBzY3JvbGxiYXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgICBpZiAoISFzY3JvbGxiYXIpIHtcclxuICAgICAgICAgIHNjcm9sbGJhci5zdG9wU2Nyb2xsYmFyKCk7XHJcbiAgICAgICAgICBzY3JvbGxiYXIucmVmcmVzaFNjcm9sbGJhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJGFjdHVhbEl0ZW1zLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZU5leHRGcmFtZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gJGNodW5rTG9hZGluZ1JlbmRlclN0YWJpbGl6ZXIucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaXNDaHVua0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5yZXNldENhY2hlQ2h1bmtJbmZvKCk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsYmFyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKCEhc2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxiYXIuc3RvcFNjcm9sbGJhcigpO1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsYmFyLnJlZnJlc2hTY3JvbGxiYXIoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRsb2FkaW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBza2lwKDEpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgIHRoaXMuX2lzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZmlsdGVyKHYgPT4gIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGxldCBwcmV2Q2FjaGVWZXJzaW9uOiBudW1iZXIgPSAtMSwgcHJldlNjcm9sbGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAkdmlld0luaXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNob3cucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKE1hdGgubWF4KDUwMCwgdGhpcy5fJGFuaW1hdGlvblBhcmFtcy5nZXRWYWx1ZSgpLnNjcm9sbFRvSXRlbSkpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyB8fCAodGhpcy5jYWNoYWJsZSAmJiB0aGlzLl9jYWNoZWQpKSB7XHJcbiAgICAgICAgICAgICAgcmVhZHlGb3JBbmltYXRpb25zID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZSA9IChwYXJhbXM6IHtcclxuICAgICAgYWxpZ25tZW50OiBBbGlnbm1lbnQ7IHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldDogbnVtYmVyOyBwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXI7IHRyYWNrQnk6IHN0cmluZzsgaXNJbmZpbml0eTogYm9vbGVhbjtcclxuICAgICAgc25hcFNjcm9sbFRvU3RhcnQ6IGJvb2xlYW4sIHNuYXBTY3JvbGxUb0VuZDogYm9vbGVhbjsgYm91bmRzOiBJU2l6ZTsgbGlzdEJvdW5kczogSVNpemU7IHNjcm9sbEVuZE9mZnNldDogbnVtYmVyO1xyXG4gICAgICBpdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjxPYmplY3Q+OyBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwOyBzY3JvbGxTaXplOiBudW1iZXI7IGl0ZW1TaXplOiBudW1iZXI7XHJcbiAgICAgIG1pbkl0ZW1TaXplOiBudW1iZXI7IG1heEl0ZW1TaXplOiBudW1iZXI7IGJ1ZmZlclNpemU6IG51bWJlcjsgbWF4QnVmZmVyU2l6ZTogbnVtYmVyOyBzdGlja3lFbmFibGVkOiBib29sZWFuOyBpc1ZlcnRpY2FsOiBib29sZWFuO1xyXG4gICAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjsgZGl2aWRlczogbnVtYmVyOyBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiBib29sZWFuOyBjYWNoZVZlcnNpb246IG51bWJlcjsgdXNlckFjdGlvbjogYm9vbGVhbjtcclxuICAgICAgc25hcFRvSXRlbTogYm9vbGVhbiwgc25hcFRvSXRlbUFsaWduOiBTbmFwVG9JdGVtQWxpZ24sIGNvbGxhcHNlZElkczogQXJyYXk8SWQ+OyBpdGVtVHJhbnNmb3JtOiBJdGVtVHJhbnNmb3JtIHwgbnVsbDtcclxuICAgIH0pID0+IHtcclxuICAgICAgY29uc3Qge1xyXG4gICAgICAgIGFsaWdubWVudCwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgIG1heEl0ZW1TaXplLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgc25hcFRvSXRlbSxcclxuICAgICAgICBzbmFwVG9JdGVtQWxpZ24sIHVzZXJBY3Rpb24sIGNvbGxhcHNlZElkcywgY2FjaGVWZXJzaW9uLCBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICB9ID0gcGFyYW1zO1xyXG4gICAgICBjb25zdCBjYWNoZUNoYW5nZWQgPSBwcmV2Q2FjaGVWZXJzaW9uICE9PSBjYWNoZVZlcnNpb247XHJcbiAgICAgIHByZXZDYWNoZVZlcnNpb24gPSBjYWNoZVZlcnNpb247XHJcbiAgICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xyXG4gICAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICAgIGNvbnN0IGlzSW5maW5pdHkgPSB0aGlzLmlzSW5maW5pdHksIGNvbGxhcHNhYmxlID0gY29sbGFwc2VkSWRzLmxlbmd0aCA+IDAsIGNhY2hhYmxlID0gdGhpcy5jYWNoYWJsZSwgY2FjaGVkID0gdGhpcy5fY2FjaGVkLCB3YWl0aW5nQ2FjaGUgPSBjYWNoYWJsZSAmJiAhY2FjaGVkLFxyXG4gICAgICAgICAgZW1pdFVwZGF0ZSA9ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgd2FpdGluZ0NhY2hlIHx8IGNvbGxhcHNhYmxlIHx8IGlzQ2h1bmtMb2FkaW5nLFxyXG4gICAgICAgICAgZmlyZVVwZGF0ZSA9ICF0aGlzLl9yZWFkeUZvclNob3cgfHwgdGhpcy5fJHNjcm9sbGluZ1RvLmdldFZhbHVlKCksXHJcbiAgICAgICAgICBmaXJlVXBkYXRlQXRFZGdlcyA9IGZpcmVVcGRhdGUgfHwgIWlzSW5maW5pdHksXHJcbiAgICAgICAgICB1c2VBbmltYXRpb25zID0gIWlzSW5maW5pdHkgJiYgcmVhZHlGb3JBbmltYXRpb25zICYmIHByZXZTY3JvbGxhYmxlO1xyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cgfHwgKGNhY2hhYmxlICYmIGNhY2hlZCkpIHtcclxuICAgICAgICAgIGNvbnN0IGludmVydGVkID0gc2Nyb2xsZXIuaW52ZXJ0ZWQsXHJcbiAgICAgICAgICAgIGN1cnJlbnRTY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSwgbWF4U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGgpO1xyXG4gICAgICAgICAgbGV0IGFjdHVhbFNjcm9sbFNpemUgPSAhdGhpcy5fcmVhZHlGb3JTaG93ICYmIHNuYXBTY3JvbGxUb0VuZCA/IG1heFNjcm9sbFNpemUgOlxyXG4gICAgICAgICAgICAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzLFxyXG4gICAgICAgICAgICBvcHRzOiBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgICAgYWxpZ25tZW50LCBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLCBtYXhJdGVtU2l6ZSwgYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZSxcclxuICAgICAgICAgICAgICBzY3JvbGxTaXplOiBpbnZlcnRlZCA/IG1heFNjcm9sbFNpemUgLSBhY3R1YWxTY3JvbGxTaXplIDogYWN0dWFsU2Nyb2xsU2l6ZSwgc3RpY2t5RW5hYmxlZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgICAgICBzbmFwVG9JdGVtLCBzbmFwVG9JdGVtQWxpZ24sIGludmVydGVkLCBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmIChzbmFwU2Nyb2xsVG9FbmQgJiYgIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplMSwgbGVmdExheW91dE9mZnNldDogbGVmdExheW91dE9mZnNldDEgfSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBpbnZlcnRlZCA/IG1heFNjcm9sbFNpemUgLSBhY3R1YWxTY3JvbGxTaXplIDogYWN0dWFsU2Nyb2xsU2l6ZSB9KTtcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zID0gY2FsY3VsYXRlZERpc3BsYXlJdGVtcztcclxuICAgICAgICAgICAgdG90YWxTaXplID0gY2FsY3VsYXRlZFRvdGFsU2l6ZTE7XHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0MTtcclxuXHJcbiAgICAgICAgICAgIGlmICghIWl0ZW1UcmFuc2Zvcm0gJiYgZHluYW1pY1NpemUgJiYgdGhpcy5fdHJhY2tCb3guZGVsdGEgIT09IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtczogY2FsY3VsYXRlZERpc3BsYXlJdGVtcywgdG90YWxTaXplOiBjYWxjdWxhdGVkVG90YWxTaXplMSwgbGVmdExheW91dE9mZnNldDogbGVmdExheW91dE9mZnNldDEgfSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7IC4uLm9wdHMsIHNjcm9sbFNpemU6IGludmVydGVkID8gKG1heFNjcm9sbFNpemUgLSBhY3R1YWxTY3JvbGxTaXplICsgdGhpcy5fdHJhY2tCb3guZGVsdGEpIDogKGFjdHVhbFNjcm9sbFNpemUgKyB0aGlzLl90cmFja0JveC5kZWx0YSkgfSk7XHJcbiAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zID0gY2FsY3VsYXRlZERpc3BsYXlJdGVtcztcclxuICAgICAgICAgICAgICB0b3RhbFNpemUgPSBjYWxjdWxhdGVkVG90YWxTaXplMTtcclxuICAgICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zOiBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IGNhbGN1bGF0ZWRUb3RhbFNpemUsIGxlZnRMYXlvdXRPZmZzZXQ6IGxlZnRMYXlvdXRPZmZzZXQxIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBvcHRzKTtcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zID0gY2FsY3VsYXRlZERpc3BsYXlJdGVtcztcclxuICAgICAgICAgICAgdG90YWxTaXplID0gY2FsY3VsYXRlZFRvdGFsU2l6ZTtcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IGxlZnRMYXlvdXRPZmZzZXQxO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEhaXRlbVRyYW5zZm9ybSAmJiBkeW5hbWljU2l6ZSAmJiB0aGlzLl90cmFja0JveC5kZWx0YSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zOiBjYWxjdWxhdGVkRGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IGNhbGN1bGF0ZWRUb3RhbFNpemUsIGxlZnRMYXlvdXRPZmZzZXQ6IGxlZnRMYXlvdXRPZmZzZXQxIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgICAgICAgICAgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBpbnZlcnRlZCA/IChtYXhTY3JvbGxTaXplIC0gYWN0dWFsU2Nyb2xsU2l6ZSArIHRoaXMuX3RyYWNrQm94LmRlbHRhKSA6IChhY3R1YWxTY3JvbGxTaXplICsgdGhpcy5fdHJhY2tCb3guZGVsdGEpIH0pO1xyXG4gICAgICAgICAgICAgIGRpc3BsYXlJdGVtcyA9IGNhbGN1bGF0ZWREaXNwbGF5SXRlbXM7XHJcbiAgICAgICAgICAgICAgdG90YWxTaXplID0gY2FsY3VsYXRlZFRvdGFsU2l6ZTtcclxuICAgICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzY3JvbGxlci50b3RhbFNpemUgPSB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgc2Nyb2xsZXIuc3RhcnRMYXlvdXRPZmZzZXQgPSBsZWZ0TGF5b3V0T2Zmc2V0O1xyXG5cclxuICAgICAgICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCh0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgICBpZiAoIV8kY3JlYXRlZC5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIF8kY3JlYXRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBhY3R1YWxTY3JvbGxTaXplICsgZGVsdGEsXHJcbiAgICAgICAgICAgIHJvdW5kZWRTY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlID0gc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSxcclxuICAgICAgICAgICAgcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXIuYWN0dWFsU2Nyb2xsV2lkdGg7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0c0J5QWxsaWdubWVudCgpO1xyXG5cclxuICAgICAgICAgIHNjcm9sbGVyLmRlbHRhID0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgcHJldlNjcm9sbGFibGUgPSBzY3JvbGxlci5zY3JvbGxhYmxlO1xyXG5cclxuICAgICAgICAgIGlmICghc2Nyb2xsZXIuZ3JhYmJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKChzbmFwU2Nyb2xsVG9TdGFydCAmJiB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb1N0YXJ0ICYmIHNjcm9sbGVyLnNjcm9sbGFibGUpIHx8XHJcbiAgICAgICAgICAgICAgKHNuYXBTY3JvbGxUb1N0YXJ0ICYmIGN1cnJlbnRTY3JvbGxTaXplIDw9IE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY3JvbGxTaXplICE9PSByb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiAwLCB1c2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBmaXJlVXBkYXRlOiBmaXJlVXBkYXRlQXRFZGdlcywgYmVoYXZpb3I6ICF1c2VBbmltYXRpb25zID8gQkVIQVZJT1JfSU5TVEFOVCA6ICgodGhpcy5hbmltYXRpb25QYXJhbXMuc2Nyb2xsVG9JdGVtID4gMCAmJiB0aGlzLnNjcm9sbEJlaGF2aW9yICE9PSBCRUhBVklPUl9JTlNUQU5UKSA/IEJFSEFWSU9SX0FVVE8gOiBCRUhBVklPUl9JTlNUQU5UKSxcclxuICAgICAgICAgICAgICAgICAgYmxlbmRpbmc6IHVzZUFuaW1hdGlvbnMgJiYgc2Nyb2xsZXIuaGFzQW5pbWF0aW9uKHRoaXMuX2FuaW1hdGlvbklkKSwgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uUGFyYW1zLnNjcm9sbFRvSXRlbSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbmltYXRpb25JZCA9IHNjcm9sbGVyPy5zY3JvbGxUbz8uKHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uSWQgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25JZCA9IGFuaW1hdGlvbklkO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuc3RvcEFuaW1hdGlvbih0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlcj8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVtaXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKChzbmFwU2Nyb2xsVG9FbmQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHx8IChzbmFwU2Nyb2xsVG9FbmQgJiYgIXNjcm9sbGVyLnNjcm9sbGFibGUpIHx8XHJcbiAgICAgICAgICAgICAgKHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgKyBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HID49IHJvdW5kZWRNYXhQb3NpdGlvbkFmdGVyVXBkYXRlKSB8fFxyXG4gICAgICAgICAgICAgIChyb3VuZGVkU2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICsgTUlOX1BJWEVMU19GT1JfUFJFVkVOVF9TTkFQUElORykpIHtcclxuICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNjcm9sbEV2ZW50KHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSxcclxuICAgICAgICAgICAgICAgIGZpcmVVcGRhdGU6IGZpcmVVcGRhdGVBdEVkZ2VzLCBiZWhhdmlvcjogIXVzZUFuaW1hdGlvbnMgPyBCRUhBVklPUl9JTlNUQU5UIDogKCh0aGlzLmFuaW1hdGlvblBhcmFtcy5zY3JvbGxUb0l0ZW0gPiAwICYmIHRoaXMuc2Nyb2xsQmVoYXZpb3IgIT09IEJFSEFWSU9SX0lOU1RBTlQpID8gQkVIQVZJT1JfQVVUTyA6IEJFSEFWSU9SX0lOU1RBTlQpLCB1c2VyQWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJsZW5kaW5nOiB1c2VBbmltYXRpb25zICYmIHNjcm9sbGVyLmhhc0FuaW1hdGlvbih0aGlzLl9hbmltYXRpb25JZCkgfHwgY2FjaGVDaGFuZ2VkLCBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25QYXJhbXMuc2Nyb2xsVG9JdGVtLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgY29uc3QgYW5pbWF0aW9uSWQgPSBzY3JvbGxlcj8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgIGlmIChhbmltYXRpb25JZCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hbmltYXRpb25JZCA9IGFuaW1hdGlvbklkO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdG9wQW5pbWF0aW9uKHRoaXMuX2FuaW1hdGlvbklkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXI/LnNjcm9sbFRvPy4ocGFyYW1zKTtcclxuICAgICAgICAgICAgICBpZiAoZW1pdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHVwZGF0ZS5uZXh0KGdldFNjcm9sbFN0YXRlVmVyc2lvbih0b3RhbFNpemUsIHRoaXMuX2lzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0KSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChzY3JvbGxTaXplICE9PSBzY3JvbGxQb3NpdGlvbkFmdGVyVXBkYXRlICYmXHJcbiAgICAgICAgICAgICgoc2Nyb2xsUG9zaXRpb25BZnRlclVwZGF0ZSA+PSAwICYmIHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUgPCByb3VuZGVkTWF4UG9zaXRpb25BZnRlclVwZGF0ZSkgfHxcclxuICAgICAgICAgICAgICAoc2Nyb2xsU2l6ZSAhPT0gcm91bmRlZE1heFBvc2l0aW9uQWZ0ZXJVcGRhdGUgfHwgY3VycmVudFNjcm9sbFNpemUgIT09IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUpKSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQodHJ1ZSwgZmFsc2UsIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25JZCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXIuc3RvcEFuaW1hdGlvbih0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uSWQgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFBvc2l0aW9uQWZ0ZXJVcGRhdGUsIGJsZW5kaW5nOiB0cnVlLCB1c2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgIGZpcmVVcGRhdGUsIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5ULCBkdXJhdGlvbjogMCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgICAgICAgaWYgKGVtaXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQoZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbWl0VXBkYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLl8kdXBkYXRlLm5leHQoZ2V0U2Nyb2xsU3RhdGVWZXJzaW9uKHRvdGFsU2l6ZSwgdGhpcy5faXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbGV0IHByZXZJdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gICAgY29uc3QgZGVib3VuY2VkVXBkYXRlID0gZGVib3VuY2UodXBkYXRlLCAwLCBNQVhfTlVNQkVSU19PRl9TS0lQU19GT1JfUVVBTElUWV9PUFRJTUlaQVRJT05fTFZMMSk7XHJcbiAgICAkdmlld0luaXQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoWyR0cmFja0J5LCB0aGlzLiRpc0luZmluaXR5LCAkc25hcFNjcm9sbFRvU3RhcnQsICRzbmFwU2Nyb2xsVG9FbmQsICRib3VuZHMsICRsaXN0Qm91bmRzLCAkc2Nyb2xsRW5kT2Zmc2V0LCAkYWN0dWFsSXRlbXMsICRpdGVtQ29uZmlnTWFwLCAkc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICRhY3R1YWxJdGVtU2l6ZSwgJGFjdHVhbE1pbkl0ZW1TaXplLCAkYWN0dWFsTWF4SXRlbVNpemUsICRjb2xsYXBzZWRJdGVtSWRzLCAkYnVmZmVyU2l6ZSwgJG1heEJ1ZmZlclNpemUsICRzdGlja3lFbmFibGVkLCAkaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICRkeW5hbWljU2l6ZSwgJGRpdmlkZXMsICRzbmFwVG9JdGVtLCAkc25hcFRvSXRlbUFsaWduLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGl0ZW1UcmFuc2Zvcm0sICRhbGlnbm1lbnQsXHJcbiAgICAgICAgICAkcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0LCAkcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgJGNhY2hlVmVyc2lvbiwgdGhpcy4kZmlyZVVwZGF0ZSxcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAoKFtcclxuICAgICAgICAgICAgdHJhY2tCeSwgaXNJbmZpbml0eSwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzLCBsaXN0Qm91bmRzLCBzY3JvbGxFbmRPZmZzZXQsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgIG1heEl0ZW1TaXplLCBjb2xsYXBzZWRJZHMsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHN0aWNreUVuYWJsZWQsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBkaXZpZGVzLCBzbmFwVG9JdGVtLCBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGl0ZW1UcmFuc2Zvcm0sIGFsaWdubWVudCwgcHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0LCBwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0LCBjYWNoZVZlcnNpb24sXHJcbiAgICAgICAgICBdKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHByZXZJdGVtcyAhPT0gaXRlbXMpIHtcclxuICAgICAgICAgICAgICBpdGVtc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHByZXZJdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZWRPcHRpbWl6YXRpb24gPSB0aGlzLnNjcm9sbGluZ1NldHRpbmdzPy5vcHRpbWl6YXRpb24gPz8gREVGQVVMVF9TQ1JPTExJTkdfU0VUVElOR1Mub3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgICAgIHZlbG9jaXR5ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LmF2ZXJhZ2VWZWxvY2l0eSA/PyAwLFxyXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nID0gdGhpcy5fJHNjcm9sbGluZ1RvLmdldFZhbHVlKCksXHJcbiAgICAgICAgICAgICAgdXNlRGVib3VuY2VkVXBkYXRlID0gKGR5bmFtaWNTaXplICYmICFpdGVtVHJhbnNmb3JtKSAmJiAhKHNuYXBTY3JvbGxUb0VuZCAmJiB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkgJiYgIWl0ZW1zQ2hhbmdlZCAmJiBoYXNVc2VyQWN0aW9uICYmICFpc1Njcm9sbGluZyAmJlxyXG4gICAgICAgICAgICAgICAgKHZlbG9jaXR5ID4gMCAmJiB2ZWxvY2l0eSA8IE1BWF9WRUxPQ0lUWV9GT1JfU0NST0xMX1FVQUxJVFlfT1BUSU1JWkFUSU9OX0xWTDEpO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZE9wdGltaXphdGlvbikge1xyXG4gICAgICAgICAgICAgIGlmICh1c2VEZWJvdW5jZWRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZS5leGVjdXRlKHtcclxuICAgICAgICAgICAgICAgICAgdHJhY2tCeSwgaXNJbmZpbml0eSwgc25hcFNjcm9sbFRvU3RhcnQsIHNuYXBTY3JvbGxUb0VuZCwgYm91bmRzOiBib3VuZHMhLCBsaXN0Qm91bmRzOiBsaXN0Qm91bmRzISwgc2Nyb2xsRW5kT2Zmc2V0LCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICBtYXhJdGVtU2l6ZSwgY29sbGFwc2VkSWRzLCBidWZmZXJTaXplLCBtYXhCdWZmZXJTaXplLCBzdGlja3lFbmFibGVkLCBpc1ZlcnRpY2FsLCBkeW5hbWljU2l6ZSwgZGl2aWRlcywgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduLCBhbGlnbm1lbnQsIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uOiBoYXNVc2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzU2Nyb2xsaW5nKSB7XHJcbiAgICAgICAgICAgICAgdXBkYXRlKHtcclxuICAgICAgICAgICAgICAgIHRyYWNrQnksIGlzSW5maW5pdHksIHNuYXBTY3JvbGxUb1N0YXJ0LCBzbmFwU2Nyb2xsVG9FbmQsIGJvdW5kczogYm91bmRzISwgbGlzdEJvdW5kczogbGlzdEJvdW5kcyEsIHNjcm9sbEVuZE9mZnNldCwgaXRlbXMsIGl0ZW1Db25maWdNYXAsIHNjcm9sbFNpemUsIGl0ZW1TaXplLCBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgIG1heEl0ZW1TaXplLCBjb2xsYXBzZWRJZHMsIGJ1ZmZlclNpemUsIG1heEJ1ZmZlclNpemUsIHN0aWNreUVuYWJsZWQsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBkaXZpZGVzLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduLCBhbGlnbm1lbnQsIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCwgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCwgY2FjaGVWZXJzaW9uLCB1c2VyQWN0aW9uOiBoYXNVc2VyQWN0aW9uLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGVyID0gdGhpcy4kc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIG1hcCh2ID0+IHYhLm5hdGl2ZUVsZW1lbnQpLFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgKSxcclxuICAgICAgJHNjcm9sbGVyU2Nyb2xsID0gJHNjcm9sbGVyQ29tcG9uZW50LnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiBzY3JvbGxlciEuJHNjcm9sbCksXHJcbiAgICAgICksXHJcbiAgICAgICRzY3JvbGxlclNjcm9sbEVuZCA9ICRzY3JvbGxlckNvbXBvbmVudC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4gc2Nyb2xsZXIhLiRzY3JvbGxFbmQpLFxyXG4gICAgICApLFxyXG4gICAgICAkc2Nyb2xsYmFyU2Nyb2xsID0gJHNjcm9sbGVyQ29tcG9uZW50LnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiBzY3JvbGxlciEuJHNjcm9sbGJhclNjcm9sbCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2Nyb2xsSGFuZGxlciA9ICh1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpID0+IHtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCxcclxuICAgICAgICAgIHNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbFRvcCA6IHNjcm9sbGVyLnNjcm9sbExlZnQpLFxyXG4gICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoYWN0dWFsU2Nyb2xsU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsYmFyU2Nyb2xsLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgICAgICBpZiAoISFzY3JvbGxlckVsICYmICEhc2Nyb2xsZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudChmYWxzZSwgdGhpcy5fcmVhZHlGb3JTaG93LCBoYXNVc2VyQWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHVzZXJBY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb1N0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuXyRwcmV2ZW50U2Nyb2xsU25hcHBpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHNjcm9sbGVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBzd2l0Y2hNYXAoc2Nyb2xsZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2Nyb2xsZXJTY3JvbGwucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAodXNlckFjdGlvbiA9PiB7XHJcbiAgICAgICAgaGFzVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXJFbCA9IHRoaXMuXyRzY3JvbGxlci5nZXRWYWx1ZSgpPy5uYXRpdmVFbGVtZW50LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgICAgIGlmICghIXNjcm9sbGVyRWwgJiYgISFzY3JvbGxlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0U2Nyb2xsRXZlbnQoZmFsc2UsIHRoaXMuX3JlYWR5Rm9yU2hvdywgdXNlckFjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjcm9sbEhhbmRsZXIodXNlckFjdGlvbik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsZXIucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHN3aXRjaE1hcChzY3JvbGxlciA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRzY3JvbGxlclNjcm9sbEVuZC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCh1c2VyQWN0aW9uID0+IHtcclxuICAgICAgICBoYXNVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgICAgICBjb25zdCBzY3JvbGxlckVsID0gdGhpcy5fJHNjcm9sbGVyLmdldFZhbHVlKCk/Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbGVyQ29tcG9uZW50ID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKCEhc2Nyb2xsZXJFbCAmJiAhIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCB0aGlzLl9yZWFkeUZvclNob3csIHVzZXJBY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY3JvbGxIYW5kbGVyKHVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbFRvID0gdGhpcy4kc2Nyb2xsVG8sXHJcbiAgICAgICRzY3JvbGxUb0V4ZWN1dG9yID0gdGhpcy4kc2Nyb2xsVG9FeGVjdXRvcjtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskc2Nyb2xsZXIsICR0cmFja0J5LCAkc2Nyb2xsVG9dKS5waXBlKFxyXG4gICAgICBmaWx0ZXIoKFtzY3JvbGxlciwgLCBldmVudF0pID0+ICEhc2Nyb2xsZXIgJiYgISFldmVudCksXHJcbiAgICAgIG1hcCgoW3Njcm9sbGVyLCB0cmFja0J5LCBldmVudF0pID0+ICh7IHNjcm9sbGVyOiBzY3JvbGxlciwgdHJhY2tCeSwgZXZlbnQgfSkpLFxyXG4gICAgICBzd2l0Y2hNYXAoKHsgZXZlbnQgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGQgPSBldmVudD8uZGVsYXkgPz8gMDtcclxuICAgICAgICBpZiAoZCA+IDApIHtcclxuICAgICAgICAgIHJldHVybiBvZihldmVudCkucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgICAgICAgIGRlbGF5KGQpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKGV2ZW50KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChldmVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbGluZ1RvLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvRXhlY3V0b3IubmV4dChldmVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc2Nyb2xsVG9FeGVjdXRvci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgc3dpdGNoTWFwKGV2ZW50ID0+IHtcclxuICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBzY3JvbGxlckNvbXBvbmVudCA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgeyBpZCwgaXRlcmF0aW9uID0gMCwgYmxlbmRpbmcgPSBmYWxzZSwgaXNMYXN0SXRlcmF0aW9uID0gZmFsc2UsIGNiIH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBuZXh0SXRlcmF0aW9uID0gaXRlcmF0aW9uICsgMSwgZmluaXNoZWQgPSBuZXh0SXRlcmF0aW9uID49IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgZmlyZVVwZGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwgeyBpZCwgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBibGVuZGluZywgY2IgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVib3VuY2VkVXBkYXRlLmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLl8kcHJldmVudFNjcm9sbFNuYXBwaW5nLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmICghIXNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC5zdGFydFNjcm9sbFRvKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgIGlmICghIWl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBkeW5hbWljU2l6ZSA9IHRoaXMuZHluYW1pY1NpemUsIGl0ZW1TaXplID0gdGhpcy5hY3R1YWxJdGVtU2l6ZSwgbWluSXRlbVNpemUgPSB0aGlzLmFjdHVhbE1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgIG1heEl0ZW1TaXplID0gdGhpcy5hY3R1YWxNYXhJdGVtU2l6ZSwgc25hcFNjcm9sbFRvRW5kID0gdGhpcy5zbmFwU2Nyb2xsVG9FbmQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICBpbnZlcnRlZCA9IHNjcm9sbGVyQ29tcG9uZW50LmludmVydGVkLFxyXG4gICAgICAgICAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxXaWR0aCxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbFRvcCA6IHNjcm9sbGVyQ29tcG9uZW50LnNjcm9sbExlZnQsXHJcbiAgICAgICAgICAgICAgICBvcHRzOiBJR2V0SXRlbVBvc2l0aW9uT3B0aW9uczxJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uPiA9IHtcclxuICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0aGlzLmFjdHVhbEFsaWdubWVudCwgaW52ZXJ0ZWQsXHJcbiAgICAgICAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGNvbGxlY3Rpb246IGl0ZW1zLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLCBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZTogdGhpcy5idWZmZXJTaXplLCBtYXhCdWZmZXJTaXplOiB0aGlzLm1heEJ1ZmZlclNpemUsIGl0ZW1UcmFuc2Zvcm06IHRoaXMuaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZTogKGludmVydGVkID8gKG1heFNjcm9sbFNpemUgLSBjdXJyZW50U2Nyb2xsU2l6ZSkgOiBjdXJyZW50U2Nyb2xsU2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW06IHRoaXMuc25hcFRvSXRlbSwgc25hcFRvSXRlbUFsaWduOiB0aGlzLnNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgc3RpY2t5RW5hYmxlZDogdGhpcy5zdGlja3lFbmFibGVkLCBmcm9tSXRlbUlkOiBpZCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbjogdGhpcy5lbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHNjcm9sbFNpemUgPSBzbmFwU2Nyb2xsVG9FbmQgJiYgdGhpcy5fdHJhY2tCb3guaXNTbmFwcGVkVG9FbmQgP1xyXG4gICAgICAgICAgICAgICAgbWF4U2Nyb2xsU2l6ZSA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIGl0ZW1Db25maWdNYXAsIG9wdHMpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGJsZW5kaW5nLCBpdGVyYXRpb246IG5leHRJdGVyYXRpb24sIGNiIH1dKS5waXBlKGRlbGF5KDApKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRTaXplID0gKGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCksXHJcbiAgICAgICAgICAgICAgICB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplLCBsZWZ0TGF5b3V0T2Zmc2V0IH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLm9wdHMsIHNjcm9sbFNpemU6IChpbnZlcnRlZCA/IChtYXhTY3JvbGxTaXplIC0gc2Nyb2xsU2l6ZSkgOiBzY3JvbGxTaXplKSwgZnJvbUl0ZW1JZDogaXNMYXN0SXRlcmF0aW9uID8gdW5kZWZpbmVkIDogaWQsXHJcbiAgICAgICAgICAgICAgICB9KSwgZGVsdGExID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUb3RhbFNpemUgPSB0b3RhbFNpemUgPCB2aWV3cG9ydFNpemUgPyB2aWV3cG9ydFNpemUgOiB0b3RhbFNpemU7XHJcblxyXG4gICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnN0YXJ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgc2Nyb2xsZXJDb21wb25lbnQudG90YWxTaXplID0gbm9ybWFsaXplZFRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKyBkZWx0YTE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIG5vcm1hbGl6ZWRUb3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMudHJhY2tpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVPZmZzZXRzQnlBbGxpZ25tZW50KCk7XHJcblxyXG4gICAgICAgICAgICAgIHNjcm9sbFNpemUgPSB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIGl0ZW1Db25maWdNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogKGludmVydGVkID8gKG1heFNjcm9sbFNpemUgLSBhY3R1YWxTY3JvbGxTaXplKSA6IGFjdHVhbFNjcm9sbFNpemUpLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbFNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW2ZpbmlzaGVkLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IG5vdENoYW5nZWQgPSBzY3JvbGxTaXplID09PSBjdXJyZW50U2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICBpZiAoIW5vdENoYW5nZWQgJiYgaXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcixcclxuICAgICAgICAgICAgICAgICAgZmlyZVVwZGF0ZSwgYmxlbmRpbmcsIGZvcmNlOiB0cnVlLCBzbmFwOiBmYWxzZSwgbm9ybWFsaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtmaW5pc2hlZCwge1xyXG4gICAgICAgICAgICAgICAgICBpZCwgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBibGVuZGluZyxcclxuICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYlxyXG4gICAgICAgICAgICAgICAgfV0pLnBpcGUoZGVsYXkoMCkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSkucGlwZShkZWxheSgwKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbVt0cmFja0J5XSA9PT0gaWQpO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUgPSB0aGlzLmFjdHVhbEl0ZW1TaXplLCBpc0luZmluaXR5ID0gdGhpcy5pc0luZmluaXR5LCBzbmFwVG9JdGVtID0gdGhpcy5zbmFwVG9JdGVtLFxyXG4gICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtQWxpZ24gPSB0aGlzLnNuYXBUb0l0ZW1BbGlnbjtcclxuICAgICAgICAgICAgICAgIGxldCBzY3JvbGxTaXplID0gaW5kZXggKiBpdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNJbmZpbml0eSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc25hcFRvSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc25hcFRvSXRlbUFsaWduKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNuYXBUb0l0ZW1BbGlnbnMuQ0VOVEVSOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUgKz0gaXRlbVNpemUgKiAuNTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgfHwgeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSxcclxuICAgICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgICAgICAgICAgaW52ZXJ0ZWQgPSBzY3JvbGxlckNvbXBvbmVudC5pbnZlcnRlZCxcclxuICAgICAgICAgICAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsSGVpZ2h0IDogc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsV2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSxcclxuICAgICAgICAgICAgICAgICAgb3B0czogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiB0aGlzLmFjdHVhbEFsaWdubWVudCwgaW52ZXJ0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRzOiB7IHdpZHRoLCBoZWlnaHQgfSwgY29sbGVjdGlvbjogaXRlbXMsIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLCBpdGVtU2l6ZSwgbWluSXRlbVNpemUsIG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemU6IHRoaXMuYnVmZmVyU2l6ZSwgbWF4QnVmZmVyU2l6ZTogdGhpcy5tYXhCdWZmZXJTaXplLCBpdGVtVHJhbnNmb3JtOiB0aGlzLml0ZW1UcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZTogKGludmVydGVkID8gKG1heFNjcm9sbFNpemUgLSBhY3R1YWxTY3JvbGxTaXplKSA6IGFjdHVhbFNjcm9sbFNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbiwgc3RpY2t5RW5hYmxlZDogdGhpcy5zdGlja3lFbmFibGVkLCBmcm9tSXRlbUlkOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IChpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplLCBsZWZ0TGF5b3V0T2Zmc2V0IH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0cywgc2Nyb2xsU2l6ZTogKGludmVydGVkID8gKG1heFNjcm9sbFNpemUgLSBzY3JvbGxTaXplKSA6IHNjcm9sbFNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb21JdGVtSWQ6IGlzTGFzdEl0ZXJhdGlvbiA/IHVuZGVmaW5lZCA6IGlkLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxUb3RhbFNpemUgPSB0aGlzLmlzSW5maW5pdHkgPyAodG90YWxTaXplICsgdmlld3BvcnRTaXplKSA6IHRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVG90YWxTaXplID0gYWN0dWFsVG90YWxTaXplIDwgdmlld3BvcnRTaXplID8gdmlld3BvcnRTaXplIDogYWN0dWFsVG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIHNjcm9sbGVyQ29tcG9uZW50LnN0YXJ0TGF5b3V0T2Zmc2V0ID0gbGVmdExheW91dE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudC50b3RhbFNpemUgPSBub3JtYWxpemVkVG90YWxTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbiA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCBub3JtYWxpemVkVG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHBpbmdIYW5kbGVyKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVPZmZzZXRzQnlBbGxpZ25tZW50KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fJHByZXZlbnRTY3JvbGxTbmFwcGluZy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogSVNjcm9sbFRvUGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGZpcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgYmxlbmRpbmcsIGZvcmNlOiB0cnVlLCBzbmFwOiBmYWxzZSwgbm9ybWFsaXplOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsVG8/LihwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFt0cnVlLCB7IGlkLCBibGVuZGluZywgaXRlcmF0aW9uOiBuZXh0SXRlcmF0aW9uLCBjYiB9XSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihbZmluaXNoZWQsIHsgaWQsIGl0ZXJhdGlvbjogbmV4dEl0ZXJhdGlvbiwgYmxlbmRpbmcsIGNiIH1dKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtmaW5pc2hlZCwgcGFyYW1zXSkgPT4ge1xyXG4gICAgICAgIGlmICghZmluaXNoZWQpIHtcclxuICAgICAgICAgIHRoaXMuXyRzY3JvbGxUb0V4ZWN1dG9yLm5leHQocGFyYW1zIGFzIElTY3JvbGxQYXJhbXMpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3gucHJldmVudFNjcm9sbFNuYXBwaW5nKHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbGluZ1RvLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5maW5pc2hlZFNjcm9sbFRvKCk7XHJcbiAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsUGFyYW1zID0gcGFyYW1zIGFzIElTY3JvbGxQYXJhbXMgJiB7IHNjcm9sbENhbGxlZDogYm9vbGVhbjsgfTtcclxuICAgICAgICBzY3JvbGxQYXJhbXM/LmNiPy4oKTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlbGF5KDApLFxyXG4gICAgICB0YXAoKFtmaW5pc2hlZF0pID0+IHtcclxuICAgICAgICBpZiAoZmluaXNoZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zbmFwSWZOZWVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGl0ZW1SZW5kZXJlciA9IHRoaXMuJGl0ZW1SZW5kZXJlcjtcclxuXHJcbiAgICAkaXRlbVJlbmRlcmVyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGJvdW5kcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICBjb25zdCBzaXplOiBJU2l6ZSA9IHsgd2lkdGg6IHZhbHVlIS53aWR0aCwgaGVpZ2h0OiB2YWx1ZSEuaGVpZ2h0IH07XHJcbiAgICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlLmVtaXQob2JqZWN0QXNSZWFkb25seShzaXplKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLiR2aXJ0dWFsQ2xpY2sucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQob2JqZWN0QXNSZWFkb25seSh2KSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBsZXQgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA9IDA7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS4kc2VsZWN0ZWRJZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faXNTaW5nbGVTZWxlY3Rpb24gfHwgKHRoaXMuX2lzTXVsdGlTZWxlY3Rpb24gJiYgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCA+PSAyKSkge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuc2VsZWN0ZWRJZHM7XHJcbiAgICAgICAgICBpZiAoKHRoaXMuX2lzU2luZ2xlU2VsZWN0aW9uICYmIEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShjdXJyKSkgfHxcclxuICAgICAgICAgICAgKGlzU2VsZWN0ZWRJZHNGaXJzdEVtaXQgPT09IDIgJiYgSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKSB8fCBpc1NlbGVjdGVkSWRzRmlyc3RFbWl0ID4gMikge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoY29weVZhbHVlQXNSZWFkb25seSh2KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkSWRzRmlyc3RFbWl0IDwgMykge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZElkc0ZpcnN0RW1pdCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzZWxlY3RlZElkcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0ZWRJZHMgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJHZpZXdJbml0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlLiRjb2xsYXBzZWRJZHMucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5faXNBY2NvcmRpb25Db2xsYXBzZSB8fCB0aGlzLl9pc011bHRpcGxlQ29sbGFwc2UpICYmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycikpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZEl0ZW1JZHMubmV4dCh2KTtcclxuICAgICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2UuZW1pdChjb3B5VmFsdWVBc1JlYWRvbmx5KHYpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpdGVtQ29uZmlnTWFwLCAkZHluYW1pY1NpemUsICRkaXZpZGVzXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcigoW2l0ZW1Db25maWdNYXAsIGR5bmFtaWNTaXplLCBkaXZpZGVzXSkgPT4gISFpdGVtQ29uZmlnTWFwICYmICFkeW5hbWljU2l6ZSAmJiBkaXZpZGVzID4gMSksXHJcbiAgICAgIHRhcCgoW2l0ZW1Db25maWdNYXBdKSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBpdGVtQ29uZmlnTWFwKSB7XHJcbiAgICAgICAgICBjb25zdCBtZXRhRGF0YSA9IGl0ZW1Db25maWdNYXBbaWRdO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhPy5mdWxsU2l6ZSB8fCBtZXRhRGF0YT8uc3RpY2t5ID09PSAxIHx8IG1ldGFEYXRhPy5zdGlja3kgPT09IDIpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBhY2NlbGVyYXRlZCByZW5kZXJpbmcgYWxnb3JpdGhtIGBbZHluYW1pY1NpemVdPVwiZmFsc2VcImAgY2Fubm90IGNvcnJlY3RseSBoYW5kbGUgbm9uLXVuaWZvcm0gbGlzdHMgKHRoZSBpdGVtQ29uZmlnTWFwIHNwZWNpZmllcyBmdWxsLXNpemUgZWxlbWVudHMpLiBGb3IgY29ycmVjdCByZW5kZXJpbmcsIHNwZWNpZnkgYFtkeW5hbWljU2l6ZV09XCJ0cnVlXCJgLicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRjb2xsYXBzaW5nTW9kZSwgJGl0ZW1zLCAkaXRlbUNvbmZpZ01hcCwgJHRyYWNrQnldKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbY29sbGFwc2luZ01vZGUsIGl0ZW1zLCBpdGVtQ29uZmlnTWFwLCB0cmFja0J5XSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzQWNjb3JkaW9uID0gaXNDb2xsYXBzZU1vZGUoY29sbGFwc2luZ01vZGUsIENvbGxhcHNpbmdNb2Rlcy5BQ0NPUkRJT04pO1xyXG4gICAgICAgIGlmIChpc0FjY29yZGlvbikge1xyXG4gICAgICAgICAgY29uc3QgYWxsR3JvdXBzOiBBcnJheTxJZD4gPSBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldLCBpZCA9IGl0ZW1bdHJhY2tCeV0sIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcD8uW2lkXT8uY29sbGFwc2FibGUgPT09IHRydWU7XHJcbiAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGFsbEdyb3Vwcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCh0aGlzLl9pc0FjY29yZGlvbkNvbGxhcHNlIHx8IHRoaXMuX2lzTXVsdGlwbGVDb2xsYXBzZSkgJiYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShhbGxHcm91cHMpKSkge1xyXG4gICAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSXRlbUlkcy5uZXh0KGFsbEdyb3Vwcyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Db2xsYXBzZS5lbWl0KGNvcHlWYWx1ZUFzUmVhZG9ubHkoYWxsR3JvdXBzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGNvbGxhcHNlZEl0ZW1JZHMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlZElkcyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiRkZXN0cm95LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIGRlYm91bmNlZFVwZGF0ZS5kaXNwb3NlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl8kdmlld0luaXQubmV4dCh0cnVlKTtcclxuXHJcbiAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BZnRlclJlc2l6ZSh1cGRhdGUgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5zbmFwcGluZ0hhbmRsZXIoKTtcclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyAmJiB1cGRhdGUpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgICBjb25zdCB1cGRhdGViYWxlID0gdGhpcy5fcmVhZHlGb3JTaG93O1xyXG4gICAgICAgIGlmICh1cGRhdGViYWxlKSB7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Nyb2xsZXIucmVmcmVzaCh1cGRhdGViYWxlLCB1cGRhdGViYWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0JvdW5kc09mRWxlbWVudHMoKSB7XHJcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fdHJhY2tCb3guY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCk7XHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICBjb25zdCByZWFkeUZvclNob3cgPSB0aGlzLl9yZWFkeUZvclNob3csXHJcbiAgICAgICAgaXNTY3JvbGxpbmcgPSB0aGlzLl8kc2Nyb2xsaW5nVG8uZ2V0VmFsdWUoKTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcyh0cnVlLCByZWFkeUZvclNob3cgJiYgIWlzU2Nyb2xsaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc25hcHBpbmdIYW5kbGVyKCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmlzVmVydGljYWwsXHJcbiAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IE1hdGgucm91bmQoaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA/PyAwIDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGggPz8gMCksXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSA9IGlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgPz8gMCA6IHNjcm9sbGVyLnNjcm9sbExlZnQgPz8gMCxcclxuICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gTWF0aC5yb3VuZChzY3JvbGxTaXplKTtcclxuICAgICAgaWYgKHRoaXMuX3JlYWR5Rm9yU2hvdyAmJiAhdGhpcy5faXNMb2FkaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXNTY3JvbGxFbmQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA+PSAobWF4U2Nyb2xsU2l6ZSAtIE1JTl9QSVhFTFNfRk9SX1BSRVZFTlRfU05BUFBJTkcpKSB8fCAhc2Nyb2xsZXIuc2Nyb2xsYWJsZSB8fCB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZDtcclxuICAgICAgICBpZiAoaXNTY3JvbGxFbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGlzU2Nyb2xsU3RhcnQgPSAoYWN0dWFsU2Nyb2xsU2l6ZSA8PSBNSU5fUElYRUxTX0ZPUl9QUkVWRU5UX1NOQVBQSU5HKTtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoaXNTY3JvbGxTdGFydCk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gaXNTY3JvbGxTdGFydDtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9yZWFkeUZvclNob3cpIHtcclxuICAgICAgICBjb25zdCBzbmFwU2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRhY3R1YWxTbmFwU2Nyb2xsVG9TdGFydC5nZXRWYWx1ZSgpLCBzbmFwU2Nyb2xsVG9FbmQgPSB0aGlzLl8kYWN0dWFsU25hcFNjcm9sbFRvRW5kLmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKCFzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzbmFwU2Nyb2xsVG9TdGFydCAmJiBzbmFwU2Nyb2xsVG9FbmQpIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fJGlzU2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxTdGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guaXNTY3JvbGxFbmQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGVtaXRTY3JvbGxFdmVudChpc1Njcm9sbEVuZDogYm9vbGVhbiA9IGZhbHNlLCB1cGRhdGU6IGJvb2xlYW4gPSB0cnVlLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5fcmVhZHlGb3JTaG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbGVyRWwgPSB0aGlzLl8kc2Nyb2xsZXIuZ2V0VmFsdWUoKT8ubmF0aXZlRWxlbWVudCwgc2Nyb2xsZXJDb21wb25lbnQgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmIChzY3JvbGxlckVsICYmIHNjcm9sbGVyQ29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBzY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxUb3AgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxMZWZ0KSxcclxuICAgICAgICBtYXhTY3JvbGxTaXplID0gKGlzVmVydGljYWwgPyBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxIZWlnaHQgOiBzY3JvbGxlckNvbXBvbmVudC5zY3JvbGxXaWR0aCksXHJcbiAgICAgICAgYm91bmRzID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpIHx8IHsgeDogMCwgeTogMCwgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH07XHJcbiAgICAgIGNvbnN0IGl0ZW1zUmFuZ2UgPSBmb3JtYXRBY3R1YWxEaXNwbGF5SXRlbXModGhpcy5fc2VydmljZS5kaXNwbGF5SXRlbXMsIHRoaXMuXyRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5nZXRWYWx1ZSgpLCB0aGlzLl8kYWN0dWFsU2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCksXHJcbiAgICAgICAgc2Nyb2xsU2l6ZSwgaXNWZXJ0aWNhbCwgYm91bmRzKSxcclxuICAgICAgICBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50Py5zY3JvbGxEaXJlY3Rpb24gPz8gMCwgY29udGFpbmVyOiBzY3JvbGxlckVsLFxyXG4gICAgICAgICAgbGlzdDogdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSEubmF0aXZlRWxlbWVudCwgZGVsdGE6IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiB0aGlzLl90cmFja0JveC5kZWx0YU9mTmV3SXRlbXMsIGlzVmVydGljYWwsXHJcbiAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgaXRlbXNSYW5nZSxcclxuICAgICAgICAgIGlzRW5kOiAhc2Nyb2xsZXJDb21wb25lbnQuc2Nyb2xsYWJsZSB8fCB0aGlzLl90cmFja0JveC5pc1NuYXBwZWRUb0VuZCB8fCAoTWF0aC5yb3VuZChzY3JvbGxTaXplKSA9PT0gTWF0aC5yb3VuZChtYXhTY3JvbGxTaXplKSksXHJcbiAgICAgICAgICB1c2VyQWN0aW9uLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbC5uZXh0KGV2ZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU2Nyb2xsRW5kKSB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbEVuZC5lbWl0KGV2ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZChtPzogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5zbmFwcGluZ01ldGhvZDtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNOb25lU2VsZWN0aW9uKG0/OiBTZWxlY3RpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLnNlbGVjdGluZ01vZGU7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RNb2RlKG1vZGUsIFNlbGVjdGluZ01vZGVzLk5PTkUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc1NpbmdsZVNlbGVjdGlvbihtPzogU2VsZWN0aW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5zZWxlY3RpbmdNb2RlO1xyXG4gICAgcmV0dXJuIGlzU2VsZWN0TW9kZShtb2RlLCBTZWxlY3RpbmdNb2Rlcy5TRUxFQ1QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc011bHRpU2VsZWN0aW9uKG0/OiBTZWxlY3RpbmdNb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLnNlbGVjdGluZ01vZGU7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RNb2RlKG1vZGUsIFNlbGVjdGluZ01vZGVzLk1VTFRJX1NFTEVDVCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTm9uZUNvbGxhcHNlKG0/OiBDb2xsYXBzaW5nTW9kZSkge1xyXG4gICAgY29uc3QgbW9kZSA9IG0gfHwgdGhpcy5jb2xsYXBzaW5nTW9kZTtcclxuICAgIHJldHVybiBpc0NvbGxhcHNlTW9kZShtb2RlLCBDb2xsYXBzaW5nTW9kZXMuTk9ORSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzTXVsdGlwbGVDb2xsYXBzZShtPzogQ29sbGFwc2luZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuY29sbGFwc2luZ01vZGU7XHJcbiAgICByZXR1cm4gaXNDb2xsYXBzZU1vZGUobW9kZSwgQ29sbGFwc2luZ01vZGVzLk1VTFRJX0NPTExBUFNFKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNBY2NvcmRpb25Db2xsYXBzZShtPzogQ29sbGFwc2luZ01vZGUpIHtcclxuICAgIGNvbnN0IG1vZGUgPSBtIHx8IHRoaXMuY29sbGFwc2luZ01vZGU7XHJcbiAgICByZXR1cm4gaXNDb2xsYXBzZU1vZGUobW9kZSwgQ29sbGFwc2luZ01vZGVzLkFDQ09SRElPTik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzVmVydGljYWwoZD86IERpcmVjdGlvbikge1xyXG4gICAgY29uc3QgZGlyID0gZCB8fCB0aGlzLmRpcmVjdGlvbjtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJc0xhenkobT86IENvbGxlY3Rpb25Nb2RlKSB7XHJcbiAgICBjb25zdCBtb2RlID0gbSB8fCB0aGlzLmNvbGxlY3Rpb25Nb2RlO1xyXG4gICAgcmV0dXJuIGlzQ29sbGVjdGlvbk1vZGUobW9kZSwgQ29sbGVjdGlvbk1vZGVzLkxBWlkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zdGlja3lFbmFibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMubGVuZ3RoIDwgTUFYX1JFR1VMQVJfU05BUEVEX0NPTVBPTkVOVFMgJiYgISF0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPCBNQVhfUkVHVUxBUl9TTkFQRURfQ09NUE9ORU5UUykge1xyXG4gICAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuX2l0ZW1Db21wb25lbnRDbGFzcyk7XHJcbiAgICAgICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgY29tcC5pbnN0YW5jZS5yZWd1bGFyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cy5wdXNoKGNvbXApO1xyXG4gICAgICAgICAgdGhpcy5fdHJhY2tCb3guc25hcHBlZERpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzO1xyXG4gICAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKTtcclxuICAgICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guaXRlbXMgPSBkaXNwbGF5SXRlbXM7XHJcblxyXG4gICAgY29uc3QgbGlzdENvbnRhaW5lclJlZiA9IHRoaXMuX2xpc3RDb250YWluZXJSZWY7XHJcblxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gZGlzcGxheUl0ZW1zLmxlbmd0aCwgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIGlmICghIWxpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgZG9NYXA6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIGZvciAobGV0IGwgPSBjb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjb21wb25lbnRzW2ldO1xyXG4gICAgICAgIGlmICghIWl0ZW0pIHtcclxuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbS5pbnN0YW5jZS5pZDtcclxuICAgICAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAoY29tcG9uZW50cy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gbGlzdENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5faXRlbUNvbXBvbmVudENsYXNzKTtcclxuICAgICAgICBjb25zdCBpZCA9IGNvbXAuaW5zdGFuY2UuaWQ7XHJcbiAgICAgICAgY29tcC5pbnN0YW5jZS5yZW5kZXJlciA9IHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKTtcclxuICAgICAgICBkb01hcFtpZF0gPSBpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU9mZnNldHNCeUFsbGlnbm1lbnQoKSB7XHJcbiAgICBjb25zdCBhbGlnbm1lbnQgPSB0aGlzLl8kYWN0dWFsQWxpZ25tZW50LmdldFZhbHVlKCksIGl0ZW1zID0gdGhpcy5fJGFjdHVhbEl0ZW1zLmdldFZhbHVlKCksIHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksXHJcbiAgICAgIGlzSW5maW5pdHkgPSB0aGlzLmlzSW5maW5pdHksIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiBERUZBVUxUX0xJU1RfU0laRSwgaGVpZ2h0OiBERUZBVUxUX0xJU1RfU0laRSB9LFxyXG4gICAgICB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsXHJcbiAgICAgIHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsU3RhcnRPZmZzZXQuZ2V0VmFsdWUoKSxcclxuICAgICAgcHJlY2FsY3VsYXRlZFNjcm9sbEVuZE9mZnNldCA9IHRoaXMuXyRwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0LmdldFZhbHVlKCk7XHJcbiAgICBzd2l0Y2ggKGFsaWdubWVudCkge1xyXG4gICAgICBjYXNlIEFsaWdubWVudHMuTk9ORToge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxTY3JvbGxTdGFydE9mZnNldC5uZXh0KHByZWNhbGN1bGF0ZWRTY3JvbGxTdGFydE9mZnNldCk7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbEVuZE9mZnNldC5uZXh0KHByZWNhbGN1bGF0ZWRTY3JvbGxFbmRPZmZzZXQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgQWxpZ25tZW50cy5DRU5URVI6IHtcclxuICAgICAgICBjb25zdCBmaXJzdEl0ZW1JZDogSWQgfCBudWxsID0gaXRlbXMubGVuZ3RoID4gMCA/IChpdGVtc1swXT8uW3RyYWNrQnldID8/IG51bGwpIDogbnVsbCxcclxuICAgICAgICAgIGVuZEl0ZW1JZDogSWQgfCBudWxsID0gaXRlbXMubGVuZ3RoID4gMCA/IChpdGVtcz8uW2l0ZW1zLmxlbmd0aCAtIDFdPy5bdHJhY2tCeV0gPz8gbnVsbCkgOiBudWxsLFxyXG4gICAgICAgICAgYWxpZ25tZW50U3RhcnRPZmZzZXQgPSB2aWV3cG9ydFNpemUgKiAuNSAtIChmaXJzdEl0ZW1JZCAhPT0gbnVsbCA/IChpc1ZlcnRpY2FsID8gKHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhmaXJzdEl0ZW1JZCk/LmhlaWdodCA/PyAwKSA6XHJcbiAgICAgICAgICAgICh0aGlzLl9zZXJ2aWNlLmdldEl0ZW1Cb3VuZHMoZmlyc3RJdGVtSWQpPy53aWR0aCA/PyAwKSkgOiAwKSAqIChpc0luZmluaXR5ID8gMCA6IC41KSxcclxuICAgICAgICAgIGFsaWdubWVudEVuZE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41IC0gKGVuZEl0ZW1JZCAhPT0gbnVsbCA/IChpc1ZlcnRpY2FsID8gKHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhlbmRJdGVtSWQpPy5oZWlnaHQgPz8gMCkgOlxyXG4gICAgICAgICAgICAodGhpcy5fc2VydmljZS5nZXRJdGVtQm91bmRzKGVuZEl0ZW1JZCk/LndpZHRoID8/IDApKSA6IDApICogKGlzSW5maW5pdHkgPyAwIDogLjUpO1xyXG5cclxuICAgICAgICB0aGlzLl8kYWxpZ25tZW50U2Nyb2xsU3RhcnRPZmZzZXQubmV4dChhbGlnbm1lbnRTdGFydE9mZnNldCk7XHJcbiAgICAgICAgdGhpcy5fJGFsaWdubWVudFNjcm9sbEVuZE9mZnNldC5uZXh0KGFsaWdubWVudEVuZE9mZnNldCk7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFNjcm9sbFN0YXJ0T2Zmc2V0Lm5leHQocHJlY2FsY3VsYXRlZFNjcm9sbFN0YXJ0T2Zmc2V0ICsgYWxpZ25tZW50U3RhcnRPZmZzZXQpO1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxTY3JvbGxFbmRPZmZzZXQubmV4dChwcmVjYWxjdWxhdGVkU2Nyb2xsRW5kT2Zmc2V0ICsgYWxpZ25tZW50RW5kT2Zmc2V0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVSZWd1bGFyUmVuZGVyZXIoKSB7XHJcbiAgICB0aGlzLl9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tpbmcgYnkgaWRcclxuICAgKi9cclxuICBwcml2YXRlIHRyYWNraW5nKCkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3gudHJhY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWw6IGJvb2xlYW4sIHRvdGFsU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsID0gdGhpcy5fJGxpc3QuZ2V0VmFsdWUoKSwgcHJvcCA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICBzaXplID0gdG90YWxTaXplO1xyXG4gICAgaWYgKCEhbCAmJiBwYXJzZUludChsLm5hdGl2ZUVsZW1lbnQuc3R5bGVbcHJvcF0pICE9PSBzaXplKSB7XHJcbiAgICAgIGwubmF0aXZlRWxlbWVudC5zdHlsZVtwcm9wXSA9IGAke3NpemV9JHtQWH1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2UuZ2V0SXRlbUJvdW5kcyhpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1cyhpZDogSWQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5OT05FKSB7XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIHRoaXMuX3NlcnZpY2UuZm9jdXNCeUlkKGlkLCBhbGlnbiwgdGhpcy5zY3JvbGxCZWhhdmlvcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IGJlaGF2aW9yID0gb3B0aW9ucz8uYmVoYXZpb3IgPz8gQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmcgPSBvcHRpb25zPy5ibGVuZGluZyA/PyBmYWxzZSxcclxuICAgICAgZm9jdXNlZCA9IG9wdGlvbnM/LmZvY3VzZWQgPz8gdHJ1ZSxcclxuICAgICAgZGVsYXkgPSBvcHRpb25zPy5kZWxheSA/PyAwLFxyXG4gICAgICBpdGVyYXRpb24gPSBvcHRpb25zPy5pdGVyYXRpb24gPz8gMDtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgYWN0dWFsSXRlcmF0aW9uID0gdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgaWYgKCF0aGlzLl9zY3JvbGxlckNvbXBvbmVudD8uc2Nyb2xsYWJsZSAmJiAhdGhpcy5pc0luZmluaXR5KSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaW5hbGl6ZShpZCwgZm9jdXNlZCwgY2IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgIGlkLCBiZWhhdmlvciwgYmxlbmRpbmcsIGRlbGF5LCBpdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiwgaXNMYXN0SXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24gPT09IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBzY3JvbGwgYXJlYSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBzY3JvbGxUb1N0YXJ0KGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCwgb3B0aW9uczogSVNjcm9sbE9wdGlvbnMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLl9zY3JvbGxlckNvbXBvbmVudDtcclxuICAgIGlmICghIXNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSB0aGlzLmlzVmVydGljYWwgPyBzY3JvbGxlci5zY3JvbGxUb3AgOiBzY3JvbGxlci5zY3JvbGxMZWZ0O1xyXG4gICAgICBpZiAoc2Nyb2xsU2l6ZSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzY3JvbGxlci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiZWhhdmlvciA9IG9wdGlvbnM/LmJlaGF2aW9yID8/IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nID0gb3B0aW9ucz8uYmxlbmRpbmcgPz8gZmFsc2UsXHJcbiAgICAgIGZvY3VzZWQgPSBvcHRpb25zPy5mb2N1c2VkID8/IHRydWUsXHJcbiAgICAgIGRlbGF5ID0gb3B0aW9ucz8uZGVsYXkgPz8gMCxcclxuICAgICAgaXRlcmF0aW9uID0gb3B0aW9ucz8uaXRlcmF0aW9uID8/IDA7XHJcbiAgICB2YWxpZGF0ZVNjcm9sbEJlaGF2aW9yKGJlaGF2aW9yKTtcclxuICAgIHZhbGlkYXRlSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpdGVtcyA9IHRoaXMuXyRhY3R1YWxJdGVtcy5nZXRWYWx1ZSgpLCBmaXJzdEl0ZW0gPSBpdGVtcy5sZW5ndGggPiAwID8gaXRlbXNbMF0gPz8gbnVsbCA6IG51bGwsIGlkID0gZmlyc3RJdGVtPy5bdHJhY2tCeV0gPz8gbnVsbCxcclxuICAgICAgYWN0dWFsSXRlcmF0aW9uID0gdmFsaWRhdGVTY3JvbGxJdGVyYXRpb24oaXRlcmF0aW9uKTtcclxuICAgIGlmICghIWZpcnN0SXRlbSkge1xyXG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgIGlkLCBiZWhhdmlvciwgYmxlbmRpbmcsIGRlbGF5LCBpdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiwgaXNMYXN0SXRlcmF0aW9uOiBhY3R1YWxJdGVyYXRpb24gPT09IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgY2I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuXyRpc1Njcm9sbFN0YXJ0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbFN0YXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsRW5kID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl8kZmlyZVVwZGF0ZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmRJdGVtKGNiPzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHNjcm9sbFRvRW5kSXRlbSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBzY3JvbGxUb0VuZCBtZXRob2QuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNjcm9sbGVyID0gdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ7XHJcbiAgICBpZiAoISFzY3JvbGxlcikge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5pc1ZlcnRpY2FsLFxyXG4gICAgICAgIHNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gc2Nyb2xsZXIuc2Nyb2xsVG9wIDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCxcclxuICAgICAgICBtYXhTY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHNjcm9sbGVyLnNjcm9sbEhlaWdodCA6IHNjcm9sbGVyLnNjcm9sbFRvcDtcclxuICAgICAgaWYgKHNjcm9sbFNpemUgPT09IG1heFNjcm9sbFNpemUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmVoYXZpb3IgPSBvcHRpb25zPy5iZWhhdmlvciA/PyBCRUhBVklPUl9JTlNUQU5ULFxyXG4gICAgICBibGVuZGluZyA9IG9wdGlvbnM/LmJsZW5kaW5nID8/IGZhbHNlLFxyXG4gICAgICBmb2N1c2VkID0gb3B0aW9ucz8uZm9jdXNlZCA/PyB0cnVlLFxyXG4gICAgICBkZWxheSA9IG9wdGlvbnM/LmRlbGF5ID8/IDAsXHJcbiAgICAgIGl0ZXJhdGlvbiA9IG9wdGlvbnM/Lml0ZXJhdGlvbiA/PyAwO1xyXG4gICAgdmFsaWRhdGVTY3JvbGxCZWhhdmlvcihiZWhhdmlvcik7XHJcbiAgICB2YWxpZGF0ZUl0ZXJhdGlvbihpdGVyYXRpb24pO1xyXG4gICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaXRlbXMgPSB0aGlzLl8kYWN0dWFsSXRlbXMuZ2V0VmFsdWUoKSwgbGF0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogMF0sIGlkID0gbGF0SXRlbT8uW3RyYWNrQnldID8/IG51bGwsXHJcbiAgICAgIGFjdHVhbEl0ZXJhdGlvbiA9IHZhbGlkYXRlU2Nyb2xsSXRlcmF0aW9uKGl0ZXJhdGlvbik7XHJcbiAgICBpZiAobGF0SXRlbSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIGlmICghdGhpcy5fc2Nyb2xsZXJDb21wb25lbnQ/LnNjcm9sbGFibGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb0ZpbmFsaXplKGlkLCBmb2N1c2VkLCBjYik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgaWQsIGJlaGF2aW9yLCBibGVuZGluZywgZGVsYXksIGl0ZXJhdGlvbjogYWN0dWFsSXRlcmF0aW9uLCBpc0xhc3RJdGVyYXRpb246IGFjdHVhbEl0ZXJhdGlvbiA9PT0gTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TLCBjYjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LmlzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5pc1Njcm9sbEVuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fJGZpcmVVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvRmluYWxpemUoaWQsIGZvY3VzZWQsIGNiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvRmluYWxpemUoaWQ6IElkLCBmb2N1c2VkOiBib29sZWFuLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCkge1xyXG4gICAgaWYgKGZvY3VzZWQpIHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLl9zZXJ2aWNlLmdldEZvY3VzZWRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgIGlmICghIWVsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCwgRm9jdXNBbGlnbm1lbnRzLk5PTkUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNiPy4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBjbGVhbnVwKCkge1xyXG4gICAgY29uc3QgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgICB0aGlzLl9zZXJ2aWNlLmNvbGxlY3Rpb24gPSBkaXNwbGF5SXRlbXM7XHJcbiAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcbiAgICB0aGlzLnRyYWNraW5nKCk7XHJcbiAgICB0aGlzLmVtaXRTY3JvbGxFdmVudCh0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9yY2UgY2xlYXJpbmcgdGhlIGNhY2hlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjYWNoZUNsZWFuKCkge1xyXG4gICAgdGhpcy5fY2FjaGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5keW5hbWljU2l6ZSkge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5jYWNoZUNsZWFuKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVyZW5kZXJDb250YWluZXIgPSB0aGlzLl9wcmVyZW5kZXI7XHJcbiAgICBpZiAoISFwcmVyZW5kZXJDb250YWluZXIpIHtcclxuICAgICAgcHJlcmVuZGVyQ29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIHByZXJlbmRlckNvbnRhaW5lci5vZmYoKTtcclxuICAgIH1cclxuICAgIHRoaXMuXyRjb2xsYXBzZWRJdGVtSWRzLm5leHQoW10pO1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuXyRpc1Njcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuXyR0b3RhbFNpemUubmV4dCgwKTtcclxuICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoMCk7XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgaWYgKCEhc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIucmVzZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICogVGhlIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHByZXZlbnRTbmFwcGluZyBtZXRob2QuXHJcbiAgICovXHJcbiAgc3RvcFNuYXBwaW5nU2Nyb2xsVG9FbmQoKSB7XHJcbiAgICB0aHJvdyBFcnJvcignVGhlIHN0b3BTbmFwcGluZ1Njcm9sbFRvRW5kIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHByZXZlbnRTbmFwcGluZyBtZXRob2QuJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmV2ZW50cyB0aGUgbGlzdCBmcm9tIHNuYXBwaW5nIHRvIGl0cyBzdGFydCBvciBlbmQgZWRnZS5cclxuICAgKi9cclxuICBwcmV2ZW50U25hcHBpbmcoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3JlYWR5Rm9yU2hvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMuX3Njcm9sbGVyQ29tcG9uZW50O1xyXG4gICAgdGhpcy5fJGlzU2Nyb2xsU3RhcnQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl8kaXNTY3JvbGxFbmQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLl90cmFja0JveC5wcmV2ZW50U2Nyb2xsU25hcHBpbmcodHJ1ZSk7XHJcbiAgICBpZiAoc2Nyb2xsZXIpIHtcclxuICAgICAgc2Nyb2xsZXIuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLl8kZGVzdHJveS5uZXh0KCk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlSWQgPSB0aGlzLl91cGRhdGVJZDtcclxuICAgIGlmICh1cGRhdGVJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHVwZGF0ZUlkKTtcclxuICAgICAgdGhpcy5fdXBkYXRlSWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UpIHtcclxuICAgICAgdGhpcy5fc2VydmljZS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fdHJhY2tCb3gpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghIXRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICB3aGlsZSAodGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgY29tcD8uZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgd2hpbGUgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMuc2hpZnQoKTtcclxuICAgICAgICBjb21wPy5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIiBjbGFzcz1cIm5ndmxfX3NjcmVlbi1yZWFkZXJcIj5cclxuICB7eyAkc2NyZWVuUmVhZGVyRm9ybWF0dGVkTWVzc2FnZSB8IGFzeW5jIH19XHJcbjwvZGl2PlxyXG5cclxuPG5nLXByZXJlbmRlci1jb250YWluZXIgI3ByZXJlbmRlciBbYm91bmRzXT1cIigkYm91bmRzIHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbZHluYW1pY109XCIoJGR5bmFtaWNTaXplIHwgYXN5bmMpIVwiIFtkaXZpZGVzXT1cIigkZGl2aWRlcyB8IGFzeW5jKSFcIiBbaXNWZXJ0aWNhbF09XCIoJGlzVmVydGljYWwgfCBhc3luYykhXCJcclxuICBbaXRlbVNpemVdPVwiKCRhY3R1YWxJdGVtU2l6ZSB8IGFzeW5jKSFcIiBbdHJhY2tCeV09XCIoJHRyYWNrQnkgfCBhc3luYykhXCIgW2l0ZW1SZW5kZXJlcl09XCIoJGl0ZW1SZW5kZXJlciB8IGFzeW5jKSFcIlxyXG4gIFtzdGFydE9mZnNldF09XCIoJHN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtlbmRPZmZzZXRdPVwiKCRlbmRPZmZzZXQgfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyRW5hYmxlZF09XCIoc2Nyb2xsZXIuJHNjcm9sbGJhclNob3cgfCBhc3luYykhXCJcclxuICBbZW5hYmxlZF09XCIoJHByZXJlbmRlckVuYWJsZWQgfCBhc3luYykhXCI+PC9uZy1wcmVyZW5kZXItY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIigkc3RpY2t5RW5hYmxlZCB8IGFzeW5jKSFcIj5cclxuICA8ZGl2IGxvY2FsZVNlbnNpdGl2ZSBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiAjc25hcHBlZENvbnRhaW5lciBjbGFzcz1cIm5ndmxfX3NuYXBwZWQtY29udGFpbmVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIigkY2xhc3NlcyB8IGFzeW5jKVwiPlxyXG4gICAgPGRpdiAjc25hcHBlZCBwYXJ0PVwic25hcHBlZC1pdGVtXCIgY2xhc3M9XCJuZ3ZsX19saXN0LXNuYXBwZXJcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAjc25hcFJlbmRlcmVyQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXNjcm9sbGVyICNzY3JvbGxlciBjbGFzcz1cIm5ndmxfX2xpc3Qtc2Nyb2xsZXJcIiBbY2xhc3Nlc109XCIoJGNsYXNzZXMgfCBhc3luYykhXCJcclxuICBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiBbc3RhcnRPZmZzZXRdPVwiKCRzdGFydE9mZnNldCB8IGFzeW5jKSFcIiBbZW5kT2Zmc2V0XT1cIigkZW5kT2Zmc2V0IHwgYXN5bmMpIVwiXHJcbiAgW2FsaWdubWVudFN0YXJ0T2Zmc2V0XT1cIigkYWxpZ25tZW50U2Nyb2xsU3RhcnRPZmZzZXQgfCBhc3luYykhXCJcclxuICBbYWxpZ25tZW50RW5kT2Zmc2V0XT1cIigkYWxpZ25tZW50U2Nyb2xsRW5kT2Zmc2V0IHwgYXN5bmMpIVwiIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcl09XCIoJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgfCBhc3luYykhXCIgW2lzSW5maW5pdHldPVwiKCRpc0luZmluaXR5IHwgYXN5bmMpIVwiXHJcbiAgW3Njcm9sbGJhclRoaWNrbmVzc109XCIoJHNjcm9sbGJhclRoaWNrbmVzcyB8IGFzeW5jKSFcIiBbc2Nyb2xsYmFyVGh1bWJQYXJhbXNdPVwiKCRzY3JvbGxiYXJUaHVtYlBhcmFtcyB8IGFzeW5jKSFcIlxyXG4gIFthbmltYXRpb25QYXJhbXNdPVwiKCRhbmltYXRpb25QYXJhbXMgfCBhc3luYykhXCIgW2ZvY3VzZWRFbGVtZW50XT1cIigkZm9jdXNlZEVsZW1lbnQgfCBhc3luYykhXCJcclxuICBbbG9hZGluZ109XCIoJGxvYWRpbmcgfCBhc3luYykhXCIgW292ZXJzY3JvbGxFbmFibGVkXT1cIigkb3ZlcnNjcm9sbEVuYWJsZWQgfCBhc3luYykhXCJcclxuICBbc25hcHBpbmdEaXN0YW5jZV09XCIoJHNuYXBwaW5nRGlzdGFuY2UgfCBhc3luYykhXCIgW292ZXJsYXBwaW5nU2Nyb2xsYmFyXT1cIigkb3ZlcmxhcHBpbmdTY3JvbGxiYXIgfCBhc3luYykhXCJcclxuICBbc2Nyb2xsYmFyRW5hYmxlZF09XCIoJGFjdHVhbFNjcm9sbGJhckVuYWJsZWQgfCBhc3luYykhXCIgW3Njcm9sbGJhckludGVyYWN0aXZlXT1cIigkc2Nyb2xsYmFySW50ZXJhY3RpdmUgfCBhc3luYykhXCJcclxuICBbc25hcFRvSXRlbV09XCIoJHNuYXBUb0l0ZW0gfCBhc3luYykhXCIgW3NuYXBUb0l0ZW1BbGlnbl09XCIoJHNuYXBUb0l0ZW1BbGlnbiB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxiYXJNaW5TaXplXT1cIigkc2Nyb2xsYmFyTWluU2l6ZSB8IGFzeW5jKSFcIiBbc2Nyb2xsQmVoYXZpb3JdPVwiKCRzY3JvbGxCZWhhdmlvciB8IGFzeW5jKSFcIlxyXG4gIFtzY3JvbGxpbmdTZXR0aW5nc109XCIoJHNjcm9sbGluZ1NldHRpbmdzIHwgYXN5bmMpIVwiIFtzY3JvbGxpbmdPbmVCeU9uZV09XCIoJHNjcm9sbGluZ09uZUJ5T25lIHwgYXN5bmMpIVwiXHJcbiAgW21vdGlvbkJsdXJdPVwiKCRtb3Rpb25CbHVyIHwgYXN5bmMpIVwiIFttYXhNb3Rpb25CbHVyXT1cIigkbWF4TW90aW9uQmx1ciB8IGFzeW5jKSFcIlxyXG4gIFttb3Rpb25CbHVyRW5hYmxlZF09XCIoJG1vdGlvbkJsdXJFbmFibGVkIHwgYXN5bmMpIVwiPlxyXG4gIDxuZy1jb250YWluZXIgI3JlbmRlcmVyc0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9uZy1zY3JvbGxlcj4iXX0=