@c8y/ngx-components 1018.0.102 → 1018.0.104

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.
@@ -182,7 +182,7 @@ export class DataGridComponent {
182
182
  this.reloadConfiguration$
183
183
  .pipe(switchMap(() => this.configurationStrategy?.getConfig$() ?? of(null)), tap(config => {
184
184
  this.setColumns(config);
185
- this.setPagination(config);
185
+ this.setPageSize(config);
186
186
  this.triggerLoadData.emit(!!this.infiniteScroll);
187
187
  }), switchMap(() => this.dataSource.stats$), tap(stats => {
188
188
  this.createLoadMoreComponent(stats);
@@ -195,6 +195,10 @@ export class DataGridComponent {
195
195
  set _rows(rows) {
196
196
  this.rows = rows || [];
197
197
  }
198
+ /** Pagination settings, e.g. allows for setting current page or page size. */
199
+ set _pagination(pagination) {
200
+ this.pagination = pagination;
201
+ }
198
202
  /** Sets load more mode. */
199
203
  set _infiniteScroll(infiniteScroll) {
200
204
  this.infiniteScroll = infiniteScroll;
@@ -296,11 +300,13 @@ export class DataGridComponent {
296
300
  this.defaultColumns = this.columns || [];
297
301
  this.updateColumns();
298
302
  }
299
- setPagination(config) {
303
+ setPageSize(config) {
300
304
  if (!!config?.pagination) {
301
- this.pagination = config.pagination;
305
+ this.pagination = {
306
+ ...this.pagination,
307
+ pageSize: config.pagination.pageSize
308
+ };
302
309
  }
303
- this.pagination = this.pagination ?? this._pagination;
304
310
  const pageSize = get(this.pagination, 'pageSize');
305
311
  if (this.pagination &&
306
312
  !this.possiblePageSizes.find(possiblePageSize => possiblePageSize === pageSize)) {
@@ -441,9 +447,12 @@ export class DataGridComponent {
441
447
  return !!(filterable && (filterPredicate || externalFilterQuery));
442
448
  }
443
449
  updatePagination({ itemsPerPage, page }) {
450
+ const configChanged = this.pagination?.pageSize !== itemsPerPage;
444
451
  this.pagination = { ...this.pagination, pageSize: itemsPerPage, currentPage: page };
445
452
  this.loadData();
446
- this.emitConfigChange('pagination');
453
+ if (configChanged) {
454
+ this.emitConfigChange('pagination');
455
+ }
447
456
  this.triggerEvent({ action: PX_ACTIONS.CHANGE_PAGINATION, itemsPerPage, page });
448
457
  }
449
458
  clickReload() {
@@ -835,7 +844,7 @@ export class DataGridComponent {
835
844
  }))))
836
845
  .pipe(map((columns) => ({
837
846
  columns,
838
- pagination: this.pagination
847
+ pagination: { pageSize: this.pagination.pageSize }
839
848
  })), filter(() => !!this.configurationStrategy), this.trimFilterConfigPipe(), this.trimSortConfigPipe(), this.trimCustomColumnConfigPipe(), this.ignoreColumnOrderPipe(), this.ignoreColumnVisibilityPipe(), concatMap((config) => this.configurationStrategy.saveConfig$(config)), takeUntil(this.unsubscribe$))
840
849
  .subscribe();
841
850
  }
@@ -1023,4 +1032,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
1023
1032
  type: ViewChildren,
1024
1033
  args: [CdkHeaderCell, { read: ElementRef }]
1025
1034
  }] } });
1026
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFFTCxTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsSUFBSSxFQUNKLEdBQUcsRUFDSCxPQUFPLEVBQ1AsT0FBTyxFQUNQLEtBQUssRUFDTCxRQUFRLElBQUksU0FBUyxFQUNyQixLQUFLLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEtBQUssRUFFTCxFQUFFLEVBQ0YsSUFBSSxFQUNKLE9BQU8sRUFFUixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEtBQUssRUFDTCxHQUFHLEVBQ0gsUUFBUSxFQUNSLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hC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LE1BQU07Z0JBRUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBRTJCLGVBQWU7c0JBQWhELGVBQWU7dUJBQUMsZUFBZTtnQkFFTyxlQUFlO3NCQUFyRCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3JDLHVCQUF1QjtzQkFEdEIsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQTZEcEIsTUFBTTtzQkFBaEUsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrSGVhZGVyQ2VsbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSVJlc3VsdExpc3QsIFBhZ2luZyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIGZsb3csXG4gIGdldCxcbiAgaW5kZXhPZixcbiAgaXNFbXB0eSxcbiAgaXNOaWwsXG4gIHBhcnNlSW50IGFzIF9wYXJzZUludCxcbiAgdW5pb24sXG4gIHVuaXFCeSxcbiAgd2l0aG91dFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgaXNPYnNlcnZhYmxlLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHBpcGUsXG4gIFN1YmplY3QsXG4gIFVuYXJ5RnVuY3Rpb25cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjb25jYXRNYXAsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpcnN0LFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9sb2FkLW1vcmUuY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRNb3JlTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9sb2FkLW1vcmUubW9kZWwnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBQb3BvdmVyQ29uZmlybUJ1dHRvbnMsIFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvcG9wb3Zlci1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlIH0gZnJvbSAnLi4vcHJvZHVjdC1leHBlcmllbmNlL2dhaW5zaWdodC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFByb2R1Y3RFeHBlcmllbmNlRXZlbnQsXG4gIFByb2R1Y3RFeHBlcmllbmNlRXZlbnRTb3VyY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9FVkVOVF9TT1VSQ0Vcbn0gZnJvbSAnLi4vcHJvZHVjdC1leHBlcmllbmNlL3Byb2R1Y3QtZXhwZXJpZW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBDZWxsUmVuZGVyZXJTcGVjIH0gZnJvbSAnLi9jb2x1bW4vY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IEN1c3RvbUNvbHVtbiB9IGZyb20gJy4vY29sdW1uL2N1c3RvbS5jb2x1bW4nO1xuaW1wb3J0IHsgRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYywgRmlsdGVyaW5nTW9kaWZpZXIgfSBmcm9tICcuL2NvbHVtbi9maWx0ZXJpbmctZm9ybS1yZW5kZXJlcic7XG5pbXBvcnQgeyBDb25maWd1cmVDdXN0b21Db2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbmZpZ3VyZS1jdXN0b20tY29sdW1uJztcbmltcG9ydCB7XG4gIERhdGFHcmlkQ29uZmlndXJhdGlvblN0cmF0ZWd5LFxuICBEQVRBX0dSSURfQ09ORklHVVJBVElPTl9TVFJBVEVHWSxcbiAgR3JpZENvbmZpZ1BhcnQsXG4gIEdyaWRFdmVudFR5cGVcbn0gZnJvbSAnLi9kYXRhLWdyaWQtY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgQ29sdW1uQ29uZmlnLFxuICBDb2x1bW5EYXRhVHlwZSxcbiAgQ3VzdG9tQ29sdW1uQ29uZmlnLFxuICBEYXRhR3JpZCxcbiAgRGF0YVNvdXJjZVN0YXRzLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgRmlsdGVyaW5nQWN0aW9uVHlwZSxcbiAgR3JpZENvbmZpZyxcbiAgSGVhZGVyQWN0aW9uQ29udHJvbCxcbiAgbWluQ29sdW1uR3JpZFRyYWNrU2l6ZSxcbiAgUGFnaW5hdGlvbixcbiAgcmF0aW9zQnlDb2x1bW5UeXBlcyxcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICBTb3J0T3JkZXIsXG4gIFNwZWNpYWxDb2x1bW5OYW1lXG59IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcbmltcG9ydCB7IERhdGFHcmlkU2VydmljZSB9IGZyb20gJy4vZGF0YS1ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZERhdGFTb3VyY2UgfSBmcm9tICcuL2dyaWQtZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgUFhfQUNUSU9OUywgUFhfRVZFTlRfTkFNRSB9IGZyb20gJy4vcHJvZHVjdC1leHBlcmllbmNlLmNvbnN0YW50cyc7XG5cbmVudW0gU29ydGluZ09yZGVyIHtcbiAgQVNDID0gJ2FzYycsXG4gIERFU0MgPSAnZGVzYydcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb250ZW50cycgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUFJPRFVDVF9FWFBFUklFTkNFX0VWRU5UX1NPVVJDRSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGFHcmlkQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZENvbXBvbmVudFxuICBpbXBsZW1lbnRzIERhdGFHcmlkLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIFByb2R1Y3RFeHBlcmllbmNlRXZlbnRTb3VyY2VcbntcbiAgLyoqIFRoZSB0aXRsZSBmb3IgdGhlIGRhdGEgZ3JpZCwgaXQncyBkaXNwbGF5ZWQgaW4gdGhlIGdyaWQncyBoZWFkZXIuICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdJdGVtcycpO1xuICAvKiogVGhlIGxhYmVsIGZvciBsb2FkIG1vcmUgYnV0dG9uLiAqL1xuICBASW5wdXQoKSBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSBpdGVtcycpO1xuICAvKiogVGhlIGxhYmVsIGZvciBsb2FkaW5nIGluZGljYXRvci4gKi9cbiAgQElucHV0KCkgbG9hZGluZ0l0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWRpbmcgaXRlbXPigKYnKTtcbiAgLyoqIERldGVybWluZXMgd2hldGhlciB0ZXh0IHNlYXJjaCBpbnB1dCBpcyBzaG93biBpbiB0aGUgZ3JpZCdzIGhlYWRlci4gKi9cbiAgQElucHV0KCkgc2hvd1NlYXJjaCA9IGZhbHNlO1xuICAvKiogVGFrZXMgYW4gZXZlbnQgZW1pdHRlci4gV2hlbiBhbiBldmVudCBpcyBlbWl0dGVkLCB0aGUgZ3JpZCB3aWxsIGJlIHJlbG9hZGVkLiAqL1xuICBASW5wdXQoKSByZWZyZXNoOiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xuICAvKiogVGhlIGxpc3Qgb2YgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGdyaWQuICovXG4gIEBJbnB1dCgnY29sdW1ucycpXG4gIHByaXZhdGUgX2NvbHVtbnM6IENvbHVtbltdO1xuXG4gIGRhdGFTb3VyY2UgPSBuZXcgR3JpZERhdGFTb3VyY2UoKTtcbiAgcm93czogUm93W107XG4gIC8qKiBUaGUgbGlzdCBvZiByb3dzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZ3JpZCAodXNlZCBmb3IgY2xpZW50IHNpZGUgZGF0YSkuICovXG4gIEBJbnB1dCgncm93cycpXG4gIHNldCBfcm93cyhyb3dzOiBSb3dbXSkge1xuICAgIHRoaXMucm93cyA9IHJvd3MgfHwgW107XG4gIH1cblxuICBmaWx0ZXJpbmdMYWJlbHNQYXJhbXMgPSB7XG4gICAgZmlsdGVyZWRJdGVtc0NvdW50OiAwLFxuICAgIGFsbEl0ZW1zQ291bnQ6IDBcbiAgfTtcblxuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICBwYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgcGFnZUZpcnN0SXRlbUlkeDogMCxcbiAgICBwYWdlTGFzdEl0ZW1JZHg6IDAsXG4gICAgaXRlbXNUb3RhbDogMFxuICB9O1xuICByZWFkb25seSBwb3NzaWJsZVBhZ2VTaXplczogbnVtYmVyW10gPSBbMjUsIDUwLCAxMDBdO1xuICByZWFkb25seSBtaW5Qb3NzaWJsZVBhZ2VTaXplID0gTWF0aC5taW4oLi4udGhpcy5wb3NzaWJsZVBhZ2VTaXplcyk7XG4gIC8qKiBQYWdpbmF0aW9uIHNldHRpbmdzLCBlLmcuIGFsbG93cyBmb3Igc2V0dGluZyBjdXJyZW50IHBhZ2Ugb3IgcGFnZSBzaXplLiAqL1xuICBASW5wdXQoJ3BhZ2luYXRpb24nKVxuICBwcml2YXRlIF9wYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuXG4gIGluZmluaXRlU2Nyb2xsOiBMb2FkTW9yZU1vZGU7XG4gIC8qKiBTZXRzIGxvYWQgbW9yZSBtb2RlLiAqL1xuICBASW5wdXQoJ2luZmluaXRlU2Nyb2xsJylcbiAgc2V0IF9pbmZpbml0ZVNjcm9sbChpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlKSB7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGluZmluaXRlU2Nyb2xsO1xuICB9XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgLyoqXG4gICAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGludm9rZWQgd2hlbmV2ZXIgZGF0YSBuZWVkcyB0byBiZSBsb2FkZWQgZnJvbSBzZXJ2ZXIuXG4gICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgdGFrZSBbW0RhdGFTb3VyY2VNb2RpZmllcl1dIGFuZCByZXR1cm4gW1tTZXJ2ZXJTaWRlRGF0YVJlc3VsdF1dLlxuICAgKi9cbiAgQElucHV0KCdzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrJylcbiAgc2V0IF9zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2spIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuICB9XG5cbiAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW1zIGNhbiBiZSBzZWxlY3RlZCBieSBjbGlja2luZyBhIGNoZWNrYm94IGluIHRoZSBmaXJzdCBjb2x1bW4uICovXG4gIEBJbnB1dCgnc2VsZWN0YWJsZScpXG4gIHNldCBfc2VsZWN0YWJsZShzZWxlY3RhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHNlbGVjdGlvblByaW1hcnlLZXkgPSAnaWQnO1xuICAvKiogRGV0ZXJtaW5lcyB3aGljaCBpdGVtJ3MgcHJvcGVydHkgd2lsbCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHNlbGVjdGlvbiBzdGF0dXMuICovXG4gIEBJbnB1dCgnc2VsZWN0aW9uUHJpbWFyeUtleScpXG4gIHNldCBfc2VsZWN0aW9uUHJpbWFyeUtleShzZWxlY3Rpb25QcmltYXJ5S2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGlvblByaW1hcnlLZXkgPSBzZWxlY3Rpb25QcmltYXJ5S2V5O1xuICB9XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIGdyaWRIZWFkZXI6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlXG4gIH07XG4gIC8qKiBTZXRzIGRpc3BsYXkgb3B0aW9ucy4gKi9cbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5T3B0aW9ucyA9IHsgLi4udGhpcy5kaXNwbGF5T3B0aW9ucywgLi4uZGlzcGxheU9wdGlvbnMgfTtcbiAgfVxuXG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW107XG4gIC8qKiBTZXRzIGFjdGlvbiBjb250cm9scyAoYWN0aW9ucyBhdmFpbGFibGUgZm9yIGluZGl2aWR1YWwgaXRlbXMpLiAqL1xuICBASW5wdXQoJ2FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9hY3Rpb25Db250cm9scyhhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdKSB7XG4gICAgdGhpcy5hY3Rpb25Db250cm9scyA9IGFjdGlvbkNvbnRyb2xzIHx8IFtdO1xuICB9XG5cbiAgYnVsa0FjdGlvbkNvbnRyb2xzOiBCdWxrQWN0aW9uQ29udHJvbFtdO1xuICAvKiogU2V0cyBidWxrIGFjdGlvbiBjb250cm9scyAoYWN0aW9ucyBhdmFpbGFibGUgZm9yIGl0ZW1zIHNlbGVjdGVkIGJ5IHVzZXIpLiAqL1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpXG4gIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSkge1xuICAgIHRoaXMuYnVsa0FjdGlvbkNvbnRyb2xzID0gYnVsa0FjdGlvbkNvbnRyb2xzIHx8IFtdO1xuICB9XG5cbiAgaGVhZGVyQWN0aW9uQ29udHJvbHM6IEhlYWRlckFjdGlvbkNvbnRyb2xbXTtcbiAgLyoqIFNldHMgaGVhZGVyIGFjdGlvbiBjb250cm9scyAoYWN0aW9ucyBhdmFpbGFibGUgZnJvbSBkYXRhIGdyaWQgaGVhZGVyKS4gKi9cbiAgQElucHV0KCdoZWFkZXJBY3Rpb25Db250cm9scycpXG4gIHNldCBfaGVhZGVyQWN0aW9uQ29udHJvbHMoaGVhZGVyQWN0aW9uQ29udHJvbHM6IEhlYWRlckFjdGlvbkNvbnRyb2xbXSkge1xuICAgIHRoaXMuaGVhZGVyQWN0aW9uQ29udHJvbHMgPSBoZWFkZXJBY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuXG4gIC8qKiBTZXRzIGluaXRpYWwgc2VhcmNoIHRleHQuICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFRleHQgPSAnJztcblxuICAvKiogRGV0ZXJtaW5lcyBpZiBjdXN0b20gY29sdW1ucyBidXR0b24gd2lsbCBiZSBlbmFibGVkLiAqL1xuICBASW5wdXQoKVxuICBjb25maWd1cmVDb2x1bW5zRW5hYmxlZCA9IHRydWU7XG5cbiAgLyoqIFNob3dzIHRoZSB3YXJuaW5nIGZvciB0aGUgc3ViLWFzc2V0cyBjb3VudGVyICovXG4gIEBJbnB1dCgpXG4gIHNob3dDb3VudGVyV2FybmluZyA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIG1vdXNlIGlzIG92ZXIgYSByb3cuICovXG4gIEBPdXRwdXQoKSByb3dNb3VzZU92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gbW91c2UgbGVhdmVzIGEgcm93LiAqL1xuICBAT3V0cHV0KCkgcm93TW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIHJvdyBpcyBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gZ3JpZCdzIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZC4gKi9cbiAgQE91dHB1dCgpIG9uQ29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgYmVmb3JlIHRoZSBmaWx0ZXIgaXMgYXBwbGllZC4gKi9cbiAgQE91dHB1dCgpIG9uQmVmb3JlRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIC8qKiBFbWl0cyBhbiBldmVudCBiZWZvcmUgdGhlIHNlYXJjaCBpcyBwZXJmb3JtZWQuICovXG4gIEBPdXRwdXQoKSBvbkJlZm9yZVNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGZpbHRlciBpcyBhcHBsaWVkIGluIGEgY29sdW1uLiAqL1xuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBjb2x1bW5OYW1lPzogc3RyaW5nO1xuICAgIGRyb3Bkb3duPzogYW55O1xuICAgIGZpbHRlcmluZ01vZGlmaWVyPzogYW55O1xuICB9PigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBpdGVtcyBzZWxlY3Rpb24gY2hhbmdlcy4gVGhlIGFycmF5IGNvbnRhaW5zIGtleXMgb2Ygc2VsZWN0ZWQgaXRlbXMgKGtleSBwcm9wZXJ0eSBpcyBkZWZpbmVkIGJ5IGBzZWxlY3Rpb25QcmltYXJ5S2V5YCkuICovXG4gIEBPdXRwdXQoKSBpdGVtc1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG4gIC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIHJlbG9hZCBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgQE91dHB1dCgpIG9uUmVsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGN1c3RvbSBjb2x1bW4gaXMgYWRkZWQgKi9cbiAgQE91dHB1dCgpIG9uQWRkQ3VzdG9tQ29sdW1uID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21Db2x1bW5Db25maWc+KCk7XG4gIC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIGEgY3VzdG9tIGNvbHVtbiBpcyByZW1vdmVkICovXG4gIEBPdXRwdXQoKSBvblJlbW92ZUN1c3RvbUNvbHVtbiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgYWZ0ZXIgdGhlIGNvbHVtbiBmaWx0ZXIgaGFzIGJlZW4gcmVzZXQgKi9cbiAgQE91dHB1dCgpIG9uQ29sdW1uRmlsdGVyUmVzZXQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtbj4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gY29sdW1uIHNvcnRpbmcgaGFzIGJlZW4gY2hhbmdlZCAqL1xuICBAT3V0cHV0KCkgb25Tb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBwYWdlIHNpemUgaGFzIGJlZW4gY2hhbmdlZCAqL1xuICBAT3V0cHV0KCkgb25QYWdlU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZENvbmZpZz4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gY29sdW1uIG9yZGVyIGhhcyBiZWVuIGNoYW5nZWQgKi9cbiAgQE91dHB1dCgpIG9uQ29sdW1uUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBjb2x1bW4gb3JkZXIgaGFzIGJlZW4gY2hhbmdlZCAqL1xuICBAT3V0cHV0KCkgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKSBjb2x1bW5SZW5kZXJlcnM6IFF1ZXJ5TGlzdDxDb2x1bW5EaXJlY3RpdmU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbCcsIHsgc3RhdGljOiB0cnVlIH0pIHNjcm9sbENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdpbmZpbml0ZVNjcm9sbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBpbmZpbml0ZVNjcm9sbENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBsb2FkTW9yZUNvbXBvbmVudDogTG9hZE1vcmVDb21wb25lbnQ7XG5cbiAgY29sdW1uTmFtZXMgPSBbXTtcblxuICBzdHlsZXMgPSB7XG4gICAgdGFibGVDdXJzb3I6ICdhdXRvJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB1bmRlZmluZWRcbiAgfTtcblxuICBzZWFyY2hUZXh0JCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBmaWx0ZXJpbmdBcHBsaWVkID0gZmFsc2U7XG5cbiAgdG90YWxQYWdlc0NvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihJbmZpbml0eSk7XG4gIGhpZGVQYWdpbmF0aW9uJCA9IHRoaXMudG90YWxQYWdlc0NvdW50JC5waXBlKFxuICAgIG1hcCh0b3RhbFBhZ2VzQ291bnQgPT4gdG90YWxQYWdlc0NvdW50IDw9IDEpLFxuICAgIGRlbGF5KDApIC8vIHByZXZlbnRzIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3JcbiAgKTtcblxuICBzZWxlY3RlZEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gIGN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgYWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgIGFsbERlc2VsZWN0ZWQ6IHRydWVcbiAgfTtcblxuICBidWlsdEluQWN0aW9uVHlwZSA9IHtcbiAgICBFZGl0OiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgIERlbGV0ZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgIEV4cG9ydDogQnVpbHRJbkFjdGlvblR5cGUuRXhwb3J0XG4gIH07XG5cbiAgY29uZmlybVJlbW92ZUNvbHVtbkJ1dHRvbnM6IFBvcG92ZXJDb25maXJtQnV0dG9uc1tdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICAgIGFjdGlvbjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ1JlbW92ZWBjb2x1bW4sdmVyYmAnKSxcbiAgICAgIHN0YXR1czogJ2RhbmdlcicsXG4gICAgICBhY3Rpb246ICgpID0+IFByb21pc2UucmVzb2x2ZSh0cnVlKVxuICAgIH1cbiAgXTtcblxuICBpc0NvbmZpZ0NvbnRleHRLbm93biA9IGZhbHNlO1xuXG4gIC8qKiBQcm9kdWN0IGV4cGVyaWVuY2UgY29uc3RhbnRzIGRlY2xhcmF0aW9ucyAqL1xuICBwcm9kdWN0RXhwZXJpZW5jZUV2ZW50OiBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50ID0geyBldmVudE5hbWU6IFBYX0VWRU5UX05BTUUgfTtcbiAgUFhfQUNUSU9OUyA9IFBYX0FDVElPTlM7XG5cbiAgcmVhZG9ubHkgc29ydENvbHVtblRpdGxlID0gZ2V0dGV4dCgnU29ydCBjb2x1bW4gXCJ7eyBuYW1lIH19XCInKTtcblxuICByZXNpemVIYW5kbGVNb3VzZURvd24kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBoZWFkZXJCZWluZ1Jlc2l6ZWQ6IHtcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICB9O1xuICBAVmlld0NoaWxkcmVuKENka0hlYWRlckNlbGwsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIHRoUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBwcml2YXRlIHRoRWxzOiBIVE1MRWxlbWVudFtdO1xuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudDogYm9vbGVhbjtcblxuICBwcml2YXRlIGNvbHVtbnNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGVmYXVsdENvbHVtbnM6IENvbHVtbltdID0gW107XG5cbiAgcHJpdmF0ZSByZWxvYWRDb25maWd1cmF0aW9uJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBTRUFSQ0hfREVCT1VOQ0VfVElNRSA9IDUwMDtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciwgdGFraW5nIGJvb2xlYW4gdmFsdWVzIHVzZWQgZm9yIGxvYWRpbmcgZGF0YSBncmlkIGRhdGEgd2l0aCBkZWJvdW5jZS5cbiAgICogRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gZmFsc2UuIFNldCB0byB0cnVlIGlmIGRhdGEgZ3JpZCBpcyB1c2luZyBpbmZpbml0ZSBzY3JvbGwgYW5kIHBhZ2Ugc2hvdWxkIGJlIHJlbG9hZGVkLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gYXZvaWQgaGF2aW5nIG11bHRpcGxlIHRoaXMubG9hZERhdGEoKSBmdW5jdGlvbiBjYWxscy5cbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckxvYWREYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChEQVRBX0dSSURfQ09ORklHVVJBVElPTl9TVFJBVEVHWSlcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvblN0cmF0ZWd5OiBEYXRhR3JpZENvbmZpZ3VyYXRpb25TdHJhdGVneSxcbiAgICBwcml2YXRlIGRhdGFHcmlkU2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxuICApIHtcbiAgICB0aGlzLnRyaWdnZXJMb2FkRGF0YS5waXBlKGRlYm91bmNlVGltZSgxKSwgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKHJlbG9hZCA9PiB7XG4gICAgICB0aGlzLmxvYWREYXRhKHJlbG9hZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbG9hZENvbmZpZ3VyYXRpb24kXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5Py5nZXRDb25maWckKCkgPz8gb2YobnVsbCkpLFxuICAgICAgICB0YXAoY29uZmlnID0+IHtcbiAgICAgICAgICB0aGlzLnNldENvbHVtbnMoY29uZmlnKTtcbiAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb24oY29uZmlnKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2FkRGF0YS5lbWl0KCEhdGhpcy5pbmZpbml0ZVNjcm9sbCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kYXRhU291cmNlLnN0YXRzJCksXG4gICAgICAgIHRhcChzdGF0cyA9PiB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVMb2FkTW9yZUNvbXBvbmVudChzdGF0cyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdMYWJlbHNQYXJhbXMoc3RhdHMpO1xuICAgICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkxhYmVsUGFyYW1zKHN0YXRzKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNDb25maWdDb250ZXh0S25vd24gPSAhIXRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5Py5pc0NvbnRleHRLbm93bigpO1xuXG4gICAgdGhpcy5zZWFyY2hUZXh0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLlNFQVJDSF9ERUJPVU5DRV9USU1FKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKHNlYXJjaFRleHQgPT4ge1xuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgICAgICAgdGhpcy5vbkJlZm9yZVNlYXJjaC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoe1xuICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLlNFQVJDSCxcbiAgICAgICAgICAgIHNlYXJjaElucHV0OiBzZWFyY2hUZXh0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmRhdGFTb3VyY2UuZGF0YSQsIHRoaXMuaXRlbXNTZWxlY3QuYXNPYnNlcnZhYmxlKCkpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtkYXRhXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRW1wdHkgPSBkYXRhLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZSA9IHtcbiAgICAgICAgICAgIGFsbFNlbGVjdGVkOiBjdXJyZW50UGFnZUVtcHR5ID8gZmFsc2UgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSksXG4gICAgICAgICAgICBhbGxEZXNlbGVjdGVkOiBjdXJyZW50UGFnZUVtcHR5ID8gdHJ1ZSA6IGRhdGEuZXZlcnkoaXRlbSA9PiAhdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbG9hZENvbmZpZ3VyYXRpb24kLm5leHQoKTtcblxuICAgIGlmICh0aGlzLnJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NBbmRQZXJzaXN0Q29uZmlnQ2hhbmdlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhldmVudCkge1xuICAgIGlmIChcbiAgICAgICgoIWV2ZW50Ll9hY3Rpb25Db250cm9scyAmJiAhZXZlbnQuc2VhcmNoVGV4dCkgfHwgZXZlbnQuX2FjdGlvbkNvbnRyb2xzPy5maXJzdENoYW5nZSkgJiZcbiAgICAgIHRoaXMuY29sdW1uc0luaXRpYWxpemVkXG4gICAgKSB7XG4gICAgICBjb25zdCByZWxvYWQgPSAhIWV2ZW50Ll9pbmZpbml0ZVNjcm9sbD8uY3VycmVudFZhbHVlICYmICFldmVudC5faW5maW5pdGVTY3JvbGw/LmZpcnN0Q2hhbmdlO1xuICAgICAgdGhpcy50cmlnZ2VyTG9hZERhdGEuZW1pdChyZWxvYWQpO1xuICAgIH1cbiAgICBpZiAoISFldmVudC5fY29sdW1ucyAmJiAhZXZlbnQuX2NvbHVtbnMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVsb2FkQ29uZmlndXJhdGlvbiQubmV4dCgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgIHRoaXMudXBkYXRlVGhFbHMoKTtcbiAgICB0aGlzLnNldHVwUmVzaXplSGFuZGxlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNldENvbHVtbnMoY29uZmlnOiBHcmlkQ29uZmlnKSB7XG4gICAgaWYgKCEhdGhpcy5jb25maWd1cmF0aW9uU3RyYXRlZ3kgJiYgIWlzRW1wdHkodGhpcy5fY29sdW1ucykpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZGF0YUdyaWRTZXJ2aWNlLmFwcGx5Q29uZmlnVG9Db2x1bW5zKGNvbmZpZywgdGhpcy5fY29sdW1ucyk7XG4gICAgICB0aGlzLmNvbHVtbnNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuX2NvbHVtbnMgfHwgW107XG4gICAgICB0aGlzLmNvbHVtbnNJbml0aWFsaXplZCA9IHRoaXMuY29sdW1uc0luaXRpYWxpemVkIHx8ICEhdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICB0aGlzLmRlZmF1bHRDb2x1bW5zID0gdGhpcy5jb2x1bW5zIHx8IFtdO1xuICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICB9XG5cbiAgc2V0UGFnaW5hdGlvbihjb25maWc6IEdyaWRDb25maWcpIHtcbiAgICBpZiAoISFjb25maWc/LnBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IGNvbmZpZy5wYWdpbmF0aW9uO1xuICAgIH1cblxuICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMucGFnaW5hdGlvbiA/PyB0aGlzLl9wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gZ2V0KHRoaXMucGFnaW5hdGlvbiwgJ3BhZ2VTaXplJyk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wYWdpbmF0aW9uICYmXG4gICAgICAhdGhpcy5wb3NzaWJsZVBhZ2VTaXplcy5maW5kKHBvc3NpYmxlUGFnZVNpemUgPT4gcG9zc2libGVQYWdlU2l6ZSA9PT0gcGFnZVNpemUpXG4gICAgKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgcGFnZVNpemU6IHRoaXMubWluUG9zc2libGVQYWdlU2l6ZSB9O1xuICAgIH1cbiAgfVxuXG4gIG9wZW5DdXN0b21Db2x1bW5Nb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhDb25maWd1cmVDdXN0b21Db2x1bW5Db21wb25lbnQsIHtcbiAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBtb2RhbFJlZi5jb250ZW50Lm9uQWRkQ3VzdG9tQ29sdW1uXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChjdXN0b21Db2x1bW5Db25maWc6IEN1c3RvbUNvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpcnN0Rml4ZWRDb2x1bVBvc2l0aW9uID0gdGhpcy5jb2x1bW5zLmluZGV4T2YoXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZChjb2x1bW4gPT4gY29sdW1uLnBvc2l0aW9uRml4ZWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKFxuICAgICAgICAgICAgZmlyc3RGaXhlZENvbHVtUG9zaXRpb24gPiAtMSA/IGZpcnN0Rml4ZWRDb2x1bVBvc2l0aW9uIDogdGhpcy5jb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBuZXcgQ3VzdG9tQ29sdW1uKGN1c3RvbUNvbHVtbkNvbmZpZylcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KHtcbiAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5BRERfQ1VTVE9NX0NPTFVNTixcbiAgICAgICAgICAgIGNvbHVtbjogY3VzdG9tQ29sdW1uQ29uZmlnLmhlYWRlciB8fCBjdXN0b21Db2x1bW5Db25maWcubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKG1vZGFsUmVmLm9uSGlkZGVuKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uQWRkQ3VzdG9tQ29sdW1uLmVtaXQoZXZlbnQpKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZUN1c3RvbUNvbHVtbihcbiAgICBwb0NvbmZpcm06IFBvcG92ZXJDb25maXJtQ29tcG9uZW50LFxuICAgIGNvbHVtbjogQ29sdW1uLFxuICAgIGRkQ29uZmlndXJlQ29sdW1uczogQnNEcm9wZG93bkRpcmVjdGl2ZVxuICApIHtcbiAgICBkZENvbmZpZ3VyZUNvbHVtbnMuYXV0b0Nsb3NlID0gZmFsc2U7XG4gICAgcG9Db25maXJtLm1lc3NhZ2UgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBjb2x1bW4/Jyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbW92ZTogYm9vbGVhbiA9IGF3YWl0IHBvQ29uZmlybS5zaG93KHRoaXMuY29uZmlybVJlbW92ZUNvbHVtbkJ1dHRvbnMpO1xuICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2w/Lm5hbWUgIT09IGNvbHVtbj8ubmFtZSk7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLm9uUmVtb3ZlQ3VzdG9tQ29sdW1uLmVtaXQoY29sdW1uKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoe1xuICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5SRU1PVkVfQ1VTVE9NX0NPTFVNTixcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbi5oZWFkZXIgfHwgY29sdW1uLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IChkZENvbmZpZ3VyZUNvbHVtbnMuYXV0b0Nsb3NlID0gdHJ1ZSksIDApO1xuICB9XG5cbiAgdHJhY2tCeU5hbWUoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5uYW1lO1xuICB9XG5cbiAgcmVzb2x2ZUNlbGxWYWx1ZShyb3csIHBhdGgpIHtcbiAgICByZXR1cm4gZmxvdyhbXG4gICAgICB4ID0+IHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlVmFsdWUoeCwgcGF0aCksXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZUZ1bmN0aW9uLFxuICAgICAgdGhpcy5kYXRhU291cmNlLm5vcm1hbGl6ZU5pbFxuICAgIF0pKHJvdyk7XG4gIH1cblxuICBjaGFuZ2VTb3J0T3JkZXIoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG5cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciB9ID0gY29sdW1uO1xuXG4gICAgICBpZiAoIXNvcnRPcmRlcikge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCBTb3J0aW5nT3JkZXIuQVNDKTtcbiAgICAgIH0gZWxzZSBpZiAoc29ydE9yZGVyID09PSBTb3J0aW5nT3JkZXIuQVNDKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sIFNvcnRpbmdPcmRlci5ERVNDKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTb3J0aW5nKGNvbHVtbk5hbWVzOiBzdHJpbmdbXSwgc29ydE9yZGVyOiBTb3J0T3JkZXIpIHtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCh7XG4gICAgICBhY3Rpb246IFBYX0FDVElPTlMuQ0hBTkdFX1NPUlRJTkdfT1JERVIsXG4gICAgICBjb2x1bW5zOiBjb2x1bW5OYW1lcyxcbiAgICAgIHNvcnRPcmRlcjogc29ydE9yZGVyID09PSAnJyA/ICdub25lJyA6IHNvcnRPcmRlclxuICAgIH0pO1xuXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKTogQ29sdW1uID0+IHtcbiAgICAgIGlmIChjb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY29sdW1uLCBzb3J0T3JkZXIgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoJ3NvcnQnKTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoY29sdW1uTmFtZSwgZHJvcGRvd24sIGZpbHRlcmluZ01vZGlmaWVyKSB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoe1xuICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkFQUExZX0ZJTFRFUixcbiAgICAgIGNvbHVtbjogY29sdW1uTmFtZSxcbiAgICAgIGZpbHRlcmluZ01vZGlmaWVyXG4gICAgfSk7XG4gICAgdGhpcy5vbkJlZm9yZUZpbHRlci5lbWl0KHsgY29sdW1uTmFtZSwgZHJvcGRvd24sIGZpbHRlcmluZ01vZGlmaWVyIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwge1xuICAgICAgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5BcHBseUZpbHRlcixcbiAgICAgIHBheWxvYWQ6IHsgZmlsdGVyaW5nTW9kaWZpZXIgfVxuICAgIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoeyBjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIgfSk7XG4gIH1cblxuICByZXNldEZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93bikge1xuICAgIHRoaXMudHJpZ2dlckV2ZW50KHsgYWN0aW9uOiBQWF9BQ1RJT05TLlJFU0VUX0ZJTFRFUiwgY29sdW1uOiBjb2x1bW5OYW1lIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwgeyB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoeyBjb2x1bW5OYW1lLCBkcm9wZG93biB9KTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVycyhyZWxvYWQgPSB0cnVlKSB7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmcoXG4gICAgICB0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksXG4gICAgICB7XG4gICAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuUmVzZXRGaWx0ZXJcbiAgICAgIH0sXG4gICAgICByZWxvYWRcbiAgICApO1xuICAgIHRoaXMub25GaWx0ZXIuZW1pdCh7fSk7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoeyBhY3Rpb246IFBYX0FDVElPTlMuQ0xFQVJfRklMVEVSIH0pO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyaW5nKFxuICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSxcbiAgICBhY3Rpb246IHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGU7XG4gICAgICBwYXlsb2FkPzogeyBmaWx0ZXJpbmdNb2RpZmllcjogRmlsdGVyaW5nTW9kaWZpZXIgfTtcbiAgICB9LFxuICAgIHJlbG9hZCA9IHRydWVcbiAgKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAuLi4oYWN0aW9uLnR5cGUgPT09IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXJcbiAgICAgICAgICAgID8gYWN0aW9uLnBheWxvYWQuZmlsdGVyaW5nTW9kaWZpZXJcbiAgICAgICAgICAgIDogdGhpcy5vblJlc2V0RmlsdGVyQWN0aW9uKGNvbHVtbikpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCk7XG4gICAgaWYgKHJlbG9hZCkge1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCkge1xuICAgIHRoaXMuZmlsdGVyaW5nQXBwbGllZCA9IHRoaXMuY29sdW1ucy5zb21lKHRoaXMuaXNDb2x1bW5GaWx0ZXJpbmdBcHBsaWVkKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZChjb2x1bW46IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZmlsdGVyYWJsZSwgZmlsdGVyUHJlZGljYXRlLCBleHRlcm5hbEZpbHRlclF1ZXJ5IH0gPSBjb2x1bW47XG5cbiAgICByZXR1cm4gISEoZmlsdGVyYWJsZSAmJiAoZmlsdGVyUHJlZGljYXRlIHx8IGV4dGVybmFsRmlsdGVyUXVlcnkpKTtcbiAgfVxuXG4gIHVwZGF0ZVBhZ2luYXRpb24oeyBpdGVtc1BlclBhZ2UsIHBhZ2UgfSkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogaXRlbXNQZXJQYWdlLCBjdXJyZW50UGFnZTogcGFnZSB9O1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoJ3BhZ2luYXRpb24nKTtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCh7IGFjdGlvbjogUFhfQUNUSU9OUy5DSEFOR0VfUEFHSU5BVElPTiwgaXRlbXNQZXJQYWdlLCBwYWdlIH0pO1xuICB9XG5cbiAgY2xpY2tSZWxvYWQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgICB0aGlzLm9uUmVsb2FkLm5leHQoKTtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCh7IGFjdGlvbjogUFhfQUNUSU9OUy5SRUxPQUQgfSk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIGN1cnJlbnRQYWdlOiAxIH07XG4gICAgdGhpcy5yZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWREYXRhKHRydWUpO1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIGxvYWROZXh0UGFnZSgpOiBQcm9taXNlPElSZXN1bHRMaXN0PG9iamVjdD4+IHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5uZXh0UGFnZSB9O1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5yZXN1bHRMaXN0JFxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gaW4gb3JkZXIgZm9yIGB0b1Byb21pc2VgIHRvIHdvcmssIHRoZSBvYnNlcnZhYmxlIG5lZWRzIHRvIGNvbXBsZXRlXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgLi4ucmVzdWx0LnBhZ2luZyxcbiAgICAgICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgSVJlc3VsdExpc3Q8b2JqZWN0PjtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0NFTEwnLCB2YWx1ZSwgcm93LCBjb2x1bW5OYW1lIH0pO1xuICB9XG5cbiAgZ2V0SGVhZGVyQ2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCBjb2x1bW5OYW1lIH0pOiBDZWxsUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGU6ICdIRUFERVInLCB2YWx1ZSwgcm93OiB1bmRlZmluZWQsIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjKHsgY29sdW1uLCBkcm9wZG93biB9KTogRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcmVyOlxuICAgICAgICBnZXQodGhpcy5nZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pLCAnZmlsdGVyaW5nRm9ybVJlbmRlcmVyRGVmLnRlbXBsYXRlJykgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgcHJvcGVydHk6IGNvbHVtbixcbiAgICAgICAgYXBwbHlGaWx0ZXI6IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzLCBjb2x1bW4ubmFtZSwgZHJvcGRvd24pLFxuICAgICAgICByZXNldEZpbHRlcjogdGhpcy5yZXNldEZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93bilcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc2V0QWxsSXRlbXNTZWxlY3RlZChzZWxlY3RlZCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zZWxlY3Rpb24kXG4gICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmaWx0ZXJlZERhdGFJZHMgfSkgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGZpbHRlcmVkRGF0YUlkcywgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEFsbEl0ZW1zSW5DdXJyZW50UGFnZVNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGRhdGEsIHNlbGVjdGVkKSk7XG4gIH1cblxuICBzZXRJdGVtc1NlbGVjdGVkKGl0ZW1zOiBhbnlbXSwgc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBpdGVtSWRzID0gaXRlbXMubWFwKChpdGVtOiBvYmplY3QgfCBzdHJpbmcpID0+XG4gICAgICB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgPyBpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0gOiBpdGVtXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWRzID0gc2VsZWN0ZWRcbiAgICAgID8gdW5pb24odGhpcy5zZWxlY3RlZEl0ZW1JZHMsIGl0ZW1JZHMpXG4gICAgICA6IHdpdGhvdXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMsIC4uLml0ZW1JZHMpO1xuICAgIHRoaXMuaXRlbXNTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbUlkcyk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBbXTtcbiAgICB0aGlzLml0ZW1zU2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMpO1xuICB9XG5cbiAgaXNJdGVtU2VsZWN0ZWQoaXRlbSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbUlkcy5pbmNsdWRlcyhpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0pO1xuICB9XG5cbiAgb25Db2x1bW5Ecm9wKHsgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4IH0pIHtcbiAgICBjb25zdCBkaWZmZXJlbnRJbmRleCA9IHByZXZpb3VzSW5kZXggIT09IGN1cnJlbnRJbmRleDtcblxuICAgIGlmIChkaWZmZXJlbnRJbmRleCkge1xuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoe1xuICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuUkVPUkRFUl9DT0xVTU5TLFxuICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uTmFtZXNbcHJldmlvdXNJbmRleF1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBjb2x1bW5bMF0pO1xuICAgICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCdyZW9yZGVyQ29sdW1uJyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gIH1cblxuICB1cGRhdGVHcmlkQ29sdW1uc1NpemUoKSB7XG4gICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgdGhpcy5jb2x1bW5zXG4gICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUpXG4gICAgICAgICAgLm1hcCgoeyBncmlkVHJhY2tTaXplIH0pID0+IGdyaWRUcmFja1NpemUpXG4gICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgKSxcbiAgICAgIGdyaWRJbmZpbml0ZVNjcm9sbENvbHVtbjogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFxuICAgICAgICBgMSAvIHNwYW4gJHt0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSkubGVuZ3RofWBcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlVGhFbHMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRoRWxzID0gdGhpcy50aFJlZnNcbiAgICAgICAgPyB0aGlzLnRoUmVmcy50b0FycmF5KCkubWFwKCh7IG5hdGl2ZUVsZW1lbnQgfSkgPT4gbmF0aXZlRWxlbWVudClcbiAgICAgICAgOiBbXTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIFRvIGJlIHJlbW92ZWQgd2hlbiBjb2x1bW5zIGFyZSB0cmFuc2Zvcm1lZCB0byBvYnNlcnZhYmxlcy5cbiAgaXNEcm9wRG93blBsYWNlZFJpZ2h0KGNvbHVtbjogQ29sdW1uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGluZGV4T2YoXG4gICAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLFxuICAgICAgICBjb2x1bW5cbiAgICAgICkgPlxuICAgICAgdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMudmlzaWJsZSkubGVuZ3RoIC8gMlxuICAgICk7XG4gIH1cblxuICBlbWl0Q29uZmlnQ2hhbmdlKGV2ZW50VHlwZT86IEdyaWRFdmVudFR5cGUpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKHRoaXMubWFwQ29sdW1uVG9Db25maWcuYmluZCh0aGlzKSk7XG4gICAgICBjb25zdCBjb25maWcgPSB7IGNvbHVtbnMsIHBhZ2luYXRpb246IHRoaXMucGFnaW5hdGlvbiB9O1xuICAgICAgdGhpcy5vbkNvbmZpZ0NoYW5nZS5lbWl0KGNvbmZpZyk7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgICB0aGlzLm9uU29ydC5lbWl0KGNvbmZpZyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BhZ2luYXRpb24nOlxuICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZS5lbWl0KGNvbmZpZyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Jlb3JkZXJDb2x1bW4nOlxuICAgICAgICAgIHRoaXMub25Db2x1bW5SZW9yZGVyZWQuZW1pdChjb25maWcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjaGFuZ2VDb2x1bW5WaXNpYmlsaXR5JzpcbiAgICAgICAgICB0aGlzLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZS5lbWl0KGNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGV2ZW50RGF0YSkge1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQodGhpcy5wcm9kdWN0RXhwZXJpZW5jZUV2ZW50Py5ldmVudE5hbWUgfHwgUFhfRVZFTlRfTkFNRSwge1xuICAgICAgLi4udGhpcy5wcm9kdWN0RXhwZXJpZW5jZUV2ZW50Py5kYXRhLFxuICAgICAgLi4uZXZlbnREYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVzZXRGaWx0ZXJBY3Rpb24oY29sdW1uOiBDb2x1bW4pIHtcbiAgICB0aGlzLm9uQ29sdW1uRmlsdGVyUmVzZXQuZW1pdChjb2x1bW4pO1xuICAgIHJldHVybiB7XG4gICAgICBmaWx0ZXJQcmVkaWNhdGU6IHVuZGVmaW5lZCxcbiAgICAgIGV4dGVybmFsRmlsdGVyUXVlcnk6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG1hcENvbHVtblRvQ29uZmlnKGNvbHVtbjogQ29sdW1uKTogQ29sdW1uQ29uZmlnIHwgQ3VzdG9tQ29sdW1uQ29uZmlnIHtcbiAgICBsZXQgY29uZmlnO1xuICAgIGlmIChjb2x1bW4uY3VzdG9tKSB7XG4gICAgICBjb25zdCB7IHZpc2libGUsIHNvcnRPcmRlciwgbmFtZSwgZXh0ZXJuYWxGaWx0ZXJRdWVyeSwgaGVhZGVyLCBwYXRoIH0gPSBjb2x1bW47XG4gICAgICBjb25maWcgPSB7XG4gICAgICAgIHZpc2libGUsXG4gICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZmlsdGVyOiB7IGV4dGVybmFsRmlsdGVyUXVlcnkgfSxcbiAgICAgICAgaGVhZGVyLFxuICAgICAgICBwYXRoLFxuICAgICAgICBjdXN0b206IHRydWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgdmlzaWJsZSwgc29ydE9yZGVyLCBuYW1lLCBleHRlcm5hbEZpbHRlclF1ZXJ5IH0gPSBjb2x1bW47XG4gICAgICBjb25maWcgPSB7IHZpc2libGUsIHNvcnRPcmRlciwgbmFtZSwgZmlsdGVyOiB7IGV4dGVybmFsRmlsdGVyUXVlcnkgfSB9O1xuICAgIH1cblxuICAgIGlmIChpc0VtcHR5KGNvbmZpZz8uZmlsdGVyPy5leHRlcm5hbEZpbHRlclF1ZXJ5KSkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5maWx0ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEocmVsb2FkID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRGF0YSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICByZWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICBjb25zdCBzcGVjaWFsQ29sdW1uID0ge1xuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgY2hlY2tib3hDb2x1bW4gPSB0aGlzLnNlbGVjdGFibGVcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnNwZWNpYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogU3BlY2lhbENvbHVtbk5hbWUuQ2hlY2tib3gsXG4gICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogJzMycHgnXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbnNDb2x1bW4gPVxuICAgICAgdGhpcy5hY3Rpb25Db250cm9scz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwZWNpYWxDb2x1bW4sXG4gICAgICAgICAgICBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5BY3Rpb25zLFxuICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogdGhpcy5hY3Rpb25Db250cm9scy5sZW5ndGggPiAyID8gJzU2cHgnIDogJ21pbm1heCg0MHB4LCBhdXRvKSdcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IFtjaGVja2JveENvbHVtbiwgLi4udGhpcy5jb2x1bW5zLCBhY3Rpb25zQ29sdW1uXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCh0aGlzLndpdGhDb2x1bW5EZWZhdWx0cyk7XG5cbiAgICB0aGlzLmNvbHVtbnMgPSB1bmlxQnkoY29sdW1ucywgJ25hbWUnKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbk5hbWVzKCk7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICB0aGlzLnVwZGF0ZVRoRWxzKCk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhDb2x1bW5EZWZhdWx0cyhjb2x1bW4pOiBDb2x1bW4ge1xuICAgIGNvbnN0IGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlIHx8IENvbHVtbkRhdGFUeXBlLlRleHRTaG9ydDtcbiAgICBjb25zdCB7IGhlYWRlckNTU0NsYXNzTmFtZSwgY2VsbENTU0NsYXNzTmFtZSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBwb3NpdGlvbkZpeGVkOiBmYWxzZSxcbiAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAnJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGF0YVR5cGUsXG4gICAgICBncmlkVHJhY2tTaXplOlxuICAgICAgICBjb2x1bW4uZ3JpZFRyYWNrU2l6ZSB8fFxuICAgICAgICBgbWlubWF4KCR7bWluQ29sdW1uR3JpZFRyYWNrU2l6ZX1weCwgJHtyYXRpb3NCeUNvbHVtblR5cGVzW2RhdGFUeXBlXX1mcilgLFxuICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOlxuICAgICAgICAodHlwZW9mIGhlYWRlckNTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGhlYWRlckNTU0NsYXNzTmFtZS5zcGxpdCgnICcpXG4gICAgICAgICAgOiBoZWFkZXJDU1NDbGFzc05hbWUpIHx8IFtdLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBjZWxsQ1NTQ2xhc3NOYW1lID09PSAnc3RyaW5nJyA/IGNlbGxDU1NDbGFzc05hbWUuc3BsaXQoJyAnKSA6IGNlbGxDU1NDbGFzc05hbWUpIHx8XG4gICAgICAgIFtdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uTmFtZXMoKSB7XG4gICAgdGhpcy5jb2x1bW5OYW1lcyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNpemVIYW5kbGUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlRHJhZyQgPSB0aGlzLnJlc2l6ZUhhbmRsZU1vdXNlRG93biQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgIG1lcmdlTWFwKCh7IGV2ZW50LCB0YXJnZXRDb2x1bW5OYW1lIH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGFyZ2V0Q29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHVuaW9uKGNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWUsIFsnaGVhZGVyLS1iZWluZy1yZXNpemVkJ10pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0ge1xuICAgICAgICAgIGNvbHVtbk5hbWU6IHRhcmdldENvbHVtbk5hbWUsXG4gICAgICAgICAgZWw6IGV2ZW50LnRhcmdldD8ucGFyZW50Tm9kZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnY29sLXJlc2l6ZSdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZU1vdmUkLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMucmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXNpemVIYW5kbGVEcmFnJC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQgJiYgY29sdW1uLm5hbWUgPT09IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lckRpdjogSFRNTERpdkVsZW1lbnQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICAvLyBSZWFkIHNjcm9sbENvbnRhaW5lckVsJ3Mgb2Zmc2V0IGxlZnQgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IHNjcm9sbENvbnRhaW5lckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICAgICAgICAvLyBBZGp1c3Qgd2l0aCB0aGUgc2Nyb2xsQ29udGFpbmVyRWwgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsQ29udGFpbmVyRGl2LnNjcm9sbExlZnQgLSBob3Jpem9udGFsT2Zmc2V0O1xuXG4gICAgICAgICAgICAvLyBSZWFkIGxlZnQgb2Zmc2V0IG9mIHRoZSByZXNpemVkIGhlYWRlci5cbiAgICAgICAgICAgIGNvbnN0IGhlYWRlck9mZnNldExlZnQgPSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5lbC5vZmZzZXRMZWZ0IHx8IDA7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzaXJlZCB3aWR0aC5cbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gaG9yaXpvbnRhbFNjcm9sbE9mZnNldCArIGV2ZW50LmNsaWVudFggLSBoZWFkZXJPZmZzZXRMZWZ0O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1uIG9iamVjdCB3aXRoIHRoZSBuZXcgc2l6ZSB2YWx1ZSwgZW5mb3JjZSBvdXIgbWluaW11bSBzaXplLlxuICAgICAgICAgICAgICBncmlkVHJhY2tTaXplOiBgJHtNYXRoLm1heChtaW5Db2x1bW5HcmlkVHJhY2tTaXplLCB3aWR0aCl9cHhgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZvciB0aGUgb3RoZXIgaGVhZGVycyB3aGljaCBkb24ndCBoYXZlIGEgc2V0IHdpZHRoLCBmaXggaXQgdG8gdGhlaXIgY29tcHV0ZWQgd2lkdGguXG4gICAgICAgICAgaWYgKGNvbHVtbi5ncmlkVHJhY2tTaXplLnN0YXJ0c1dpdGgoJ21pbm1heCcpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIGlzbid0IGZpeGVkIHlldCAoaXQgd291bGQgYmUgYSBweCB2YWx1ZSlcbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7X3BhcnNlSW50KHRoaXMudGhFbHNbaV0uY2xpZW50V2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBVcGRhdGUgdGhlIGNvbHVtbiBzaXplcy5cbiAgICAgICAgICogTm90ZTogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldHMgdGhlIHdpZHRoIGZvciBhbGwgY29sdW1ucyBpbiBvbmUgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTogd2l0aG91dChjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCAnaGVhZGVyLS1iZWluZy1yZXNpemVkJylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnYXV0bydcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSB7XG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZSwgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW5OYW1lKTtcbiAgICBjb25zdCBjb2x1bW5SZW5kZXJlciA9IHRoaXMuZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTtcbiAgICBjb25zdCByZW5kZXJlclRlbXBsYXRlID0gZ2V0KFxuICAgICAgY29sdW1uUmVuZGVyZXIsXG4gICAgICBgJHt0eXBlID09PSAnSEVBREVSJyA/ICdoZWFkZXJDZWxsUmVuZGVyZXJEZWYnIDogJ2NlbGxSZW5kZXJlckRlZid9LnRlbXBsYXRlYFxuICAgICk7XG5cbiAgICBjb25zdCB7IGNlbGxSZW5kZXJlckNvbXBvbmVudCwgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gPSBjb2x1bW47XG4gICAgY29uc3QgcmVuZGVyZXJDb21wb25lbnQgPVxuICAgICAgdHlwZSA9PT0gJ0hFQURFUicgPyBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgOiBjZWxsUmVuZGVyZXJDb21wb25lbnQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyVGVtcGxhdGUgfHwgcmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpdGVtOiByb3csXG4gICAgICAgIHByb3BlcnR5OiBjb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pOiBDb2x1bW5EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblJlbmRlcmVycy50b0FycmF5KCkuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICAgIGZpbHRlcmVkSXRlbXNDb3VudDogc3RhdHMuZmlsdGVyZWRTaXplLFxuICAgICAgYWxsSXRlbXNDb3VudDogc3RhdHMuc2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgaWYgKHN0YXRzLm5leHRQYWdlKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgbmV4dFBhZ2U6IHN0YXRzLm5leHRQYWdlIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUZpcnN0SXRlbUlkeCA9IChzdGF0cy5jdXJyZW50UGFnZSAtIDEpICogc3RhdHMuZmlyc3RQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5wYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgICBwYWdlRmlyc3RJdGVtSWR4LFxuICAgICAgcGFnZUxhc3RJdGVtSWR4OiBwYWdlRmlyc3RJdGVtSWR4ICsgKHN0YXRzLmN1cnJlbnRQYWdlU2l6ZSAtIDEpLFxuICAgICAgaXRlbXNUb3RhbDogc3RhdHMuZmlsdGVyZWRTaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgJiZcbiAgICAgIHN0YXRzICYmXG4gICAgICBzdGF0cy5uZXh0UGFnZSAmJlxuICAgICAgKCF0aGlzLmxvYWRNb3JlQ29tcG9uZW50IHx8IHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudClcbiAgICApIHtcbiAgICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID1cbiAgICAgICAgdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTG9hZE1vcmVDb21wb25lbnQpO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdhdXRvJyB8fCB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UsXG4gICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTW9yZUl0ZW1zTGFiZWw7XG4gICAgICBpbnN0YW5jZS5sb2FkaW5nTGFiZWwgPSB0aGlzLmxvYWRpbmdJdGVtc0xhYmVsO1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkTW9yZUNvbXBvbmVudCAmJiAhc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogbnVsbFxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQW5kUGVyc2lzdENvbmZpZ0NoYW5nZSgpIHtcbiAgICBtZXJnZShcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLm9uU29ydCxcbiAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlLFxuICAgICAgICB0aGlzLm9uQ29sdW1uUmVvcmRlcmVkLFxuICAgICAgICB0aGlzLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZVxuICAgICAgKS5waXBlKG1hcChjb25maWcgPT4gY29uZmlnLmNvbHVtbnMpKSxcbiAgICAgIG1lcmdlKHRoaXMub25BZGRDdXN0b21Db2x1bW4sIHRoaXMub25SZW1vdmVDdXN0b21Db2x1bW4pLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiAodGhpcy5jb2x1bW5zIHx8IFtdKS5tYXAodGhpcy5tYXBDb2x1bW5Ub0NvbmZpZy5iaW5kKHRoaXMpKSlcbiAgICAgICksXG4gICAgICB0aGlzLm9uRmlsdGVyLnBpcGUoXG4gICAgICAgIG1hcCgoeyBjb2x1bW5OYW1lLCBmaWx0ZXJpbmdNb2RpZmllciB9KSA9PlxuICAgICAgICAgIHRoaXMuY29sdW1ucy5tYXAodGhpcy5tYXBDb2x1bW5Ub0NvbmZpZy5iaW5kKHRoaXMpKS5tYXAoKGNvbHVtbjogQ29sdW1uQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOaWwoY29sdW1uTmFtZSkpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5maWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5uYW1lID09PSBjb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5KGZpbHRlcmluZ01vZGlmaWVyKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZmlsdGVyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIgPSBmaWx0ZXJpbmdNb2RpZmllcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChjb2x1bW5zOiBBcnJheTxDb2x1bW5Db25maWcgfCBDdXN0b21Db2x1bW5Db25maWc+KSA9PiAoe1xuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgcGFnaW5hdGlvbjogdGhpcy5wYWdpbmF0aW9uXG4gICAgICAgIH0pKSxcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5jb25maWd1cmF0aW9uU3RyYXRlZ3kpLFxuICAgICAgICB0aGlzLnRyaW1GaWx0ZXJDb25maWdQaXBlKCksXG4gICAgICAgIHRoaXMudHJpbVNvcnRDb25maWdQaXBlKCksXG4gICAgICAgIHRoaXMudHJpbUN1c3RvbUNvbHVtbkNvbmZpZ1BpcGUoKSxcbiAgICAgICAgdGhpcy5pZ25vcmVDb2x1bW5PcmRlclBpcGUoKSxcbiAgICAgICAgdGhpcy5pZ25vcmVDb2x1bW5WaXNpYmlsaXR5UGlwZSgpLFxuICAgICAgICBjb25jYXRNYXAoKGNvbmZpZzogR3JpZENvbmZpZykgPT4gdGhpcy5jb25maWd1cmF0aW9uU3RyYXRlZ3kuc2F2ZUNvbmZpZyQoY29uZmlnKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpbUZpbHRlckNvbmZpZ1BpcGUoKTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPEdyaWRDb25maWc+LCBPYnNlcnZhYmxlPEdyaWRDb25maWc+PiB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICB0aGlzLmNoZWNrRXZlbnRQaXBlKCdmaWx0ZXInLCBjb25maWcgPT4ge1xuICAgICAgICBjb25maWcuY29sdW1ucyA9IChjb25maWcuY29sdW1ucyB8fCBbXSkubWFwKGNvbCA9PiB7XG4gICAgICAgICAgZGVsZXRlIGNvbC5maWx0ZXI7XG4gICAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpbVNvcnRDb25maWdQaXBlKCk6IFVuYXJ5RnVuY3Rpb248T2JzZXJ2YWJsZTxHcmlkQ29uZmlnPiwgT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPj4ge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgdGhpcy5jaGVja0V2ZW50UGlwZSgnc29ydCcsIGNvbmZpZyA9PiB7XG4gICAgICAgIGNvbmZpZy5jb2x1bW5zID0gKGNvbmZpZy5jb2x1bW5zIHx8IFtdKS5tYXAoY29sID0+IHtcbiAgICAgICAgICBjb2wuc29ydE9yZGVyID0gJyc7XG4gICAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpbUN1c3RvbUNvbHVtbkNvbmZpZ1BpcGUoKTogVW5hcnlGdW5jdGlvbjxcbiAgICBPYnNlcnZhYmxlPEdyaWRDb25maWc+LFxuICAgIE9ic2VydmFibGU8R3JpZENvbmZpZz5cbiAgPiB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICB0aGlzLmNoZWNrRXZlbnRQaXBlKCdjdXN0b21Db2x1bW5zJywgY29uZmlnID0+IHtcbiAgICAgICAgY29uZmlnLmNvbHVtbnMgPSAoY29uZmlnLmNvbHVtbnMgfHwgW10pLmZpbHRlcigoY29sOiBDdXN0b21Db2x1bW5Db25maWcpID0+ICFjb2wuY3VzdG9tKTtcblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpZ25vcmVDb2x1bW5PcmRlclBpcGUoKTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPEdyaWRDb25maWc+LCBPYnNlcnZhYmxlPEdyaWRDb25maWc+PiB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICB0aGlzLmNoZWNrRXZlbnRQaXBlKCdvcmRlcicsIGNvbmZpZyA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25TdHJhdGVneS5nZXRDb25maWckKCkucGlwZShcbiAgICAgICAgICBtYXAob2xkQ29uZmlnID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9sZENvbHVtbnM6IENvbHVtbkNvbmZpZ1tdID1cbiAgICAgICAgICAgICAgb2xkQ29uZmlnPy5jb2x1bW5zIHx8ICh0aGlzLmRlZmF1bHRDb2x1bW5zIGFzIENvbHVtbkNvbmZpZ1tdKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1c3RvbSBjb2x1bW5zIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgY29uc3QgY29sdW1uc0FkZGVkID0gKGNvbmZpZy5jb2x1bW5zIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgICAgICAgIGNvbCA9PiAhb2xkQ29sdW1ucy5maW5kKG9sZCA9PiBvbGQubmFtZSA9PT0gY29sLm5hbWUpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25maWcuY29sdW1ucyA9IFtcbiAgICAgICAgICAgICAgLi4ub2xkQ29sdW1ucy5tYXAob2xkQ29sID0+XG4gICAgICAgICAgICAgICAgKGNvbmZpZy5jb2x1bW5zIHx8IFtdKS5maW5kKG5ld0NvbCA9PiBuZXdDb2wubmFtZSA9PT0gb2xkQ29sLm5hbWUpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmNvbHVtbnNBZGRlZFxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpZ25vcmVDb2x1bW5WaXNpYmlsaXR5UGlwZSgpOiBVbmFyeUZ1bmN0aW9uPFxuICAgIE9ic2VydmFibGU8R3JpZENvbmZpZz4sXG4gICAgT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPlxuICA+IHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIHRoaXMuY2hlY2tFdmVudFBpcGUoJ3Zpc2liaWxpdHknLCBjb25maWcgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU3RyYXRlZ3kuZ2V0Q29uZmlnJCgpLnBpcGUoXG4gICAgICAgICAgbWFwKG9sZENvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25maWcuY29sdW1ucyA9IChjb25maWcuY29sdW1ucyB8fCBbXSkubWFwKG5ld0NvbCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnM6IENvbHVtbkNvbmZpZ1tdID1cbiAgICAgICAgICAgICAgICBvbGRDb25maWc/LmNvbHVtbnMgfHwgKHRoaXMuZGVmYXVsdENvbHVtbnMgYXMgQ29sdW1uQ29uZmlnW10pO1xuICAgICAgICAgICAgICBjb25zdCBvbGRDb2wgPSBjb2x1bW5zLmZpbmQoKGNvbDogYW55KSA9PiBuZXdDb2wubmFtZSA9PT0gY29sLm5hbWUpO1xuICAgICAgICAgICAgICBuZXdDb2wudmlzaWJsZSA9IG9sZENvbD8udmlzaWJsZSA/PyB0cnVlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3Q29sO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tFdmVudFBpcGUoXG4gICAgY29uZmlnUGFydDogR3JpZENvbmZpZ1BhcnQsXG4gICAgdHJpbUV2ZW50RGF0YUZuOiAoY29uZmlnOiBHcmlkQ29uZmlnKSA9PiBHcmlkQ29uZmlnIHwgT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPlxuICApOiBVbmFyeUZ1bmN0aW9uPE9ic2VydmFibGU8R3JpZENvbmZpZz4sIE9ic2VydmFibGU8R3JpZENvbmZpZz4+IHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNvbmNhdE1hcCgoY29uZmlnOiBHcmlkQ29uZmlnKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb25maWdGaWx0ZXJcbiAgICAgICAgICAuY2FsbCh0aGlzLCBjb25maWdQYXJ0KVxuICAgICAgICAgIC5waXBlKG1hcChrZWVwRXZlbnREYXRhID0+ICh7IGNvbmZpZywga2VlcEV2ZW50RGF0YSB9KSkpO1xuICAgICAgfSksXG4gICAgICBtYXAoKHsgY29uZmlnLCBrZWVwRXZlbnREYXRhIH0pID0+XG4gICAgICAgIGtlZXBFdmVudERhdGEgPyBjb25maWcgOiB0cmltRXZlbnREYXRhRm4uY2FsbCh0aGlzLCBjb25maWcpXG4gICAgICApLFxuICAgICAgY29uY2F0TWFwKGNvbmZpZyA9PiAoaXNPYnNlcnZhYmxlKGNvbmZpZykgPyBjb25maWcgOiBvZihjb25maWcpKSBhcyBPYnNlcnZhYmxlPEdyaWRDb25maWc+KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDb25maWdGaWx0ZXIoY29uZmlnUGFydDogR3JpZENvbmZpZ1BhcnQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuIHwgT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj47XG4gICAgY29uc3QgdmFsdWVPckZuID0gdGhpcy5jb25maWd1cmF0aW9uU3RyYXRlZ3kuZ2V0Q29udGV4dCgpPy5jb25maWdGaWx0ZXI/Lltjb25maWdQYXJ0XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVzdWx0ID0gdmFsdWVPckZuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlT3JGbjtcbiAgICB9XG4gICAgcmV0dXJuIHRvT2JzZXJ2YWJsZShyZXN1bHQgPz8gdHJ1ZSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI3Njcm9sbFxuICBjbGFzcz1cInRhYmxlLWRhdGEtZ3JpZC1zY3JvbGxcIlxuICBbbmdDbGFzc109XCJ7ICd0YWJsZS1kYXRhLWdyaWRfX292ZXJsYXknOiAoZGF0YVNvdXJjZS5sb2FkaW5nJCB8IGFzeW5jKSAmJiAhbG9hZE1vcmVDb21wb25lbnQgfVwiXG4gIGRhdGEtY3k9XCJjOHktZGF0YS1ncmlkLS10YWJsZS1kYXRhLWdyaWQtc2Nyb2xsXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwidGFibGUtZGF0YS1ncmlkX19sb2FkaW5nLS13cmFwcGVyXCJcbiAgICAqbmdJZj1cIihkYXRhU291cmNlLmxvYWRpbmckIHwgYXN5bmMpICYmICFsb2FkTW9yZUNvbXBvbmVudFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtZGF0YS1ncmlkX19sb2FkaW5nLS1sb2FkZXJcIj5cbiAgICAgIDxjOHktcHJvZ3Jlc3MtYmFyIFttZXNzYWdlXT1cImxvYWRpbmdJdGVtc0xhYmVsXCI+PC9jOHktcHJvZ3Jlc3MtYmFyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiZGlzcGxheU9wdGlvbnMuZ3JpZEhlYWRlclwiIGNsYXNzPVwidGFibGUtZGF0YS1ncmlkLWhlYWRlciBzZXBhcmF0b3IgbGFyZ2UtcGFkZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJoNFwiIFtuZ0NsYXNzXT1cInsgJ20tci0xNic6ICEhdGl0bGUgfVwiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheU9wdGlvbnMuZmlsdGVyXCI+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFmaWx0ZXJpbmdBcHBsaWVkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgbGFiZWwtZGVmYXVsdCBtLXItNFwiIHRyYW5zbGF0ZT5ObyBmaWx0ZXJzPC9zcGFuPlxuICAgICAgICA8c21hbGxcbiAgICAgICAgICAqbmdJZj1cIiEhZmlsdGVyaW5nTGFiZWxzUGFyYW1zLmFsbEl0ZW1zQ291bnRcIlxuICAgICAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cImZpbHRlcmluZ0xhYmVsc1BhcmFtc1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBmaWx0ZXJlZEl0ZW1zQ291bnQgfX0gb2Yge3sgYWxsSXRlbXNDb3VudCB9fSBpdGVtc1xuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJpbmdBcHBsaWVkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWZpbHRlcmluZ0xhYmVsc1BhcmFtcy5hbGxJdGVtc0NvdW50XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvIG0tci00XCI+XG4gICAgICAgICAgICB7eyAoZGF0YVNvdXJjZS5zdGF0cyQgfCBhc3luYykuZmlsdGVyZWRTaXplIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzbWFsbCBuZ05vbkJpbmRhYmxlIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cImZpbHRlcmluZ0xhYmVsc1BhcmFtc1wiPlxuICAgICAgICAgICAgb2Yge3sgYWxsSXRlbXNDb3VudCB9fSBpdGVtc1xuICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWZhdWx0IG0tbC04IG0tci00XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdDbGVhciBmaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdDbGVhciBmaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbSBoaWRkZW4teHMgaGlkZGVuLXNtXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5T3B0aW9ucy5maWx0ZXJcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBwb3BvdmVyPVwie3sgJ0NsaWNrIHRoZSBjb2x1bW4gaGVhZGVycyB0byBhcHBseSBmaWx0ZXJzLicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidDbGljayB0aGUgY29sdW1uIGhlYWRlcnMgdG8gYXBwbHkgZmlsdGVycy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgZGF0YS1jeT1cImRhdGEtZ3JpZC0taGVscC1maWx0ZXJzXCJcbiAgICAgID5cbiAgICAgICAgPGkgYzh5SWNvbj1cInF1ZXN0aW9uLWNpcmNsZS1vXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gdGV4dC1wcmltYXJ5IGhpZGRlbi14cyBoaWRkZW4tc21cIlxuICAgICAgICAqbmdJZj1cInNob3dDb3VudGVyV2FybmluZ1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHBvcG92ZXI9XCJ7eyAnVGhlIGNvdW50ZXIgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgbWlnaHQgYmUgaW5hY2N1cmF0ZS4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgID5cbiAgICAgICAgPGkgYzh5SWNvbj1cIndhcm5pbmdcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0b1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImJ0bmJhciBkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoZWFkZXJBY3Rpb25Db250cm9sIG9mIGhlYWRlckFjdGlvbkNvbnRyb2xzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckFjdGlvbkNvbnRyb2wgfCBpc0NvbnRyb2xWaXNpYmxlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhlYWRlckFjdGlvbkNvbnRyb2wudGVtcGxhdGU7IGVsc2UgY3VzdG9tVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuYmFyLWJ0biBidG4tbGlua1wiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBoZWFkZXJBY3Rpb25Db250cm9sLnRleHQgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoZWFkZXJBY3Rpb25Db250cm9sLmNhbGxiYWNrKClcIlxuICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5DVVNUT01fQUNUSU9OLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tQWN0aW9uTmFtZTogaGVhZGVyQWN0aW9uQ29udHJvbC50ZXh0LFxuICAgICAgICAgICAgICAgICAgdHlwZTogaGVhZGVyQWN0aW9uQ29udHJvbC50eXBlXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCJoZWFkZXJBY3Rpb25Db250cm9sLmljb25cIiBjbGFzcz1cIm0tci00XCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGhlYWRlckFjdGlvbkNvbnRyb2wudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgaGVhZGVyQWN0aW9uQ29udHJvbC50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgaGVhZGVyQWN0aW9uQ29udHJvbDogaGVhZGVyQWN0aW9uQ29udHJvbCB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiY29uZmlndXJlQ29sdW1uc0VuYWJsZWRcIlxuICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgICAgICAgIGRyb3Bkb3duXG4gICAgICAgICAgI2RkQ29uZmlndXJlQ29sdW1ucz1cImJzLWRyb3Bkb3duXCJcbiAgICAgICAgICBbY2RrVHJhcEZvY3VzXT1cImRkQ29uZmlndXJlQ29sdW1ucy5pc09wZW5cIlxuICAgICAgICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdDb25maWd1cmUgY29sdW1ucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgZGF0YS1jeT1cImRhdGEtZ3JpZC0tY3VzdG9tLWNvbHVtbi1idG5cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG5iYXItYnRuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwiY29sdW1uc1wiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgICA8c3Bhbj57eyAnQ29uZmlndXJlIGNvbHVtbnMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPHVsICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRhdGEtZ3JpZF9fZHJvcGRvd25cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJiZy1sZXZlbC0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkNvbHVtbkRyb3AoJGV2ZW50KVwiIGNsYXNzPVwibGlzdC1ncm91cCBtLTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIGNka0RyYWcgY2RrRHJhZ0xvY2tBeGlzPVwieVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4ucG9zaXRpb25GaXhlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGRyYWdnYWJsZS1hZnRlciBwLTAgYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAoY29sdW1uLmhlYWRlciB8IHRyYW5zbGF0ZSkgfHwgY29sdW1uLm5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInZGF0YS1ncmlkLS1jdXN0b20tY29sdW1uLWhlYWRlci0nICsgY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveCBwLWwtMTZcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVHcmlkQ29sdW1uc1NpemUoKTsgZW1pdENvbmZpZ0NoYW5nZSgnY2hhbmdlQ29sdW1uVmlzaWJpbGl0eScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5DSEFOR0VfVklTSUJJTElUWSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICFjb2x1bW4udmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAoY29sdW1uLmhlYWRlciB8IHRyYW5zbGF0ZSkgfHwgY29sdW1uLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHNob3dPbkhvdmVyIG1heC13aWR0aC1maXQgYS1pLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZWBjb2x1bW4sdmVyYmAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnUmVtb3ZlYGNvbHVtbix2ZXJiYCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDdXN0b21Db2x1bW4ocG9Db25maXJtLCBjb2x1bW4sIGRkQ29uZmlndXJlQ29sdW1ucylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uY3VzdG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yzh5LXBvcG92ZXItY29uZmlybVxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIidsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ29uZmlybSByZW1vdmFsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAjcG9Db25maXJtXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9jOHktcG9wb3Zlci1jb25maXJtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiIGRhdGEtY3k9XCJkYXRhLWdyaWQtLWN1c3RvbS1jb2x1bW4tcmVtb3ZlLWJ0blwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaXNDb25maWdDb250ZXh0S25vd25cIiBjbGFzcz1cInAtOCBzdGlja3ktYm90dG9tIHNlcGFyYXRvci10b3BcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIGN1c3RvbSBjb2x1bW4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICBkYXRhLWN5PVwiZGF0YS1ncmlkLS1hZGQtY3VzdG9tLWNvbHVtblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DdXN0b21Db2x1bW5Nb2RhbCgpOyBkZENvbmZpZ3VyZUNvbHVtbnMuaGlkZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0FkZCBjdXN0b20gY29sdW1uJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0aXRsZT1cInt7ICdSZWxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBkYXRhLWN5PVwiZGF0YS1ncmlkLS1yZWxvYWQtYnRuXCJcbiAgICAgICAgICBjbGFzcz1cImJ0bmJhci1idG4gYnRuLWxpbmtcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkYXRhU291cmNlLmxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgIChjbGljayk9XCJjbGlja1JlbG9hZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJyZWZyZXNoXCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICA8c3Bhbj57eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiIXNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgfHwgc2hvd1NlYXJjaFwiXG4gICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2ggbS1sLXNtLTE2IGRhdGEtZ3JpZF9fc2VhcmNoLWlucHV0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWFyY2jigKYnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgKGlucHV0KT1cInNlYXJjaFRleHQkLmVtaXQoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwic2VhcmNoXCIgKm5nSWY9XCJzZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFwiPjwvaT5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGM4eUljb249XCJ0aW1lc1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VhcmNoVGV4dC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaFRleHQgPSAnJzsgc2VhcmNoVGV4dCQuZW1pdCgnJylcIlxuICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cInsgYWN0aW9uOiBQWF9BQ1RJT05TLkNMRUFSX1NFQVJDSCB9XCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0YWJsZS1kYXRhLWdyaWQtaGVhZGVyLWJ1bGstYWN0aW9ucyBhbmltYXRlZCBzbGlkZUluRG93biBmYXN0XCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtSWRzLmxlbmd0aCAhPT0gMFwiXG4gICAgPlxuICAgICAgPGg0PlxuICAgICAgICA8c3BhbiBuZ05vbkJpbmRhYmxlIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInsgY291bnQ6IHNlbGVjdGVkSXRlbUlkcy5sZW5ndGggfVwiPlxuICAgICAgICAgIHt7IGNvdW50IH19IHNlbGVjdGVkIGl0ZW0ocykuXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJyIGNsYXNzPVwidmlzaWJsZS14c1wiIC8+XG4gICAgICAgIDxzbWFsbCAqbmdJZj1cIiFzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrICYmIHNlbGVjdGVkSXRlbUlkcy5sZW5ndGggPj0gcGFnaW5hdGlvbi5wYWdlU2l6ZVwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0QWxsSXRlbXNTZWxlY3RlZCh0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImludGVyYWN0XCJcbiAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGFjdGlvbjogUFhfQUNUSU9OUy5TRUxFQ1RfQUxMX0lURU1TIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBjb3VudDogKGRhdGFTb3VyY2Uuc3RhdHMkIHwgYXN5bmMpLmZpbHRlcmVkU2l6ZSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2VsZWN0IGFsbCB7eyBjb3VudCB9fSBpdGVtc1xuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwibS1sLWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bmJhciBkLWZsZXhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidWxrQWN0aW9uQ29udHJvbCBvZiBidWxrQWN0aW9uQ29udHJvbHNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJidWxrQWN0aW9uQ29udHJvbCB8IGlzQ29udHJvbFZpc2libGU6IHNlbGVjdGVkSXRlbUlkc1wiXG4gICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJidWxrQWN0aW9uQ29udHJvbC50eXBlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuYmFyLWJ0blwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRXhwb3J0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1bGtBY3Rpb25Db250cm9sLmNhbGxiYWNrKHNlbGVjdGVkSXRlbUlkcywgcmVsb2FkLmJpbmQodGhpcykpXCJcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiYnVpbHRJbkFjdGlvblR5cGUuRXhwb3J0XCJcbiAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGFjdGlvbjogUFhfQUNUSU9OUy5CVUxLX0VYUE9SVCB9XCJcbiAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJzaWduLW91dFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRXhwb3J0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuYmFyLWJ0blwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1bGtBY3Rpb25Db250cm9sLmNhbGxiYWNrKHNlbGVjdGVkSXRlbUlkcywgcmVsb2FkLmJpbmQodGhpcykpXCJcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiYnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlXCJcbiAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGFjdGlvbjogUFhfQUNUSU9OUy5CVUxLX0RFTEVURSB9XCJcbiAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJkZWxldGVcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bmJhci1idG5cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgYnVsa0FjdGlvbkNvbnRyb2wudGV4dCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1bGtBY3Rpb25Db250cm9sLmNhbGxiYWNrKHNlbGVjdGVkSXRlbUlkcywgcmVsb2FkLmJpbmQodGhpcykpXCJcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkJVTEtfQ1VTVE9NX0FDVElPTixcbiAgICAgICAgICAgICAgICAgIGN1c3RvbUFjdGlvbk5hbWU6IGJ1bGtBY3Rpb25Db250cm9sLnRleHRcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJ7eyBidWxrQWN0aW9uQ29udHJvbC5pY29uIH19XCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGJ1bGtBY3Rpb25Db250cm9sLnRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0bmJhci1idG5cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5CVUxLX0NBTkNFTFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJ0aW1lc1wiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8dGFibGVcbiAgICBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlLWZpbHRlcmVkLXNvcnRlZCB0YWJsZS1kYXRhLWdyaWQgbGFyZ2UtcGFkZGluZ1wiXG4gICAgY2RrLXRhYmxlXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgW3RyYWNrQnldPVwidHJhY2tCeU5hbWVcIlxuICAgIFtjbGFzcy50YWJsZS1zdHJpcGVkXT1cImRpc3BsYXlPcHRpb25zLnN0cmlwZWRcIlxuICAgIFtjbGFzcy50YWJsZS1ib3JkZXJlZF09XCJkaXNwbGF5T3B0aW9ucy5ib3JkZXJlZFwiXG4gICAgW2NsYXNzLnRhYmxlLWRhdGEtZ3JpZC13aXRoLWNoZWNrYm94ZXNdPVwic2VsZWN0YWJsZVwiXG4gICAgW2NsYXNzLnRhYmxlLWRhdGEtZ3JpZC13aXRoLWFjdGlvbnNdPVwiYWN0aW9uQ29udHJvbHMubGVuZ3RoID4gMFwiXG4gICAgW3N0eWxlLmdyaWQtdGVtcGxhdGUtY29sdW1uc109XCJzdHlsZXMuZ3JpZFRlbXBsYXRlQ29sdW1uc1wiXG4gICAgKG1vdXNlbW92ZSk9XCJyZXNpemVIYW5kbGVDb250YWluZXJNb3VzZU1vdmUkLmVtaXQoJGV2ZW50KVwiXG4gICAgKG1vdXNldXApPVwicmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQuZW1pdCgkZXZlbnQpXCJcbiAgICBkYXRhLWN5PVwiYzh5LWRhdGEtZ3JpZC0tdGFibGVcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5TmFtZVwiXG4gICAgICBbY2RrQ29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4ubmFtZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgPHRoIGNkay1oZWFkZXItY2VsbCAqY2RrSGVhZGVyQ2VsbERlZiBkYXRhLXR5cGU9XCJpY29uXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZS5hbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZVNlbGVjdGlvblN0YXRlLmFsbFNlbGVjdGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZS5hbGxEZXNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldEFsbEl0ZW1zSW5DdXJyZW50UGFnZVNlbGVjdGVkKCRldmVudC50YXJnZXQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cInsgYWN0aW9uOiBQWF9BQ1RJT05TLlNFTEVDVF9BTExfSVRFTVMgfVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuXG4gICAgICAgICAgPHRkIGNkay1jZWxsICpjZGtDZWxsRGVmPVwibGV0IHJvd1wiIGRhdGEtdHlwZT1cImljb25cIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImM4eS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlY3RlZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNJdGVtU2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRJdGVtc1NlbGVjdGVkKFtyb3ddLCAkZXZlbnQudGFyZ2V0LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuU0VMRUNUX0lURU0sXG4gICAgICAgICAgICAgICAgICBpZDogcm93LmlkXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1kYXRhLWdyaWQtLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWN0aW9ucydcIj5cbiAgICAgICAgICA8dGggY2RrLWhlYWRlci1jZWxsICpjZGtIZWFkZXJDZWxsRGVmIGRhdGEtdHlwZT1cImljb25cIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gc3Itb25seVwiPnt7ICdBY3Rpb25zJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICA8L3RoPlxuXG4gICAgICAgICAgPHRkIGNkay1jZWxsICpjZGtDZWxsRGVmPVwibGV0IHJvd1wiIGRhdGEtdHlwZT1cImljb25cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb25Db250cm9scy5sZW5ndGggPD0gMlwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb25Db250cm9sIG9mIGFjdGlvbkNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb25Db250cm9sIHwgaXNDb250cm9sVmlzaWJsZTogcm93XCJcbiAgICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJhY3Rpb25Db250cm9sLnR5cGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImJ1aWx0SW5BY3Rpb25UeXBlLkVkaXRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0VkaXQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7ICdFZGl0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNvbnRyb2wuY2FsbGJhY2socm93LCByZWxvYWQuYmluZCh0aGlzKSlcIlxuICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuRURJVF9JVEVNLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3cuaWRcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJwZW5jaWxcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IGJ0bi1kb3QtLWRhbmdlciBzaG93T25Ib3ZlclwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidEZWxldGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQ29udHJvbC5jYWxsYmFjayhyb3csIHJlbG9hZC5iaW5kKHRoaXMpKVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJidWlsdEluQWN0aW9uVHlwZS5EZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkRFTEVURV9JVEVNLFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3cuaWRcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1kYXRhLWdyaWQtLXJlbW92ZS1idXR0b24taW4tcm93XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImRlbGV0ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3RcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoYWN0aW9uQ29udHJvbC5pY29uID8gYWN0aW9uQ29udHJvbC50ZXh0IDogJycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7IChhY3Rpb25Db250cm9sLmljb24gPyBhY3Rpb25Db250cm9sLnRleHQgOiAnJykgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNvbnRyb2wuY2FsbGJhY2socm93LCByZWxvYWQuYmluZCh0aGlzKSlcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkNVU1RPTV9BQ1RJT05fSVRFTSxcbiAgICAgICAgICAgICAgICAgICAgICBjdXN0b21BY3Rpb25OYW1lOiBhY3Rpb25Db250cm9sLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IHJvdy5pZFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjdGlvbkNvbnRyb2wuaWNvblwiIGM4eUljb249XCJ7eyBhY3Rpb25Db250cm9sLmljb24gfX1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWFjdGlvbkNvbnRyb2wuaWNvblwiPnt7IGFjdGlvbkNvbnRyb2wudGV4dCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ20tbC1hdXRvIG92ZXJmbG93LXZpc2libGUnOiBhY3Rpb25Db250cm9scy5sZW5ndGggPiAyIH1cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgIGRyb3Bkb3duXG4gICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIHJpZ2h0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbkNvbnRyb2xzLmxlbmd0aCA+IDJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgYzh5LWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWN0aW9ucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiZWxsaXBzaXMtdlwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIiAqZHJvcGRvd25NZW51PlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhY3Rpb25Db250cm9sIG9mIGFjdGlvbkNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbkNvbnRyb2wgfCBpc0NvbnRyb2xWaXNpYmxlOiByb3dcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJhY3Rpb25Db250cm9sLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdFZGl0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiYnVpbHRJbkFjdGlvblR5cGUuRWRpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQ29udHJvbC5jYWxsYmFjayhyb3csIHJlbG9hZC5iaW5kKHRoaXMpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5FRElUX0lURU0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3cuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0VkaXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJidWlsdEluQWN0aW9uVHlwZS5EZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNvbnRyb2wuY2FsbGJhY2socm93LCByZWxvYWQuYmluZCh0aGlzKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuREVMRVRFX0lURU0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3cuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiZGVsZXRlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0V4cG9ydCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQ29udHJvbC5jYWxsYmFjayhyb3csIHJlbG9hZC5iaW5kKHRoaXMpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5FWFBPUlRfSVRFTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJvdy5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJkb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdFeHBvcnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGFjdGlvbkNvbnRyb2wudGV4dCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQ29udHJvbC5jYWxsYmFjayhyb3csIHJlbG9hZC5iaW5kKHRoaXMpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuQ1VTVE9NX0FDVElPTl9JVEVNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21BY3Rpb25OYW1lOiBhY3Rpb25Db250cm9sLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3cuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJ7eyBhY3Rpb25Db250cm9sLmljb24gfX1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb25Db250cm9sLnRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgY2RrLWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqY2RrSGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNTU0NsYXNzTmFtZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXR5cGVdPVwiY29sdW1uLmRhdGFUeXBlXCJcbiAgICAgICAgICAgIFtjbGFzcy5zb3J0ZWRdPVwiY29sdW1uLnNvcnRPcmRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZmlsdGVyZWRdPVwiY29sdW1uIHwgbWFwOiBpc0NvbHVtbkZpbHRlcmluZ0FwcGxpZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhY29sdW1uLnZpc2libGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY29sdW1uLmZpbHRlcmFibGVcIiBbdGl0bGVdPVwiKGNvbHVtbi5oZWFkZXIgfCB0cmFuc2xhdGUpIHx8IGNvbHVtbi5uYW1lXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IChjb2x1bW4uaGVhZGVyIHwgdHJhbnNsYXRlKSB8fCBjb2x1bW4ubmFtZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdIHwgbWFwOiBnZXRIZWFkZXJDZWxsUmVuZGVyZXJTcGVjOnRoaXMgYXMgY2VsbFJlbmRlcmVyU3BlY1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yzh5LWNlbGwtcmVuZGVyZXIgW3NwZWNdPVwiY2VsbFJlbmRlcmVyU3BlY1wiPjwvYzh5LWNlbGwtcmVuZGVyZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gaXNEcm9wRG93blBsYWNlZFJpZ2h0IHRvIGJlIHJlbW92ZWQgd2hlbiBjb2x1bW5zIGFyZSB0cmFuc2Zvcm1lZCB0byBvYnNlcnZhYmxlcy4gLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmZpbHRlcmFibGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICAgICAgI2dyaWRIZWFkZXJEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgW2Nka1RyYXBGb2N1c109XCJncmlkSGVhZGVyRHJvcGRvd24uaXNPcGVuXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIHt7IGlzRHJvcERvd25QbGFjZWRSaWdodChjb2x1bW4pID8gJ3JpZ2h0JyA6ICdsZWZ0JyB9fVwiXG4gICAgICAgICAgICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb2x1bW4uaGVhZGVyIHwgdHJhbnNsYXRlKSB8fCBjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInZGF0YS1ncmlkLS1oZWFkZXItYnRuLS0nICsgY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAoY29sdW1uLmhlYWRlciB8IHRyYW5zbGF0ZSkgfHwgY29sdW1uLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0gfCBtYXA6IGdldEhlYWRlckNlbGxSZW5kZXJlclNwZWM6dGhpcyBhcyBjZWxsUmVuZGVyZXJTcGVjXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxjOHktY2VsbC1yZW5kZXJlclxuICAgICAgICAgICAgICAgICAgICBkYXRhLWN5PVwiYzh5LWRhdGEtZ3JpZC0tYzh5LWNlbGwtcmVuZGVyZXJcIlxuICAgICAgICAgICAgICAgICAgICBbc3BlY109XCJjZWxsUmVuZGVyZXJTcGVjXCJcbiAgICAgICAgICAgICAgICAgID48L2M4eS1jZWxsLXJlbmRlcmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJmaWx0ZXJcIiB0aXRsZT1cInt7ICdGaWx0ZXInIHwgdHJhbnNsYXRlIH19XCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8IS0tIGlzRHJvcERvd25QbGFjZWRSaWdodCB0byBiZSByZW1vdmVkIHdoZW4gY29sdW1ucyBhcmUgdHJhbnNmb3JtZWQgdG8gb2JzZXJ2YWJsZXMuIC0tPlxuICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAqZHJvcGRvd25NZW51XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkcm9wZG93bi1tZW51LXJpZ2h0LWdyaWQnOiBpc0Ryb3BEb3duUGxhY2VkUmlnaHQoY29sdW1uKSB9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRhdGEtZ3JpZF9fZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bjogZ3JpZEhlYWRlckRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXSB8IG1hcDogZ2V0RmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYzp0aGlzIGFzIGZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWNcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1maWx0ZXJpbmctZm9ybS1yZW5kZXJlclxuICAgICAgICAgICAgICAgICAgICAgIFtzcGVjXT1cImZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWNcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktZGF0YS1ncmlkLS1jOHktZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXJcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4tc29ydFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwic29ydENvbHVtblRpdGxlIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGNvbHVtbi5oZWFkZXIgfCB0cmFuc2xhdGUgfVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVNvcnRPcmRlcihjb2x1bW4ubmFtZSlcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwiY2hhbmdlLXNvcnQtb3JkZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4uc29ydE9yZGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgKm5nU3dpdGNoQ2FzZT1cIidhc2MnXCIgYzh5SWNvbj1cImxvbmctYXJyb3ctdXBcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgKm5nU3dpdGNoQ2FzZT1cIidkZXNjJ1wiIGM4eUljb249XCJsb25nLWFycm93LWRvd25cIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgKm5nU3dpdGNoRGVmYXVsdCBjOHlJY29uPVwiZXhjaGFuZ2VcIj48L2k+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnJlc2l6YWJsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgcmVzaXplSGFuZGxlTW91c2VEb3duJC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgdGFyZ2V0Q29sdW1uTmFtZTogY29sdW1uLm5hbWUgfSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgY2RrLWNlbGxcbiAgICAgICAgICAgICpjZGtDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENTU0NsYXNzTmFtZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWNlbGwtdGl0bGVdPVwiY29sdW1uLmhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIidkYXRhLWdyaWQtLScgKyBjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdHlwZV09XCJjb2x1bW4uZGF0YVR5cGVcIlxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhY29sdW1uLnZpc2libGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXNvbHZlQ2VsbFZhbHVlKHJvdywgY29sdW1uLnBhdGgpLFxuICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZTogY29sdW1uLm5hbWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdIHwgbWFwOiBnZXRDZWxsUmVuZGVyZXJTcGVjOnRoaXMgYXMgY2VsbFJlbmRlcmVyU3BlY1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Yzh5LWNlbGwtcmVuZGVyZXIgW3NwZWNdPVwiY2VsbFJlbmRlcmVyU3BlY1wiPjwvYzh5LWNlbGwtcmVuZGVyZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciBjZGtDb2x1bW5EZWY9XCJpbmZpbml0ZVNjcm9sbEZvb3RlclwiPlxuICAgICAgPHRkIGNkay1mb290ZXItY2VsbCAqY2RrRm9vdGVyQ2VsbERlZiBbc3R5bGUuZ3JpZC1jb2x1bW5dPVwic3R5bGVzLmdyaWRJbmZpbml0ZVNjcm9sbENvbHVtblwiPlxuICAgICAgICA8dGVtcGxhdGUgI2luZmluaXRlU2Nyb2xsQ29udGFpbmVyPjwvdGVtcGxhdGU+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyIGNkay1oZWFkZXItcm93ICpjZGtIZWFkZXJSb3dEZWY9XCJjb2x1bW5OYW1lc1wiPjwvdHI+XG5cbiAgICA8dHJcbiAgICAgIGRhdGEtY3k9XCJjOHktZGF0YS1ncmlkLS1yb3ctaW4tZGF0YS1ncmlkXCJcbiAgICAgIGNkay1yb3dcbiAgICAgICpjZGtSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5OYW1lc1wiXG4gICAgICAobW91c2VvdmVyKT1cInJvd01vdXNlT3Zlci5lbWl0KHJvdylcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwicm93TW91c2VMZWF2ZS5lbWl0KHJvdylcIlxuICAgICAgKGNsaWNrKT1cInJvd0NsaWNrLmVtaXQocm93KVwiXG4gICAgPjwvdHI+XG5cbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgPHRyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgaGlkZGVuOiAhaW5maW5pdGVTY3JvbGwgfVwiXG4gICAgICAgIGNkay1mb290ZXItcm93XG4gICAgICAgICpjZGtGb290ZXJSb3dEZWY9XCJbJ2luZmluaXRlU2Nyb2xsRm9vdGVyJ11cIlxuICAgICAgPjwvdHI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdGFibGU+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1mbGV4IG0tMCBwLXQtNDAgcC1iLTQwXCJcbiAgICAqbmdJZj1cIiEoZGF0YVNvdXJjZS5sb2FkaW5nJCB8IGFzeW5jKSAmJiAoZGF0YVNvdXJjZS5zdGF0cyQgfCBhc3luYykuZmlsdGVyZWRTaXplID09PSAwXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMyBjb2wtc20tNCBtLWwtYXV0byBtLXItYXV0b1wiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYzh5LXVpLWVtcHR5LXN0YXRlLCAuYzh5LWVtcHR5LXN0YXRlXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwicGFnaW5hdGlvbiAmJiAhaW5maW5pdGVTY3JvbGxcIiBjbGFzcz1cInRhYmxlLWRhdGEtZ3JpZC1mb290ZXIgc2VwYXJhdG9yIGxhcmdlLXBhZGRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgbm8tZ3V0dGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiKGRhdGFTb3VyY2Uuc3RhdHMkIHwgYXN5bmMpLmN1cnJlbnRQYWdlU2l6ZSA+IDBcIlxuICAgICAgICBjbGFzcz1cImNvdW50ZXIgcC10LTggcC1iLThcIlxuICAgICAgICBkYXRhLWN5PVwiZGF0YS1ncmlkLS1jb3VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCIgbmdOb25CaW5kYWJsZSB0cmFuc2xhdGUgW3RyYW5zbGF0ZVBhcmFtc109XCJwYWdpbmF0aW9uTGFiZWxQYXJhbXNcIj5cbiAgICAgICAgICB7eyBwYWdlRmlyc3RJdGVtSWR4IH19IC0ge3sgcGFnZUxhc3RJdGVtSWR4IH19IG9mIHt7IGl0ZW1zVG90YWwgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgbm8tZ3V0dGVyIHRleHQtY2VudGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiKGRhdGFTb3VyY2Uuc3RhdHMkIHwgYXN5bmMpLmZpbHRlcmVkU2l6ZSA+IG1pblBvc3NpYmxlUGFnZVNpemVcIlxuICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXAgZm9ybS1pbmxpbmUgcC10LTggcC1iLThcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJtLXItNFwiIGZvcj1cImZpbHRlcmVkU2l6ZVwiPnt7ICdJdGVtcyBwZXIgcGFnZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgaWQ9XCJmaWx0ZXJlZFNpemVcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImRhdGEtZ3JpZC0tcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJwYWdpbmF0aW9uLnBhZ2VTaXplXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICB1cGRhdGVQYWdpbmF0aW9uKHsgaXRlbXNQZXJQYWdlOiAkZXZlbnQsIHBhZ2U6IHBhZ2luYXRpb24uY3VycmVudFBhZ2UgfSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcGFnZVNpemUgb2YgcG9zc2libGVQYWdlU2l6ZXNcIiBbbmdWYWx1ZV09XCJwYWdlU2l6ZVwiPlxuICAgICAgICAgICAgICB7eyBwYWdlU2l6ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTQgbm8tZ3V0dGVyIHRleHQtcmlnaHRcIj5cbiAgICAgIDxwYWdpbmF0aW9uXG4gICAgICAgICpuZ0lmPVwiKGRhdGFTb3VyY2Uuc3RhdHMkIHwgYXN5bmMpLmZpbHRlcmVkU2l6ZSA+IDBcIlxuICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImhpZGVQYWdpbmF0aW9uJCB8IGFzeW5jXCJcbiAgICAgICAgW25nTW9kZWxdPVwicGFnaW5hdGlvbi5jdXJyZW50UGFnZVwiXG4gICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVQYWdpbmF0aW9uKCRldmVudClcIlxuICAgICAgICBbdG90YWxJdGVtc109XCIoZGF0YVNvdXJjZS5zdGF0cyQgfCBhc3luYykuZmlsdGVyZWRTaXplXCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJwYWdpbmF0aW9uLnBhZ2VTaXplXCJcbiAgICAgICAgKG51bVBhZ2VzKT1cInRvdGFsUGFnZXNDb3VudCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgW21heFNpemVdPVwiNVwiXG4gICAgICAgIFtib3VuZGFyeUxpbmtzXT1cImZhbHNlXCJcbiAgICAgICAgcHJldmlvdXNUZXh0PVwiUHJldmlvdXNcIlxuICAgICAgICBuZXh0VGV4dD1cIk5leHRcIlxuICAgICAgICBjbGFzcz1cInAtdC04IHAtYi04XCJcbiAgICAgID48L3BhZ2luYXRpb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
1035
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFFTCxTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsSUFBSSxFQUNKLEdBQUcsRUFDSCxPQUFPLEVBQ1AsT0FBTyxFQUNQLEtBQUssRUFDTCxRQUFRLElBQUksU0FBUyxFQUNyQixLQUFLLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEtBQUssRUFFTCxFQUFFLEVBQ0YsSUFBSSxFQUNKLE9BQU8sRUFFUixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEtBQUssRUFDTCxHQUFHLEVBQ0gsUUFBUSxFQUNSLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsRUFDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hC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QkFBdkIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBTUcsV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxRQUFRO3NCQUFqQixNQUFNO2dCQUVHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFFMkIsZUFBZTtzQkFBaEQsZUFBZTt1QkFBQyxlQUFlO2dCQUVPLGVBQWU7c0JBQXJELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHckMsdUJBQXVCO3NCQUR0QixTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBNkRwQixNQUFNO3NCQUFoRSxZQUFZO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtIZWFkZXJDZWxsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZmxvdyxcbiAgZ2V0LFxuICBpbmRleE9mLFxuICBpc0VtcHR5LFxuICBpc05pbCxcbiAgcGFyc2VJbnQgYXMgX3BhcnNlSW50LFxuICB1bmlvbixcbiAgdW5pcUJ5LFxuICB3aXRob3V0XG59IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBpc09ic2VydmFibGUsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgcGlwZSxcbiAgU3ViamVjdCxcbiAgVW5hcnlGdW5jdGlvblxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNvbmNhdE1hcCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZmlyc3QsXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICcuLi9jb21tb24vZXh0ZW5zaW9uLWhvb2tzJztcbmltcG9ydCB7IExvYWRNb3JlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZE1vcmVNb2RlIH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5tb2RlbCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQnV0dG9ucywgUG9wb3ZlckNvbmZpcm1Db21wb25lbnQgfSBmcm9tICcuLi9tb2RhbC9wb3BvdmVyLWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LWV4cGVyaWVuY2UvZ2FpbnNpZ2h0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUHJvZHVjdEV4cGVyaWVuY2VFdmVudCxcbiAgUHJvZHVjdEV4cGVyaWVuY2VFdmVudFNvdXJjZSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX0VWRU5UX1NPVVJDRVxufSBmcm9tICcuLi9wcm9kdWN0LWV4cGVyaWVuY2UvcHJvZHVjdC1leHBlcmllbmNlLm1vZGVsJztcbmltcG9ydCB7IENlbGxSZW5kZXJlclNwZWMgfSBmcm9tICcuL2NvbHVtbi9jZWxsLXJlbmRlcmVyJztcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4vY29sdW1uL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ3VzdG9tQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW4vY3VzdG9tLmNvbHVtbic7XG5pbXBvcnQgeyBGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjLCBGaWx0ZXJpbmdNb2RpZmllciB9IGZyb20gJy4vY29sdW1uL2ZpbHRlcmluZy1mb3JtLXJlbmRlcmVyJztcbmltcG9ydCB7IENvbmZpZ3VyZUN1c3RvbUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29uZmlndXJlLWN1c3RvbS1jb2x1bW4nO1xuaW1wb3J0IHtcbiAgRGF0YUdyaWRDb25maWd1cmF0aW9uU3RyYXRlZ3ksXG4gIERBVEFfR1JJRF9DT05GSUdVUkFUSU9OX1NUUkFURUdZLFxuICBHcmlkQ29uZmlnUGFydCxcbiAgR3JpZEV2ZW50VHlwZVxufSBmcm9tICcuL2RhdGEtZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEJ1aWx0SW5BY3Rpb25UeXBlLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBDb2x1bW5Db25maWcsXG4gIENvbHVtbkRhdGFUeXBlLFxuICBDdXN0b21Db2x1bW5Db25maWcsXG4gIERhdGFHcmlkLFxuICBEYXRhU291cmNlU3RhdHMsXG4gIERpc3BsYXlPcHRpb25zLFxuICBGaWx0ZXJpbmdBY3Rpb25UeXBlLFxuICBHcmlkQ29uZmlnLFxuICBIZWFkZXJBY3Rpb25Db250cm9sLFxuICBtaW5Db2x1bW5HcmlkVHJhY2tTaXplLFxuICBQYWdpbmF0aW9uLFxuICByYXRpb3NCeUNvbHVtblR5cGVzLFxuICBSb3csXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNvcnRPcmRlcixcbiAgU3BlY2lhbENvbHVtbk5hbWVcbn0gZnJvbSAnLi9kYXRhLWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YUdyaWRTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWdyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkRGF0YVNvdXJjZSB9IGZyb20gJy4vZ3JpZC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBQWF9BQ1RJT05TLCBQWF9FVkVOVF9OQU1FIH0gZnJvbSAnLi9wcm9kdWN0LWV4cGVyaWVuY2UuY29uc3RhbnRzJztcblxuZW51bSBTb3J0aW5nT3JkZXIge1xuICBBU0MgPSAnYXNjJyxcbiAgREVTQyA9ICdkZXNjJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdkLWNvbnRlbnRzJyB9LFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRVZFTlRfU09VUkNFLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YUdyaWRDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50XG4gIGltcGxlbWVudHMgRGF0YUdyaWQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgUHJvZHVjdEV4cGVyaWVuY2VFdmVudFNvdXJjZVxue1xuICAvKiogVGhlIHRpdGxlIGZvciB0aGUgZGF0YSBncmlkLCBpdCdzIGRpc3BsYXllZCBpbiB0aGUgZ3JpZCdzIGhlYWRlci4gKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0l0ZW1zJyk7XG4gIC8qKiBUaGUgbGFiZWwgZm9yIGxvYWQgbW9yZSBidXR0b24uICovXG4gIEBJbnB1dCgpIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIGl0ZW1zJyk7XG4gIC8qKiBUaGUgbGFiZWwgZm9yIGxvYWRpbmcgaW5kaWNhdG9yLiAqL1xuICBASW5wdXQoKSBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyBpdGVtc+KApicpO1xuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRleHQgc2VhcmNoIGlucHV0IGlzIHNob3duIGluIHRoZSBncmlkJ3MgaGVhZGVyLiAqL1xuICBASW5wdXQoKSBzaG93U2VhcmNoID0gZmFsc2U7XG4gIC8qKiBUYWtlcyBhbiBldmVudCBlbWl0dGVyLiBXaGVuIGFuIGV2ZW50IGlzIGVtaXR0ZWQsIHRoZSBncmlkIHdpbGwgYmUgcmVsb2FkZWQuICovXG4gIEBJbnB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGNvbHVtbnM6IENvbHVtbltdID0gW107XG4gIC8qKiBUaGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZ3JpZC4gKi9cbiAgQElucHV0KCdjb2x1bW5zJylcbiAgcHJpdmF0ZSBfY29sdW1uczogQ29sdW1uW107XG5cbiAgZGF0YVNvdXJjZSA9IG5ldyBHcmlkRGF0YVNvdXJjZSgpO1xuICByb3dzOiBSb3dbXTtcbiAgLyoqIFRoZSBsaXN0IG9mIHJvd3MgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBncmlkICh1c2VkIGZvciBjbGllbnQgc2lkZSBkYXRhKS4gKi9cbiAgQElucHV0KCdyb3dzJylcbiAgc2V0IF9yb3dzKHJvd3M6IFJvd1tdKSB7XG4gICAgdGhpcy5yb3dzID0gcm93cyB8fCBbXTtcbiAgfVxuXG4gIGZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICBmaWx0ZXJlZEl0ZW1zQ291bnQ6IDAsXG4gICAgYWxsSXRlbXNDb3VudDogMFxuICB9O1xuXG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHBhZ2luYXRpb25MYWJlbFBhcmFtcyA9IHtcbiAgICBwYWdlRmlyc3RJdGVtSWR4OiAwLFxuICAgIHBhZ2VMYXN0SXRlbUlkeDogMCxcbiAgICBpdGVtc1RvdGFsOiAwXG4gIH07XG4gIHJlYWRvbmx5IHBvc3NpYmxlUGFnZVNpemVzOiBudW1iZXJbXSA9IFsyNSwgNTAsIDEwMF07XG4gIHJlYWRvbmx5IG1pblBvc3NpYmxlUGFnZVNpemUgPSBNYXRoLm1pbiguLi50aGlzLnBvc3NpYmxlUGFnZVNpemVzKTtcbiAgLyoqIFBhZ2luYXRpb24gc2V0dGluZ3MsIGUuZy4gYWxsb3dzIGZvciBzZXR0aW5nIGN1cnJlbnQgcGFnZSBvciBwYWdlIHNpemUuICovXG4gIEBJbnB1dCgncGFnaW5hdGlvbicpXG4gIHNldCBfcGFnaW5hdGlvbihwYWdpbmF0aW9uOiBQYWdpbmF0aW9uKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjtcbiAgfVxuXG4gIGluZmluaXRlU2Nyb2xsOiBMb2FkTW9yZU1vZGU7XG4gIC8qKiBTZXRzIGxvYWQgbW9yZSBtb2RlLiAqL1xuICBASW5wdXQoJ2luZmluaXRlU2Nyb2xsJylcbiAgc2V0IF9pbmZpbml0ZVNjcm9sbChpbmZpbml0ZVNjcm9sbDogTG9hZE1vcmVNb2RlKSB7XG4gICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGluZmluaXRlU2Nyb2xsO1xuICB9XG5cbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgLyoqXG4gICAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGludm9rZWQgd2hlbmV2ZXIgZGF0YSBuZWVkcyB0byBiZSBsb2FkZWQgZnJvbSBzZXJ2ZXIuXG4gICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgdGFrZSBbW0RhdGFTb3VyY2VNb2RpZmllcl1dIGFuZCByZXR1cm4gW1tTZXJ2ZXJTaWRlRGF0YVJlc3VsdF1dLlxuICAgKi9cbiAgQElucHV0KCdzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrJylcbiAgc2V0IF9zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2spIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuICB9XG5cbiAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW1zIGNhbiBiZSBzZWxlY3RlZCBieSBjbGlja2luZyBhIGNoZWNrYm94IGluIHRoZSBmaXJzdCBjb2x1bW4uICovXG4gIEBJbnB1dCgnc2VsZWN0YWJsZScpXG4gIHNldCBfc2VsZWN0YWJsZShzZWxlY3RhYmxlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHNlbGVjdGlvblByaW1hcnlLZXkgPSAnaWQnO1xuICAvKiogRGV0ZXJtaW5lcyB3aGljaCBpdGVtJ3MgcHJvcGVydHkgd2lsbCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHNlbGVjdGlvbiBzdGF0dXMuICovXG4gIEBJbnB1dCgnc2VsZWN0aW9uUHJpbWFyeUtleScpXG4gIHNldCBfc2VsZWN0aW9uUHJpbWFyeUtleShzZWxlY3Rpb25QcmltYXJ5S2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGlvblByaW1hcnlLZXkgPSBzZWxlY3Rpb25QcmltYXJ5S2V5O1xuICB9XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIGdyaWRIZWFkZXI6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlXG4gIH07XG4gIC8qKiBTZXRzIGRpc3BsYXkgb3B0aW9ucy4gKi9cbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5T3B0aW9ucyA9IHsgLi4udGhpcy5kaXNwbGF5T3B0aW9ucywgLi4uZGlzcGxheU9wdGlvbnMgfTtcbiAgfVxuXG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW107XG4gIC8qKiBTZXRzIGFjdGlvbiBjb250cm9scyAoYWN0aW9ucyBhdmFpbGFibGUgZm9yIGluZGl2aWR1YWwgaXRlbXMpLiAqL1xuICBASW5wdXQoJ2FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9hY3Rpb25Db250cm9scyhhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdKSB7XG4gICAgdGhpcy5hY3Rpb25Db250cm9scyA9IGFjdGlvbkNvbnRyb2xzIHx8IFtdO1xuICB9XG5cbiAgYnVsa0FjdGlvbkNvbnRyb2xzOiBCdWxrQWN0aW9uQ29udHJvbFtdO1xuICAvKiogU2V0cyBidWxrIGFjdGlvbiBjb250cm9scyAoYWN0aW9ucyBhdmFpbGFibGUgZm9yIGl0ZW1zIHNlbGVjdGVkIGJ5IHVzZXIpLiAqL1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpXG4gIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSkge1xuICAgIHRoaXMuYnVsa0FjdGlvbkNvbnRyb2xzID0gYnVsa0FjdGlvbkNvbnRyb2xzIHx8IFtdO1xuICB9XG5cbiAgaGVhZGVyQWN0aW9uQ29udHJvbHM6IEhlYWRlckFjdGlvbkNvbnRyb2xbXTtcbiAgLyoqIFNldHMgaGVhZGVyIGFjdGlvbiBjb250cm9scyAoYWN0aW9ucyBhdmFpbGFibGUgZnJvbSBkYXRhIGdyaWQgaGVhZGVyKS4gKi9cbiAgQElucHV0KCdoZWFkZXJBY3Rpb25Db250cm9scycpXG4gIHNldCBfaGVhZGVyQWN0aW9uQ29udHJvbHMoaGVhZGVyQWN0aW9uQ29udHJvbHM6IEhlYWRlckFjdGlvbkNvbnRyb2xbXSkge1xuICAgIHRoaXMuaGVhZGVyQWN0aW9uQ29udHJvbHMgPSBoZWFkZXJBY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuXG4gIC8qKiBTZXRzIGluaXRpYWwgc2VhcmNoIHRleHQuICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFRleHQgPSAnJztcblxuICAvKiogRGV0ZXJtaW5lcyBpZiBjdXN0b20gY29sdW1ucyBidXR0b24gd2lsbCBiZSBlbmFibGVkLiAqL1xuICBASW5wdXQoKVxuICBjb25maWd1cmVDb2x1bW5zRW5hYmxlZCA9IHRydWU7XG5cbiAgLyoqIFNob3dzIHRoZSB3YXJuaW5nIGZvciB0aGUgc3ViLWFzc2V0cyBjb3VudGVyICovXG4gIEBJbnB1dCgpXG4gIHNob3dDb3VudGVyV2FybmluZyA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIG1vdXNlIGlzIG92ZXIgYSByb3cuICovXG4gIEBPdXRwdXQoKSByb3dNb3VzZU92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gbW91c2UgbGVhdmVzIGEgcm93LiAqL1xuICBAT3V0cHV0KCkgcm93TW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIHJvdyBpcyBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gZ3JpZCdzIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZC4gKi9cbiAgQE91dHB1dCgpIG9uQ29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgYmVmb3JlIHRoZSBmaWx0ZXIgaXMgYXBwbGllZC4gKi9cbiAgQE91dHB1dCgpIG9uQmVmb3JlRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIC8qKiBFbWl0cyBhbiBldmVudCBiZWZvcmUgdGhlIHNlYXJjaCBpcyBwZXJmb3JtZWQuICovXG4gIEBPdXRwdXQoKSBvbkJlZm9yZVNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGZpbHRlciBpcyBhcHBsaWVkIGluIGEgY29sdW1uLiAqL1xuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBjb2x1bW5OYW1lPzogc3RyaW5nO1xuICAgIGRyb3Bkb3duPzogYW55O1xuICAgIGZpbHRlcmluZ01vZGlmaWVyPzogYW55O1xuICB9PigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBpdGVtcyBzZWxlY3Rpb24gY2hhbmdlcy4gVGhlIGFycmF5IGNvbnRhaW5zIGtleXMgb2Ygc2VsZWN0ZWQgaXRlbXMgKGtleSBwcm9wZXJ0eSBpcyBkZWZpbmVkIGJ5IGBzZWxlY3Rpb25QcmltYXJ5S2V5YCkuICovXG4gIEBPdXRwdXQoKSBpdGVtc1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG4gIC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIHJlbG9hZCBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgQE91dHB1dCgpIG9uUmVsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIGN1c3RvbSBjb2x1bW4gaXMgYWRkZWQgKi9cbiAgQE91dHB1dCgpIG9uQWRkQ3VzdG9tQ29sdW1uID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21Db2x1bW5Db25maWc+KCk7XG4gIC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIGEgY3VzdG9tIGNvbHVtbiBpcyByZW1vdmVkICovXG4gIEBPdXRwdXQoKSBvblJlbW92ZUN1c3RvbUNvbHVtbiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgYWZ0ZXIgdGhlIGNvbHVtbiBmaWx0ZXIgaGFzIGJlZW4gcmVzZXQgKi9cbiAgQE91dHB1dCgpIG9uQ29sdW1uRmlsdGVyUmVzZXQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtbj4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gY29sdW1uIHNvcnRpbmcgaGFzIGJlZW4gY2hhbmdlZCAqL1xuICBAT3V0cHV0KCkgb25Tb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBwYWdlIHNpemUgaGFzIGJlZW4gY2hhbmdlZCAqL1xuICBAT3V0cHV0KCkgb25QYWdlU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZENvbmZpZz4oKTtcbiAgLyoqIEVtaXRzIGFuIGV2ZW50IHdoZW4gY29sdW1uIG9yZGVyIGhhcyBiZWVuIGNoYW5nZWQgKi9cbiAgQE91dHB1dCgpIG9uQ29sdW1uUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICAvKiogRW1pdHMgYW4gZXZlbnQgd2hlbiBjb2x1bW4gb3JkZXIgaGFzIGJlZW4gY2hhbmdlZCAqL1xuICBAT3V0cHV0KCkgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKSBjb2x1bW5SZW5kZXJlcnM6IFF1ZXJ5TGlzdDxDb2x1bW5EaXJlY3RpdmU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbCcsIHsgc3RhdGljOiB0cnVlIH0pIHNjcm9sbENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdpbmZpbml0ZVNjcm9sbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBpbmZpbml0ZVNjcm9sbENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBsb2FkTW9yZUNvbXBvbmVudDogTG9hZE1vcmVDb21wb25lbnQ7XG5cbiAgY29sdW1uTmFtZXMgPSBbXTtcblxuICBzdHlsZXMgPSB7XG4gICAgdGFibGVDdXJzb3I6ICdhdXRvJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB1bmRlZmluZWRcbiAgfTtcblxuICBzZWFyY2hUZXh0JCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBmaWx0ZXJpbmdBcHBsaWVkID0gZmFsc2U7XG5cbiAgdG90YWxQYWdlc0NvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihJbmZpbml0eSk7XG4gIGhpZGVQYWdpbmF0aW9uJCA9IHRoaXMudG90YWxQYWdlc0NvdW50JC5waXBlKFxuICAgIG1hcCh0b3RhbFBhZ2VzQ291bnQgPT4gdG90YWxQYWdlc0NvdW50IDw9IDEpLFxuICAgIGRlbGF5KDApIC8vIHByZXZlbnRzIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3JcbiAgKTtcblxuICBzZWxlY3RlZEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gIGN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgYWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgIGFsbERlc2VsZWN0ZWQ6IHRydWVcbiAgfTtcblxuICBidWlsdEluQWN0aW9uVHlwZSA9IHtcbiAgICBFZGl0OiBCdWlsdEluQWN0aW9uVHlwZS5FZGl0LFxuICAgIERlbGV0ZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgIEV4cG9ydDogQnVpbHRJbkFjdGlvblR5cGUuRXhwb3J0XG4gIH07XG5cbiAgY29uZmlybVJlbW92ZUNvbHVtbkJ1dHRvbnM6IFBvcG92ZXJDb25maXJtQnV0dG9uc1tdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICAgIGFjdGlvbjogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKVxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ1JlbW92ZWBjb2x1bW4sdmVyYmAnKSxcbiAgICAgIHN0YXR1czogJ2RhbmdlcicsXG4gICAgICBhY3Rpb246ICgpID0+IFByb21pc2UucmVzb2x2ZSh0cnVlKVxuICAgIH1cbiAgXTtcblxuICBpc0NvbmZpZ0NvbnRleHRLbm93biA9IGZhbHNlO1xuXG4gIC8qKiBQcm9kdWN0IGV4cGVyaWVuY2UgY29uc3RhbnRzIGRlY2xhcmF0aW9ucyAqL1xuICBwcm9kdWN0RXhwZXJpZW5jZUV2ZW50OiBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50ID0geyBldmVudE5hbWU6IFBYX0VWRU5UX05BTUUgfTtcbiAgUFhfQUNUSU9OUyA9IFBYX0FDVElPTlM7XG5cbiAgcmVhZG9ubHkgc29ydENvbHVtblRpdGxlID0gZ2V0dGV4dCgnU29ydCBjb2x1bW4gXCJ7eyBuYW1lIH19XCInKTtcblxuICByZXNpemVIYW5kbGVNb3VzZURvd24kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBoZWFkZXJCZWluZ1Jlc2l6ZWQ6IHtcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICB9O1xuICBAVmlld0NoaWxkcmVuKENka0hlYWRlckNlbGwsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIHRoUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBwcml2YXRlIHRoRWxzOiBIVE1MRWxlbWVudFtdO1xuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudDogYm9vbGVhbjtcblxuICBwcml2YXRlIGNvbHVtbnNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGVmYXVsdENvbHVtbnM6IENvbHVtbltdID0gW107XG5cbiAgcHJpdmF0ZSByZWxvYWRDb25maWd1cmF0aW9uJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBTRUFSQ0hfREVCT1VOQ0VfVElNRSA9IDUwMDtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciwgdGFraW5nIGJvb2xlYW4gdmFsdWVzIHVzZWQgZm9yIGxvYWRpbmcgZGF0YSBncmlkIGRhdGEgd2l0aCBkZWJvdW5jZS5cbiAgICogRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gZmFsc2UuIFNldCB0byB0cnVlIGlmIGRhdGEgZ3JpZCBpcyB1c2luZyBpbmZpbml0ZSBzY3JvbGwgYW5kIHBhZ2Ugc2hvdWxkIGJlIHJlbG9hZGVkLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gYXZvaWQgaGF2aW5nIG11bHRpcGxlIHRoaXMubG9hZERhdGEoKSBmdW5jdGlvbiBjYWxscy5cbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckxvYWREYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChEQVRBX0dSSURfQ09ORklHVVJBVElPTl9TVFJBVEVHWSlcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvblN0cmF0ZWd5OiBEYXRhR3JpZENvbmZpZ3VyYXRpb25TdHJhdGVneSxcbiAgICBwcml2YXRlIGRhdGFHcmlkU2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxuICApIHtcbiAgICB0aGlzLnRyaWdnZXJMb2FkRGF0YS5waXBlKGRlYm91bmNlVGltZSgxKSwgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKHJlbG9hZCA9PiB7XG4gICAgICB0aGlzLmxvYWREYXRhKHJlbG9hZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbG9hZENvbmZpZ3VyYXRpb24kXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5Py5nZXRDb25maWckKCkgPz8gb2YobnVsbCkpLFxuICAgICAgICB0YXAoY29uZmlnID0+IHtcbiAgICAgICAgICB0aGlzLnNldENvbHVtbnMoY29uZmlnKTtcbiAgICAgICAgICB0aGlzLnNldFBhZ2VTaXplKGNvbmZpZyk7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyTG9hZERhdGEuZW1pdCghIXRoaXMuaW5maW5pdGVTY3JvbGwpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZGF0YVNvdXJjZS5zdGF0cyQpLFxuICAgICAgICB0YXAoc3RhdHMgPT4ge1xuICAgICAgICAgIHRoaXMuY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHMpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0cyk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlzQ29uZmlnQ29udGV4dEtub3duID0gISF0aGlzLmNvbmZpZ3VyYXRpb25TdHJhdGVneT8uaXNDb250ZXh0S25vd24oKTtcblxuICAgIHRoaXMuc2VhcmNoVGV4dCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5TRUFSQ0hfREVCT1VOQ0VfVElNRSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcChzZWFyY2hUZXh0ID0+IHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgICAgIHRoaXMub25CZWZvcmVTZWFyY2guZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KHtcbiAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5TRUFSQ0gsXG4gICAgICAgICAgICBzZWFyY2hJbnB1dDogc2VhcmNoVGV4dFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5kYXRhU291cmNlLmRhdGEkLCB0aGlzLml0ZW1zU2VsZWN0LmFzT2JzZXJ2YWJsZSgpKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0YV0pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZUVtcHR5ID0gZGF0YS5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgICAgICAgICBhbGxTZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IGZhbHNlIDogZGF0YS5ldmVyeShpdGVtID0+IHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpLFxuICAgICAgICAgICAgYWxsRGVzZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IHRydWUgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gIXRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWxvYWRDb25maWd1cmF0aW9uJC5uZXh0KCk7XG5cbiAgICBpZiAodGhpcy5yZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2gucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzQW5kUGVyc2lzdENvbmZpZ0NoYW5nZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoZXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICAoKCFldmVudC5fYWN0aW9uQ29udHJvbHMgJiYgIWV2ZW50LnNlYXJjaFRleHQpIHx8IGV2ZW50Ll9hY3Rpb25Db250cm9scz8uZmlyc3RDaGFuZ2UpICYmXG4gICAgICB0aGlzLmNvbHVtbnNJbml0aWFsaXplZFxuICAgICkge1xuICAgICAgY29uc3QgcmVsb2FkID0gISFldmVudC5faW5maW5pdGVTY3JvbGw/LmN1cnJlbnRWYWx1ZSAmJiAhZXZlbnQuX2luZmluaXRlU2Nyb2xsPy5maXJzdENoYW5nZTtcbiAgICAgIHRoaXMudHJpZ2dlckxvYWREYXRhLmVtaXQocmVsb2FkKTtcbiAgICB9XG4gICAgaWYgKCEhZXZlbnQuX2NvbHVtbnMgJiYgIWV2ZW50Ll9jb2x1bW5zLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnJlbG9hZENvbmZpZ3VyYXRpb24kLm5leHQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICB0aGlzLnVwZGF0ZVRoRWxzKCk7XG4gICAgdGhpcy5zZXR1cFJlc2l6ZUhhbmRsZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzZXRDb2x1bW5zKGNvbmZpZzogR3JpZENvbmZpZykge1xuICAgIGlmICghIXRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5ICYmICFpc0VtcHR5KHRoaXMuX2NvbHVtbnMpKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmRhdGFHcmlkU2VydmljZS5hcHBseUNvbmZpZ1RvQ29sdW1ucyhjb25maWcsIHRoaXMuX2NvbHVtbnMpO1xuICAgICAgdGhpcy5jb2x1bW5zSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLl9jb2x1bW5zIHx8IFtdO1xuICAgICAgdGhpcy5jb2x1bW5zSW5pdGlhbGl6ZWQgPSB0aGlzLmNvbHVtbnNJbml0aWFsaXplZCB8fCAhIXRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0Q29sdW1ucyA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHNldFBhZ2VTaXplKGNvbmZpZzogR3JpZENvbmZpZykge1xuICAgIGlmICghIWNvbmZpZz8ucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge1xuICAgICAgICAuLi50aGlzLnBhZ2luYXRpb24sXG4gICAgICAgIHBhZ2VTaXplOiBjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IGdldCh0aGlzLnBhZ2luYXRpb24sICdwYWdlU2l6ZScpO1xuICAgIGlmIChcbiAgICAgIHRoaXMucGFnaW5hdGlvbiAmJlxuICAgICAgIXRoaXMucG9zc2libGVQYWdlU2l6ZXMuZmluZChwb3NzaWJsZVBhZ2VTaXplID0+IHBvc3NpYmxlUGFnZVNpemUgPT09IHBhZ2VTaXplKVxuICAgICkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIHBhZ2VTaXplOiB0aGlzLm1pblBvc3NpYmxlUGFnZVNpemUgfTtcbiAgICB9XG4gIH1cblxuICBvcGVuQ3VzdG9tQ29sdW1uTW9kYWwoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coQ29uZmlndXJlQ3VzdG9tQ29sdW1uQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1uc1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbW9kYWxSZWYuY29udGVudC5vbkFkZEN1c3RvbUNvbHVtblxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoY3VzdG9tQ29sdW1uQ29uZmlnOiBDdXN0b21Db2x1bW5Db25maWcpID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdEZpeGVkQ29sdW1Qb3NpdGlvbiA9IHRoaXMuY29sdW1ucy5pbmRleE9mKFxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5wb3NpdGlvbkZpeGVkKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShcbiAgICAgICAgICAgIGZpcnN0Rml4ZWRDb2x1bVBvc2l0aW9uID4gLTEgPyBmaXJzdEZpeGVkQ29sdW1Qb3NpdGlvbiA6IHRoaXMuY29sdW1ucy5sZW5ndGgsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgbmV3IEN1c3RvbUNvbHVtbihjdXN0b21Db2x1bW5Db25maWcpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCh7XG4gICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuQUREX0NVU1RPTV9DT0xVTU4sXG4gICAgICAgICAgICBjb2x1bW46IGN1c3RvbUNvbHVtbkNvbmZpZy5oZWFkZXIgfHwgY3VzdG9tQ29sdW1uQ29uZmlnLm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbChtb2RhbFJlZi5vbkhpZGRlbilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vbkFkZEN1c3RvbUNvbHVtbi5lbWl0KGV2ZW50KSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVDdXN0b21Db2x1bW4oXG4gICAgcG9Db25maXJtOiBQb3BvdmVyQ29uZmlybUNvbXBvbmVudCxcbiAgICBjb2x1bW46IENvbHVtbixcbiAgICBkZENvbmZpZ3VyZUNvbHVtbnM6IEJzRHJvcGRvd25EaXJlY3RpdmVcbiAgKSB7XG4gICAgZGRDb25maWd1cmVDb2x1bW5zLmF1dG9DbG9zZSA9IGZhbHNlO1xuICAgIHBvQ29uZmlybS5tZXNzYWdlID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgY29sdW1uPycpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZW1vdmU6IGJvb2xlYW4gPSBhd2FpdCBwb0NvbmZpcm0uc2hvdyh0aGlzLmNvbmZpcm1SZW1vdmVDb2x1bW5CdXR0b25zKTtcbiAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sPy5uYW1lICE9PSBjb2x1bW4/Lm5hbWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5vblJlbW92ZUN1c3RvbUNvbHVtbi5lbWl0KGNvbHVtbik7XG4gICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KHtcbiAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuUkVNT1ZFX0NVU1RPTV9DT0xVTU4sXG4gICAgICAgICAgY29sdW1uOiBjb2x1bW4uaGVhZGVyIHx8IGNvbHVtbi5uYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiAoZGRDb25maWd1cmVDb2x1bW5zLmF1dG9DbG9zZSA9IHRydWUpLCAwKTtcbiAgfVxuXG4gIHRyYWNrQnlOYW1lKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgfVxuXG4gIHJlc29sdmVDZWxsVmFsdWUocm93LCBwYXRoKSB7XG4gICAgcmV0dXJuIGZsb3coW1xuICAgICAgeCA9PiB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZVZhbHVlKHgsIHBhdGgpLFxuICAgICAgdGhpcy5kYXRhU291cmNlLnJlc29sdmVGdW5jdGlvbixcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5ub3JtYWxpemVOaWxcbiAgICBdKShyb3cpO1xuICB9XG5cbiAgY2hhbmdlU29ydE9yZGVyKGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbk5hbWUpO1xuXG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgY29uc3QgeyBzb3J0T3JkZXIgfSA9IGNvbHVtbjtcblxuICAgICAgaWYgKCFzb3J0T3JkZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgU29ydGluZ09yZGVyLkFTQyk7XG4gICAgICB9IGVsc2UgaWYgKHNvcnRPcmRlciA9PT0gU29ydGluZ09yZGVyLkFTQykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCBTb3J0aW5nT3JkZXIuREVTQyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU29ydGluZyhjb2x1bW5OYW1lczogc3RyaW5nW10sIHNvcnRPcmRlcjogU29ydE9yZGVyKSB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoe1xuICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkNIQU5HRV9TT1JUSU5HX09SREVSLFxuICAgICAgY29sdW1uczogY29sdW1uTmFtZXMsXG4gICAgICBzb3J0T3JkZXI6IHNvcnRPcmRlciA9PT0gJycgPyAnbm9uZScgOiBzb3J0T3JkZXJcbiAgICB9KTtcblxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbik6IENvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uTmFtZXMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmNvbHVtbiwgc29ydE9yZGVyIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCdzb3J0Jyk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGNvbHVtbk5hbWUsIGRyb3Bkb3duLCBmaWx0ZXJpbmdNb2RpZmllcikge1xuICAgIHRoaXMudHJpZ2dlckV2ZW50KHtcbiAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5BUFBMWV9GSUxURVIsXG4gICAgICBjb2x1bW46IGNvbHVtbk5hbWUsXG4gICAgICBmaWx0ZXJpbmdNb2RpZmllclxuICAgIH0pO1xuICAgIHRoaXMub25CZWZvcmVGaWx0ZXIuZW1pdCh7IGNvbHVtbk5hbWUsIGRyb3Bkb3duLCBmaWx0ZXJpbmdNb2RpZmllciB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXIsXG4gICAgICBwYXlsb2FkOiB7IGZpbHRlcmluZ01vZGlmaWVyIH1cbiAgICB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgY29sdW1uTmFtZSwgZHJvcGRvd24sIGZpbHRlcmluZ01vZGlmaWVyIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoY29sdW1uTmFtZSwgZHJvcGRvd24pIHtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCh7IGFjdGlvbjogUFhfQUNUSU9OUy5SRVNFVF9GSUxURVIsIGNvbHVtbjogY29sdW1uTmFtZSB9KTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHsgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5SZXNldEZpbHRlciB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgY29sdW1uTmFtZSwgZHJvcGRvd24gfSk7XG4gIH1cblxuICBjbGVhckZpbHRlcnMocmVsb2FkID0gdHJ1ZSkge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLFxuICAgICAge1xuICAgICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyXG4gICAgICB9LFxuICAgICAgcmVsb2FkXG4gICAgKTtcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoe30pO1xuICAgIHRoaXMudHJpZ2dlckV2ZW50KHsgYWN0aW9uOiBQWF9BQ1RJT05TLkNMRUFSX0ZJTFRFUiB9KTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmluZyhcbiAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgYWN0aW9uOiB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlO1xuICAgICAgcGF5bG9hZD86IHsgZmlsdGVyaW5nTW9kaWZpZXI6IEZpbHRlcmluZ01vZGlmaWVyIH07XG4gICAgfSxcbiAgICByZWxvYWQgPSB0cnVlXG4gICkge1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgIGlmIChjb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgLi4uKGFjdGlvbi50eXBlID09PSBGaWx0ZXJpbmdBY3Rpb25UeXBlLkFwcGx5RmlsdGVyXG4gICAgICAgICAgICA/IGFjdGlvbi5wYXlsb2FkLmZpbHRlcmluZ01vZGlmaWVyXG4gICAgICAgICAgICA6IHRoaXMub25SZXNldEZpbHRlckFjdGlvbihjb2x1bW4pKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICAgIGlmIChyZWxvYWQpIHtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0FwcGxpZWQgPSB0aGlzLmNvbHVtbnMuc29tZSh0aGlzLmlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZCk7XG4gIH1cblxuICBpc0NvbHVtbkZpbHRlcmluZ0FwcGxpZWQoY29sdW1uOiBDb2x1bW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbHRlcmFibGUsIGZpbHRlclByZWRpY2F0ZSwgZXh0ZXJuYWxGaWx0ZXJRdWVyeSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuICEhKGZpbHRlcmFibGUgJiYgKGZpbHRlclByZWRpY2F0ZSB8fCBleHRlcm5hbEZpbHRlclF1ZXJ5KSk7XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uKHsgaXRlbXNQZXJQYWdlLCBwYWdlIH0pIHtcbiAgICBjb25zdCBjb25maWdDaGFuZ2VkID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSAhPT0gaXRlbXNQZXJQYWdlO1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogaXRlbXNQZXJQYWdlLCBjdXJyZW50UGFnZTogcGFnZSB9O1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICBpZiAoY29uZmlnQ2hhbmdlZCkge1xuICAgICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCdwYWdpbmF0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckV2ZW50KHsgYWN0aW9uOiBQWF9BQ1RJT05TLkNIQU5HRV9QQUdJTkFUSU9OLCBpdGVtc1BlclBhZ2UsIHBhZ2UgfSk7XG4gIH1cblxuICBjbGlja1JlbG9hZCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLnJlbG9hZCgpO1xuICAgIHRoaXMub25SZWxvYWQubmV4dCgpO1xuICAgIHRoaXMudHJpZ2dlckV2ZW50KHsgYWN0aW9uOiBQWF9BQ1RJT05TLlJFTE9BRCB9KTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IDEgfTtcbiAgICB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQgPSB0cnVlO1xuICAgIHRoaXMubG9hZERhdGEodHJ1ZSk7XG4gICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8b2JqZWN0Pj4ge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBjdXJyZW50UGFnZTogdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlIH07XG5cbiAgICB0aGlzLmxvYWREYXRhKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLnJlc3VsdExpc3QkXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBpbiBvcmRlciBmb3IgYHRvUHJvbWlzZWAgdG8gd29yaywgdGhlIG9ic2VydmFibGUgbmVlZHMgdG8gY29tcGxldGVcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQucGFnaW5nLFxuICAgICAgICAgICAgbmV4dDogdGhpcy5sb2FkTmV4dFBhZ2UuYmluZCh0aGlzKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBJUmVzdWx0TGlzdDxvYmplY3Q+O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlOiAnQ0VMTCcsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRIZWFkZXJDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0hFQURFUicsIHZhbHVlLCByb3c6IHVuZGVmaW5lZCwgY29sdW1uTmFtZSB9KTtcbiAgfVxuXG4gIGdldEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMoeyBjb2x1bW4sIGRyb3Bkb3duIH0pOiBGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6XG4gICAgICAgIGdldCh0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbiksICdmaWx0ZXJpbmdGb3JtUmVuZGVyZXJEZWYudGVtcGxhdGUnKSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBwcm9wZXJ0eTogY29sdW1uLFxuICAgICAgICBhcHBseUZpbHRlcjogdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93biksXG4gICAgICAgIHJlc2V0RmlsdGVyOiB0aGlzLnJlc2V0RmlsdGVyLmJpbmQodGhpcywgY29sdW1uLm5hbWUsIGRyb3Bkb3duKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzZXRBbGxJdGVtc1NlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbiRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZpbHRlcmVkRGF0YUlkcyB9KSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZmlsdGVyZWREYXRhSWRzLCBzZWxlY3RlZCkpO1xuICB9XG5cbiAgc2V0QWxsSXRlbXNJbkN1cnJlbnRQYWdlU2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZGF0YSwgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEl0ZW1zU2VsZWN0ZWQoaXRlbXM6IGFueVtdLCBzZWxlY3RlZCkge1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBpdGVtcy5tYXAoKGl0ZW06IG9iamVjdCB8IHN0cmluZykgPT5cbiAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSA6IGl0ZW1cbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBzZWxlY3RlZFxuICAgICAgPyB1bmlvbih0aGlzLnNlbGVjdGVkSXRlbUlkcywgaXRlbUlkcylcbiAgICAgIDogd2l0aG91dCh0aGlzLnNlbGVjdGVkSXRlbUlkcywgLi4uaXRlbUlkcyk7XG4gICAgdGhpcy5pdGVtc1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtSWRzKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcyA9IFtdO1xuICAgIHRoaXMuaXRlbXNTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbUlkcyk7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtSWRzLmluY2x1ZGVzKGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSk7XG4gIH1cblxuICBvbkNvbHVtbkRyb3AoeyBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXggfSkge1xuICAgIGNvbnN0IGRpZmZlcmVudEluZGV4ID0gcHJldmlvdXNJbmRleCAhPT0gY3VycmVudEluZGV4O1xuXG4gICAgaWYgKGRpZmZlcmVudEluZGV4KSB7XG4gICAgICB0aGlzLnRyaWdnZXJFdmVudCh7XG4gICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5SRU9SREVSX0NPTFVNTlMsXG4gICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW5OYW1lc1twcmV2aW91c0luZGV4XVxuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShjdXJyZW50SW5kZXgsIDAsIGNvbHVtblswXSk7XG4gICAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoJ3Jlb3JkZXJDb2x1bW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbk5hbWVzKCk7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgfVxuXG4gIHVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpIHtcbiAgICB0aGlzLnN0eWxlcyA9IHtcbiAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgZ3JpZFRlbXBsYXRlQ29sdW1uczogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFxuICAgICAgICB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSlcbiAgICAgICAgICAubWFwKCh7IGdyaWRUcmFja1NpemUgfSkgPT4gZ3JpZFRyYWNrU2l6ZSlcbiAgICAgICAgICAuam9pbignICcpXG4gICAgICApLFxuICAgICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICAgIGAxIC8gc3BhbiAke3RoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKS5sZW5ndGh9YFxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVUaEVscygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudGhFbHMgPSB0aGlzLnRoUmVmc1xuICAgICAgICA/IHRoaXMudGhSZWZzLnRvQXJyYXkoKS5tYXAoKHsgbmF0aXZlRWxlbWVudCB9KSA9PiBuYXRpdmVFbGVtZW50KVxuICAgICAgICA6IFtdO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gVG8gYmUgcmVtb3ZlZCB3aGVuIGNvbHVtbnMgYXJlIHRyYW5zZm9ybWVkIHRvIG9ic2VydmFibGVzLlxuICBpc0Ryb3BEb3duUGxhY2VkUmlnaHQoY29sdW1uOiBDb2x1bW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgaW5kZXhPZihcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMudmlzaWJsZSksXG4gICAgICAgIGNvbHVtblxuICAgICAgKSA+XG4gICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy52aXNpYmxlKS5sZW5ndGggLyAyXG4gICAgKTtcbiAgfVxuXG4gIGVtaXRDb25maWdDaGFuZ2UoZXZlbnRUeXBlPzogR3JpZEV2ZW50VHlwZSkge1xuICAgIGlmICh0aGlzLmNvbHVtbnNJbml0aWFsaXplZCkge1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAodGhpcy5tYXBDb2x1bW5Ub0NvbmZpZy5iaW5kKHRoaXMpKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHsgY29sdW1ucywgcGFnaW5hdGlvbjogdGhpcy5wYWdpbmF0aW9uIH07XG4gICAgICB0aGlzLm9uQ29uZmlnQ2hhbmdlLmVtaXQoY29uZmlnKTtcbiAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICAgIHRoaXMub25Tb3J0LmVtaXQoY29uZmlnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFnaW5hdGlvbic6XG4gICAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlLmVtaXQoY29uZmlnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVvcmRlckNvbHVtbic6XG4gICAgICAgICAgdGhpcy5vbkNvbHVtblJlb3JkZXJlZC5lbWl0KGNvbmZpZyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NoYW5nZUNvbHVtblZpc2liaWxpdHknOlxuICAgICAgICAgIHRoaXMub25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyRXZlbnQoZXZlbnREYXRhKSB7XG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCh0aGlzLnByb2R1Y3RFeHBlcmllbmNlRXZlbnQ/LmV2ZW50TmFtZSB8fCBQWF9FVkVOVF9OQU1FLCB7XG4gICAgICAuLi50aGlzLnByb2R1Y3RFeHBlcmllbmNlRXZlbnQ/LmRhdGEsXG4gICAgICAuLi5ldmVudERhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZXNldEZpbHRlckFjdGlvbihjb2x1bW46IENvbHVtbikge1xuICAgIHRoaXMub25Db2x1bW5GaWx0ZXJSZXNldC5lbWl0KGNvbHVtbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlclByZWRpY2F0ZTogdW5kZWZpbmVkLFxuICAgICAgZXh0ZXJuYWxGaWx0ZXJRdWVyeTogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQ29sdW1uVG9Db25maWcoY29sdW1uOiBDb2x1bW4pOiBDb2x1bW5Db25maWcgfCBDdXN0b21Db2x1bW5Db25maWcge1xuICAgIGxldCBjb25maWc7XG4gICAgaWYgKGNvbHVtbi5jdXN0b20pIHtcbiAgICAgIGNvbnN0IHsgdmlzaWJsZSwgc29ydE9yZGVyLCBuYW1lLCBleHRlcm5hbEZpbHRlclF1ZXJ5LCBoZWFkZXIsIHBhdGggfSA9IGNvbHVtbjtcbiAgICAgIGNvbmZpZyA9IHtcbiAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgc29ydE9yZGVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBmaWx0ZXI6IHsgZXh0ZXJuYWxGaWx0ZXJRdWVyeSB9LFxuICAgICAgICBoZWFkZXIsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGN1c3RvbTogdHJ1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyB2aXNpYmxlLCBzb3J0T3JkZXIsIG5hbWUsIGV4dGVybmFsRmlsdGVyUXVlcnkgfSA9IGNvbHVtbjtcbiAgICAgIGNvbmZpZyA9IHsgdmlzaWJsZSwgc29ydE9yZGVyLCBuYW1lLCBmaWx0ZXI6IHsgZXh0ZXJuYWxGaWx0ZXJRdWVyeSB9IH07XG4gICAgfVxuXG4gICAgaWYgKGlzRW1wdHkoY29uZmlnPy5maWx0ZXI/LmV4dGVybmFsRmlsdGVyUXVlcnkpKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmZpbHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YShyZWxvYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd3MsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHNlYXJjaFRleHQsXG4gICAgICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHNlbGVjdGlvblByaW1hcnlLZXksXG4gICAgICBpbmZpbml0ZVNjcm9sbFxuICAgIH0gPSB0aGlzO1xuXG4gICAgdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKHtcbiAgICAgIHJvd3MsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGFnaW5hdGlvbixcbiAgICAgIHNlYXJjaFRleHQsXG4gICAgICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHNlbGVjdGlvblByaW1hcnlLZXksXG4gICAgICBpbmZpbml0ZVNjcm9sbCxcbiAgICAgIHJlbG9hZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHNwZWNpYWxDb2x1bW4gPSB7XG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwb3NpdGlvbkZpeGVkOiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCBjaGVja2JveENvbHVtbiA9IHRoaXMuc2VsZWN0YWJsZVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3BlY2lhbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5DaGVja2JveCxcbiAgICAgICAgICBncmlkVHJhY2tTaXplOiAnMzJweCdcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWN0aW9uc0NvbHVtbiA9XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzPy5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BlY2lhbENvbHVtbixcbiAgICAgICAgICAgIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkFjdGlvbnMsXG4gICAgICAgICAgICBncmlkVHJhY2tTaXplOiB0aGlzLmFjdGlvbkNvbnRyb2xzLmxlbmd0aCA+IDIgPyAnNTZweCcgOiAnbWlubWF4KDQwcHgsIGF1dG8pJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gW2NoZWNrYm94Q29sdW1uLCAuLi50aGlzLmNvbHVtbnMsIGFjdGlvbnNDb2x1bW5dXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKHRoaXMud2l0aENvbHVtbkRlZmF1bHRzKTtcblxuICAgIHRoaXMuY29sdW1ucyA9IHVuaXFCeShjb2x1bW5zLCAnbmFtZScpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uTmFtZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgIHRoaXMudXBkYXRlVGhFbHMoKTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0FwcGxpZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2l0aENvbHVtbkRlZmF1bHRzKGNvbHVtbik6IENvbHVtbiB7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBjb2x1bW4uZGF0YVR5cGUgfHwgQ29sdW1uRGF0YVR5cGUuVGV4dFNob3J0O1xuICAgIGNvbnN0IHsgaGVhZGVyQ1NTQ2xhc3NOYW1lLCBjZWxsQ1NTQ2xhc3NOYW1lIH0gPSBjb2x1bW47XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIHBvc2l0aW9uRml4ZWQ6IGZhbHNlLFxuICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICBzb3J0T3JkZXI6ICcnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBkYXRhVHlwZSxcbiAgICAgIGdyaWRUcmFja1NpemU6XG4gICAgICAgIGNvbHVtbi5ncmlkVHJhY2tTaXplIHx8XG4gICAgICAgIGBtaW5tYXgoJHttaW5Db2x1bW5HcmlkVHJhY2tTaXplfXB4LCAke3JhdGlvc0J5Q29sdW1uVHlwZXNbZGF0YVR5cGVdfWZyKWAsXG4gICAgICBoZWFkZXJDU1NDbGFzc05hbWU6XG4gICAgICAgICh0eXBlb2YgaGVhZGVyQ1NTQ2xhc3NOYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gaGVhZGVyQ1NTQ2xhc3NOYW1lLnNwbGl0KCcgJylcbiAgICAgICAgICA6IGhlYWRlckNTU0NsYXNzTmFtZSkgfHwgW10sXG4gICAgICBjZWxsQ1NTQ2xhc3NOYW1lOlxuICAgICAgICAodHlwZW9mIGNlbGxDU1NDbGFzc05hbWUgPT09ICdzdHJpbmcnID8gY2VsbENTU0NsYXNzTmFtZS5zcGxpdCgnICcpIDogY2VsbENTU0NsYXNzTmFtZSkgfHxcbiAgICAgICAgW11cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5OYW1lcygpIHtcbiAgICB0aGlzLmNvbHVtbk5hbWVzID0gdGhpcy5jb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlc2l6ZUhhbmRsZSgpIHtcbiAgICBjb25zdCByZXNpemVIYW5kbGVEcmFnJCA9IHRoaXMucmVzaXplSGFuZGxlTW91c2VEb3duJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmNsZWFyTW91c2VIaWdobGlnaHRzKCkpLFxuICAgICAgbWVyZ2VNYXAoKHsgZXZlbnQsIHRhcmdldENvbHVtbk5hbWUgfSkgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0YXJnZXRDb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTogdW5pb24oY29sdW1uLmhlYWRlckNTU0NsYXNzTmFtZSwgWydoZWFkZXItLWJlaW5nLXJlc2l6ZWQnXSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQgPSB7XG4gICAgICAgICAgY29sdW1uTmFtZTogdGFyZ2V0Q29sdW1uTmFtZSxcbiAgICAgICAgICBlbDogZXZlbnQudGFyZ2V0Py5wYXJlbnROb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICAgICAgdGFibGVDdXJzb3I6ICdjb2wtcmVzaXplJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJlc2l6ZUhhbmRsZURyYWckLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZCAmJiBjb2x1bW4ubmFtZSA9PT0gdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyRGl2OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIC8vIFJlYWQgc2Nyb2xsQ29udGFpbmVyRWwncyBvZmZzZXQgbGVmdCByZWxhdGl2ZSB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID0gc2Nyb2xsQ29udGFpbmVyRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCB3aXRoIHRoZSBzY3JvbGxDb250YWluZXJFbCBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxDb250YWluZXJEaXYuc2Nyb2xsTGVmdCAtIGhvcml6b250YWxPZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIFJlYWQgbGVmdCBvZmZzZXQgb2YgdGhlIHJlc2l6ZWQgaGVhZGVyLlxuICAgICAgICAgICAgY29uc3QgaGVhZGVyT2Zmc2V0TGVmdCA9IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmVsLm9mZnNldExlZnQgfHwgMDtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXNpcmVkIHdpZHRoLlxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ICsgZXZlbnQuY2xpZW50WCAtIGhlYWRlck9mZnNldExlZnQ7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjb2x1bW4gb2JqZWN0IHdpdGggdGhlIG5ldyBzaXplIHZhbHVlLCBlbmZvcmNlIG91ciBtaW5pbXVtIHNpemUuXG4gICAgICAgICAgICAgIGdyaWRUcmFja1NpemU6IGAke01hdGgubWF4KG1pbkNvbHVtbkdyaWRUcmFja1NpemUsIHdpZHRoKX1weGBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRm9yIHRoZSBvdGhlciBoZWFkZXJzIHdoaWNoIGRvbid0IGhhdmUgYSBzZXQgd2lkdGgsIGZpeCBpdCB0byB0aGVpciBjb21wdXRlZCB3aWR0aC5cbiAgICAgICAgICBpZiAoY29sdW1uLmdyaWRUcmFja1NpemUuc3RhcnRzV2l0aCgnbWlubWF4JykpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgLy8gaXNuJ3QgZml4ZWQgeWV0IChpdCB3b3VsZCBiZSBhIHB4IHZhbHVlKVxuICAgICAgICAgICAgICBncmlkVHJhY2tTaXplOiBgJHtfcGFyc2VJbnQodGhpcy50aEVsc1tpXS5jbGllbnRXaWR0aCl9cHhgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFVwZGF0ZSB0aGUgY29sdW1uIHNpemVzLlxuICAgICAgICAgKiBOb3RlOiBncmlkLXRlbXBsYXRlLWNvbHVtbnMgc2V0cyB0aGUgd2lkdGggZm9yIGFsbCBjb2x1bW5zIGluIG9uZSB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOiB3aXRob3V0KGNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWUsICdoZWFkZXItLWJlaW5nLXJlc2l6ZWQnKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICAgICAgdGFibGVDdXJzb3I6ICdhdXRvJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhck1vdXNlSGlnaGxpZ2h0cygpIHtcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlLCB2YWx1ZSwgcm93LCBjb2x1bW5OYW1lIH0pOiBDZWxsUmVuZGVyZXJTcGVjIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGNvbHVtblJlbmRlcmVyID0gdGhpcy5nZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pO1xuICAgIGNvbnN0IHJlbmRlcmVyVGVtcGxhdGUgPSBnZXQoXG4gICAgICBjb2x1bW5SZW5kZXJlcixcbiAgICAgIGAke3R5cGUgPT09ICdIRUFERVInID8gJ2hlYWRlckNlbGxSZW5kZXJlckRlZicgOiAnY2VsbFJlbmRlcmVyRGVmJ30udGVtcGxhdGVgXG4gICAgKTtcblxuICAgIGNvbnN0IHsgY2VsbFJlbmRlcmVyQ29tcG9uZW50LCBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgfSA9IGNvbHVtbjtcbiAgICBjb25zdCByZW5kZXJlckNvbXBvbmVudCA9XG4gICAgICB0eXBlID09PSAnSEVBREVSJyA/IGhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCA6IGNlbGxSZW5kZXJlckNvbXBvbmVudDtcblxuICAgIHJldHVybiB7XG4gICAgICByZW5kZXJlcjogcmVuZGVyZXJUZW1wbGF0ZSB8fCByZW5kZXJlckNvbXBvbmVudCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGl0ZW06IHJvdyxcbiAgICAgICAgcHJvcGVydHk6IGNvbHVtblxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtblJlbmRlcmVyKGNvbHVtbik6IENvbHVtbkRpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uUmVuZGVyZXJzLnRvQXJyYXkoKS5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uLm5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJpbmdMYWJlbHNQYXJhbXMoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIHRoaXMuZmlsdGVyaW5nTGFiZWxzUGFyYW1zID0ge1xuICAgICAgZmlsdGVyZWRJdGVtc0NvdW50OiBzdGF0cy5maWx0ZXJlZFNpemUsXG4gICAgICBhbGxJdGVtc0NvdW50OiBzdGF0cy5zaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnaW5hdGlvbkxhYmVsUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICBpZiAoc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlRmlyc3RJdGVtSWR4ID0gKHN0YXRzLmN1cnJlbnRQYWdlIC0gMSkgKiBzdGF0cy5maXJzdFBhZ2VTaXplICsgMTtcbiAgICB0aGlzLnBhZ2luYXRpb25MYWJlbFBhcmFtcyA9IHtcbiAgICAgIHBhZ2VGaXJzdEl0ZW1JZHgsXG4gICAgICBwYWdlTGFzdEl0ZW1JZHg6IHBhZ2VGaXJzdEl0ZW1JZHggKyAoc3RhdHMuY3VycmVudFBhZ2VTaXplIC0gMSksXG4gICAgICBpdGVtc1RvdGFsOiBzdGF0cy5maWx0ZXJlZFNpemVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMb2FkTW9yZUNvbXBvbmVudChzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCAmJlxuICAgICAgc3RhdHMgJiZcbiAgICAgIHN0YXRzLm5leHRQYWdlICYmXG4gICAgICAoIXRoaXMubG9hZE1vcmVDb21wb25lbnQgfHwgdGhpcy5yZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50KVxuICAgICkge1xuICAgICAgdGhpcy5yZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50ID0gZmFsc2U7XG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsQ29udGFpbmVyLmNsZWFyKCk7XG4gICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4gPVxuICAgICAgICB0aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMb2FkTW9yZUNvbXBvbmVudCk7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmluZmluaXRlU2Nyb2xsQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIExvYWRNb3JlQ29tcG9uZW50O1xuICAgICAgaW5zdGFuY2UudXNlSW50ZXJzZWN0aW9uID0gdGhpcy5pbmZpbml0ZVNjcm9sbCA9PT0gJ2F1dG8nIHx8IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UuaGlkZGVuID0gdGhpcy5pbmZpbml0ZVNjcm9sbCA9PT0gJ2hpZGRlbic7XG4gICAgICBpbnN0YW5jZS5wYWdpbmcgPSB7XG4gICAgICAgIG5leHRQYWdlOiBzdGF0cy5uZXh0UGFnZSxcbiAgICAgICAgbmV4dDogdGhpcy5sb2FkTmV4dFBhZ2UuYmluZCh0aGlzKVxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICAgIGluc3RhbmNlLmxvYWROZXh0TGFiZWwgPSB0aGlzLmxvYWRNb3JlSXRlbXNMYWJlbDtcbiAgICAgIGluc3RhbmNlLmxvYWRpbmdMYWJlbCA9IHRoaXMubG9hZGluZ0l0ZW1zTGFiZWw7XG4gICAgICB0aGlzLmxvYWRNb3JlQ29tcG9uZW50ID0gaW5zdGFuY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvYWRNb3JlQ29tcG9uZW50ICYmICFzdGF0cy5uZXh0UGFnZSkge1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudC5wYWdpbmcgPSB7XG4gICAgICAgIG5leHRQYWdlOiBudWxsXG4gICAgICB9IGFzIFBhZ2luZzxhbnk+O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9Ub3AoKSB7XG4gICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NBbmRQZXJzaXN0Q29uZmlnQ2hhbmdlKCkge1xuICAgIG1lcmdlKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMub25Tb3J0LFxuICAgICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UsXG4gICAgICAgIHRoaXMub25Db2x1bW5SZW9yZGVyZWQsXG4gICAgICAgIHRoaXMub25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlXG4gICAgICApLnBpcGUobWFwKGNvbmZpZyA9PiBjb25maWcuY29sdW1ucykpLFxuICAgICAgbWVyZ2UodGhpcy5vbkFkZEN1c3RvbUNvbHVtbiwgdGhpcy5vblJlbW92ZUN1c3RvbUNvbHVtbikucGlwZShcbiAgICAgICAgbWFwKCgpID0+ICh0aGlzLmNvbHVtbnMgfHwgW10pLm1hcCh0aGlzLm1hcENvbHVtblRvQ29uZmlnLmJpbmQodGhpcykpKVxuICAgICAgKSxcbiAgICAgIHRoaXMub25GaWx0ZXIucGlwZShcbiAgICAgICAgbWFwKCh7IGNvbHVtbk5hbWUsIGZpbHRlcmluZ01vZGlmaWVyIH0pID0+XG4gICAgICAgICAgdGhpcy5jb2x1bW5zLm1hcCh0aGlzLm1hcENvbHVtblRvQ29uZmlnLmJpbmQodGhpcykpLm1hcCgoY29sdW1uOiBDb2x1bW5Db25maWcpID0+IHtcbiAgICAgICAgICAgIGlmIChpc05pbChjb2x1bW5OYW1lKSkge1xuICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZpbHRlcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLm5hbWUgPT09IGNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoZmlsdGVyaW5nTW9kaWZpZXIpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5maWx0ZXI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpbHRlciA9IGZpbHRlcmluZ01vZGlmaWVyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGNvbHVtbnM6IEFycmF5PENvbHVtbkNvbmZpZyB8IEN1c3RvbUNvbHVtbkNvbmZpZz4pID0+ICh7XG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUgfVxuICAgICAgICB9KSksXG4gICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5KSxcbiAgICAgICAgdGhpcy50cmltRmlsdGVyQ29uZmlnUGlwZSgpLFxuICAgICAgICB0aGlzLnRyaW1Tb3J0Q29uZmlnUGlwZSgpLFxuICAgICAgICB0aGlzLnRyaW1DdXN0b21Db2x1bW5Db25maWdQaXBlKCksXG4gICAgICAgIHRoaXMuaWdub3JlQ29sdW1uT3JkZXJQaXBlKCksXG4gICAgICAgIHRoaXMuaWdub3JlQ29sdW1uVmlzaWJpbGl0eVBpcGUoKSxcbiAgICAgICAgY29uY2F0TWFwKChjb25maWc6IEdyaWRDb25maWcpID0+IHRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5LnNhdmVDb25maWckKGNvbmZpZykpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHRyaW1GaWx0ZXJDb25maWdQaXBlKCk6IFVuYXJ5RnVuY3Rpb248T2JzZXJ2YWJsZTxHcmlkQ29uZmlnPiwgT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPj4ge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgdGhpcy5jaGVja0V2ZW50UGlwZSgnZmlsdGVyJywgY29uZmlnID0+IHtcbiAgICAgICAgY29uZmlnLmNvbHVtbnMgPSAoY29uZmlnLmNvbHVtbnMgfHwgW10pLm1hcChjb2wgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBjb2wuZmlsdGVyO1xuICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRyaW1Tb3J0Q29uZmlnUGlwZSgpOiBVbmFyeUZ1bmN0aW9uPE9ic2VydmFibGU8R3JpZENvbmZpZz4sIE9ic2VydmFibGU8R3JpZENvbmZpZz4+IHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIHRoaXMuY2hlY2tFdmVudFBpcGUoJ3NvcnQnLCBjb25maWcgPT4ge1xuICAgICAgICBjb25maWcuY29sdW1ucyA9IChjb25maWcuY29sdW1ucyB8fCBbXSkubWFwKGNvbCA9PiB7XG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9ICcnO1xuICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRyaW1DdXN0b21Db2x1bW5Db25maWdQaXBlKCk6IFVuYXJ5RnVuY3Rpb248XG4gICAgT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPixcbiAgICBPYnNlcnZhYmxlPEdyaWRDb25maWc+XG4gID4ge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgdGhpcy5jaGVja0V2ZW50UGlwZSgnY3VzdG9tQ29sdW1ucycsIGNvbmZpZyA9PiB7XG4gICAgICAgIGNvbmZpZy5jb2x1bW5zID0gKGNvbmZpZy5jb2x1bW5zIHx8IFtdKS5maWx0ZXIoKGNvbDogQ3VzdG9tQ29sdW1uQ29uZmlnKSA9PiAhY29sLmN1c3RvbSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaWdub3JlQ29sdW1uT3JkZXJQaXBlKCk6IFVuYXJ5RnVuY3Rpb248T2JzZXJ2YWJsZTxHcmlkQ29uZmlnPiwgT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPj4ge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgdGhpcy5jaGVja0V2ZW50UGlwZSgnb3JkZXInLCBjb25maWcgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU3RyYXRlZ3kuZ2V0Q29uZmlnJCgpLnBpcGUoXG4gICAgICAgICAgbWFwKG9sZENvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbGRDb2x1bW5zOiBDb2x1bW5Db25maWdbXSA9XG4gICAgICAgICAgICAgIG9sZENvbmZpZz8uY29sdW1ucyB8fCAodGhpcy5kZWZhdWx0Q29sdW1ucyBhcyBDb2x1bW5Db25maWdbXSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjdXN0b20gY29sdW1ucyBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNBZGRlZCA9IChjb25maWcuY29sdW1ucyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAgICAgICBjb2wgPT4gIW9sZENvbHVtbnMuZmluZChvbGQgPT4gb2xkLm5hbWUgPT09IGNvbC5uYW1lKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uZmlnLmNvbHVtbnMgPSBbXG4gICAgICAgICAgICAgIC4uLm9sZENvbHVtbnMubWFwKG9sZENvbCA9PlxuICAgICAgICAgICAgICAgIChjb25maWcuY29sdW1ucyB8fCBbXSkuZmluZChuZXdDb2wgPT4gbmV3Q29sLm5hbWUgPT09IG9sZENvbC5uYW1lKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAuLi5jb2x1bW5zQWRkZWRcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaWdub3JlQ29sdW1uVmlzaWJpbGl0eVBpcGUoKTogVW5hcnlGdW5jdGlvbjxcbiAgICBPYnNlcnZhYmxlPEdyaWRDb25maWc+LFxuICAgIE9ic2VydmFibGU8R3JpZENvbmZpZz5cbiAgPiB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICB0aGlzLmNoZWNrRXZlbnRQaXBlKCd2aXNpYmlsaXR5JywgY29uZmlnID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5LmdldENvbmZpZyQoKS5waXBlKFxuICAgICAgICAgIG1hcChvbGRDb25maWcgPT4ge1xuICAgICAgICAgICAgY29uZmlnLmNvbHVtbnMgPSAoY29uZmlnLmNvbHVtbnMgfHwgW10pLm1hcChuZXdDb2wgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zOiBDb2x1bW5Db25maWdbXSA9XG4gICAgICAgICAgICAgICAgb2xkQ29uZmlnPy5jb2x1bW5zIHx8ICh0aGlzLmRlZmF1bHRDb2x1bW5zIGFzIENvbHVtbkNvbmZpZ1tdKTtcbiAgICAgICAgICAgICAgY29uc3Qgb2xkQ29sID0gY29sdW1ucy5maW5kKChjb2w6IGFueSkgPT4gbmV3Q29sLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgbmV3Q29sLnZpc2libGUgPSBvbGRDb2w/LnZpc2libGUgPz8gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0NvbDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRXZlbnRQaXBlKFxuICAgIGNvbmZpZ1BhcnQ6IEdyaWRDb25maWdQYXJ0LFxuICAgIHRyaW1FdmVudERhdGFGbjogKGNvbmZpZzogR3JpZENvbmZpZykgPT4gR3JpZENvbmZpZyB8IE9ic2VydmFibGU8R3JpZENvbmZpZz5cbiAgKTogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPEdyaWRDb25maWc+LCBPYnNlcnZhYmxlPEdyaWRDb25maWc+PiB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjb25jYXRNYXAoKGNvbmZpZzogR3JpZENvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29uZmlnRmlsdGVyXG4gICAgICAgICAgLmNhbGwodGhpcywgY29uZmlnUGFydClcbiAgICAgICAgICAucGlwZShtYXAoa2VlcEV2ZW50RGF0YSA9PiAoeyBjb25maWcsIGtlZXBFdmVudERhdGEgfSkpKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCh7IGNvbmZpZywga2VlcEV2ZW50RGF0YSB9KSA9PlxuICAgICAgICBrZWVwRXZlbnREYXRhID8gY29uZmlnIDogdHJpbUV2ZW50RGF0YUZuLmNhbGwodGhpcywgY29uZmlnKVxuICAgICAgKSxcbiAgICAgIGNvbmNhdE1hcChjb25maWcgPT4gKGlzT2JzZXJ2YWJsZShjb25maWcpID8gY29uZmlnIDogb2YoY29uZmlnKSkgYXMgT2JzZXJ2YWJsZTxHcmlkQ29uZmlnPilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQ29uZmlnRmlsdGVyKGNvbmZpZ1BhcnQ6IEdyaWRDb25maWdQYXJ0KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICAgIGNvbnN0IHZhbHVlT3JGbiA9IHRoaXMuY29uZmlndXJhdGlvblN0cmF0ZWd5LmdldENvbnRleHQoKT8uY29uZmlnRmlsdGVyPy5bY29uZmlnUGFydF07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlT3JGbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB2YWx1ZU9yRm47XG4gICAgfVxuICAgIHJldHVybiB0b09ic2VydmFibGUocmVzdWx0ID8/IHRydWUpO1xuICB9XG59XG4iLCI8ZGl2XG4gICNzY3JvbGxcbiAgY2xhc3M9XCJ0YWJsZS1kYXRhLWdyaWQtc2Nyb2xsXCJcbiAgW25nQ2xhc3NdPVwieyAndGFibGUtZGF0YS1ncmlkX19vdmVybGF5JzogKGRhdGFTb3VyY2UubG9hZGluZyQgfCBhc3luYykgJiYgIWxvYWRNb3JlQ29tcG9uZW50IH1cIlxuICBkYXRhLWN5PVwiYzh5LWRhdGEtZ3JpZC0tdGFibGUtZGF0YS1ncmlkLXNjcm9sbFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cInRhYmxlLWRhdGEtZ3JpZF9fbG9hZGluZy0td3JhcHBlclwiXG4gICAgKm5nSWY9XCIoZGF0YVNvdXJjZS5sb2FkaW5nJCB8IGFzeW5jKSAmJiAhbG9hZE1vcmVDb21wb25lbnRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLWRhdGEtZ3JpZF9fbG9hZGluZy0tbG9hZGVyXCI+XG4gICAgICA8Yzh5LXByb2dyZXNzLWJhciBbbWVzc2FnZV09XCJsb2FkaW5nSXRlbXNMYWJlbFwiPjwvYzh5LXByb2dyZXNzLWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImRpc3BsYXlPcHRpb25zLmdyaWRIZWFkZXJcIiBjbGFzcz1cInRhYmxlLWRhdGEtZ3JpZC1oZWFkZXIgc2VwYXJhdG9yIGxhcmdlLXBhZGRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaDRcIiBbbmdDbGFzc109XCJ7ICdtLXItMTYnOiAhIXRpdGxlIH1cIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlPcHRpb25zLmZpbHRlclwiPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZmlsdGVyaW5nQXBwbGllZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsIGxhYmVsLWRlZmF1bHQgbS1yLTRcIiB0cmFuc2xhdGU+Tm8gZmlsdGVyczwvc3Bhbj5cbiAgICAgICAgPHNtYWxsXG4gICAgICAgICAgKm5nSWY9XCIhIWZpbHRlcmluZ0xhYmVsc1BhcmFtcy5hbGxJdGVtc0NvdW50XCJcbiAgICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJmaWx0ZXJpbmdMYWJlbHNQYXJhbXNcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZmlsdGVyZWRJdGVtc0NvdW50IH19IG9mIHt7IGFsbEl0ZW1zQ291bnQgfX0gaXRlbXNcbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyaW5nQXBwbGllZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFmaWx0ZXJpbmdMYWJlbHNQYXJhbXMuYWxsSXRlbXNDb3VudFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mbyBtLXItNFwiPlxuICAgICAgICAgICAge3sgKGRhdGFTb3VyY2Uuc3RhdHMkIHwgYXN5bmMpLmZpbHRlcmVkU2l6ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c21hbGwgbmdOb25CaW5kYWJsZSB0cmFuc2xhdGUgW3RyYW5zbGF0ZVBhcmFtc109XCJmaWx0ZXJpbmdMYWJlbHNQYXJhbXNcIj5cbiAgICAgICAgICAgIG9mIHt7IGFsbEl0ZW1zQ291bnQgfX0gaXRlbXNcbiAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGVmYXVsdCBtLWwtOCBtLXItNFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQ2xlYXIgZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnQ2xlYXIgZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc20gaGlkZGVuLXhzIGhpZGRlbi1zbVwiXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheU9wdGlvbnMuZmlsdGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgcG9wb3Zlcj1cInt7ICdDbGljayB0aGUgY29sdW1uIGhlYWRlcnMgdG8gYXBwbHkgZmlsdGVycy4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ2xpY2sgdGhlIGNvbHVtbiBoZWFkZXJzIHRvIGFwcGx5IGZpbHRlcnMuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGRhdGEtY3k9XCJkYXRhLWdyaWQtLWhlbHAtZmlsdGVyc1wiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJxdWVzdGlvbi1jaXJjbGUtb1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIHRleHQtcHJpbWFyeSBoaWRkZW4teHMgaGlkZGVuLXNtXCJcbiAgICAgICAgKm5nSWY9XCJzaG93Q291bnRlcldhcm5pbmdcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBwb3BvdmVyPVwie3sgJ1RoZSBjb3VudGVyIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIG1pZ2h0IGJlIGluYWNjdXJhdGUuJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJ3YXJuaW5nXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibS1sLWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJidG5iYXIgZC1mbGV4IGEtaS1jZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGVhZGVyQWN0aW9uQ29udHJvbCBvZiBoZWFkZXJBY3Rpb25Db250cm9sc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJBY3Rpb25Db250cm9sIHwgaXNDb250cm9sVmlzaWJsZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXJBY3Rpb25Db250cm9sLnRlbXBsYXRlOyBlbHNlIGN1c3RvbVRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bmJhci1idG4gYnRuLWxpbmtcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgaGVhZGVyQWN0aW9uQ29udHJvbC50ZXh0IHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGVhZGVyQWN0aW9uQ29udHJvbC5jYWxsYmFjaygpXCJcbiAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuQ1VTVE9NX0FDVElPTixcbiAgICAgICAgICAgICAgICAgIGN1c3RvbUFjdGlvbk5hbWU6IGhlYWRlckFjdGlvbkNvbnRyb2wudGV4dCxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGhlYWRlckFjdGlvbkNvbnRyb2wudHlwZVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiaGVhZGVyQWN0aW9uQ29udHJvbC5pY29uXCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXJBY3Rpb25Db250cm9sLnRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbVRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGhlYWRlckFjdGlvbkNvbnRyb2wudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGhlYWRlckFjdGlvbkNvbnRyb2w6IGhlYWRlckFjdGlvbkNvbnRyb2wgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImNvbmZpZ3VyZUNvbHVtbnNFbmFibGVkXCJcbiAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICAgICAgICBkcm9wZG93blxuICAgICAgICAgICNkZENvbmZpZ3VyZUNvbHVtbnM9XCJicy1kcm9wZG93blwiXG4gICAgICAgICAgW2Nka1RyYXBGb2N1c109XCJkZENvbmZpZ3VyZUNvbHVtbnMuaXNPcGVuXCJcbiAgICAgICAgICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQ29uZmlndXJlIGNvbHVtbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJkYXRhLWdyaWQtLWN1c3RvbS1jb2x1bW4tYnRuXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuYmFyLWJ0blwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNvbHVtbnNcIiBjbGFzcz1cIm0tci00XCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4+e3sgJ0NvbmZpZ3VyZSBjb2x1bW5zJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDx1bCAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBkYXRhLWdyaWRfX2Ryb3Bkb3duXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiYmctbGV2ZWwtMFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Db2x1bW5Ecm9wKCRldmVudClcIiBjbGFzcz1cImxpc3QtZ3JvdXAgbS0wXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBjZGtEcmFnIGNka0RyYWdMb2NrQXhpcz1cInlcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLnBvc2l0aW9uRml4ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBkcmFnZ2FibGUtYWZ0ZXIgcC0wIGEtaS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgKGNvbHVtbi5oZWFkZXIgfCB0cmFuc2xhdGUpIHx8IGNvbHVtbi5uYW1lIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGEtZ3JpZC0tY3VzdG9tLWNvbHVtbi1oZWFkZXItJyArIGNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3ggcC1sLTE2XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW4udmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlR3JpZENvbHVtbnNTaXplKCk7IGVtaXRDb25maWdDaGFuZ2UoJ2NoYW5nZUNvbHVtblZpc2liaWxpdHknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuQ0hBTkdFX1ZJU0lCSUxJVFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhY29sdW1uLnZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgKGNvbHVtbi5oZWFkZXIgfCB0cmFuc2xhdGUpIHx8IGNvbHVtbi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBzaG93T25Ib3ZlciBtYXgtd2lkdGgtZml0IGEtaS1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmVgY29sdW1uLHZlcmJgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3sgJ1JlbW92ZWBjb2x1bW4sdmVyYmAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ3VzdG9tQ29sdW1uKHBvQ29uZmlybSwgY29sdW1uLCBkZENvbmZpZ3VyZUNvbHVtbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGM4eS1wb3BvdmVyLWNvbmZpcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NvbmZpcm0gcmVtb3ZhbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgI3BvQ29uZmlybVxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYzh5LXBvcG92ZXItY29uZmlybT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJtaW51cy1jaXJjbGVcIiBkYXRhLWN5PVwiZGF0YS1ncmlkLS1jdXN0b20tY29sdW1uLXJlbW92ZS1idG5cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImlzQ29uZmlnQ29udGV4dEtub3duXCIgY2xhc3M9XCJwLTggc3RpY2t5LWJvdHRvbSBzZXBhcmF0b3ItdG9wXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBjdXN0b20gY29sdW1uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cImRhdGEtZ3JpZC0tYWRkLWN1c3RvbS1jb2x1bW5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ3VzdG9tQ29sdW1uTW9kYWwoKTsgZGRDb25maWd1cmVDb2x1bW5zLmhpZGUoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIiBjbGFzcz1cIm0tci00XCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdBZGQgY3VzdG9tIGNvbHVtbicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgZGF0YS1jeT1cImRhdGEtZ3JpZC0tcmVsb2FkLWJ0blwiXG4gICAgICAgICAgY2xhc3M9XCJidG5iYXItYnRuIGJ0bi1saW5rXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGF0YVNvdXJjZS5sb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xpY2tSZWxvYWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwicmVmcmVzaFwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgPHNwYW4+e3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIiFzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrIHx8IHNob3dTZWFyY2hcIlxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc2VhcmNoIG0tbC1zbS0xNiBkYXRhLWdyaWRfX3NlYXJjaC1pbnB1dFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnU2VhcmNo4oCmJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJzZWFyY2hUZXh0JC5lbWl0KCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInNlYXJjaFwiICpuZ0lmPVwic2VhcmNoVGV4dC5sZW5ndGggPT09IDBcIj48L2k+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjOHlJY29uPVwidGltZXNcIlxuICAgICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNlYXJjaFRleHQubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hUZXh0ID0gJyc7IHNlYXJjaFRleHQkLmVtaXQoJycpXCJcbiAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGFjdGlvbjogUFhfQUNUSU9OUy5DTEVBUl9TRUFSQ0ggfVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGFibGUtZGF0YS1ncmlkLWhlYWRlci1idWxrLWFjdGlvbnMgYW5pbWF0ZWQgc2xpZGVJbkRvd24gZmFzdFwiXG4gICAgICAqbmdJZj1cInNlbGVjdGVkSXRlbUlkcy5sZW5ndGggIT09IDBcIlxuICAgID5cbiAgICAgIDxoND5cbiAgICAgICAgPHNwYW4gbmdOb25CaW5kYWJsZSB0cmFuc2xhdGUgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGNvdW50OiBzZWxlY3RlZEl0ZW1JZHMubGVuZ3RoIH1cIj5cbiAgICAgICAgICB7eyBjb3VudCB9fSBzZWxlY3RlZCBpdGVtKHMpLlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxiciBjbGFzcz1cInZpc2libGUteHNcIiAvPlxuICAgICAgICA8c21hbGwgKm5nSWY9XCIhc2VydmVyU2lkZURhdGFDYWxsYmFjayAmJiBzZWxlY3RlZEl0ZW1JZHMubGVuZ3RoID49IHBhZ2luYXRpb24ucGFnZVNpemVcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgKGNsaWNrKT1cInNldEFsbEl0ZW1zU2VsZWN0ZWQodHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbnRlcmFjdFwiXG4gICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwieyBhY3Rpb246IFBYX0FDVElPTlMuU0VMRUNUX0FMTF9JVEVNUyB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgY291bnQ6IChkYXRhU291cmNlLnN0YXRzJCB8IGFzeW5jKS5maWx0ZXJlZFNpemUgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNlbGVjdCBhbGwge3sgY291bnQgfX0gaXRlbXNcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvc21hbGw+XG4gICAgICA8L2g0PlxuICAgICAgPGRpdiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG5iYXIgZC1mbGV4XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVsa0FjdGlvbkNvbnRyb2wgb2YgYnVsa0FjdGlvbkNvbnRyb2xzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiYnVsa0FjdGlvbkNvbnRyb2wgfCBpc0NvbnRyb2xWaXNpYmxlOiBzZWxlY3RlZEl0ZW1JZHNcIlxuICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiYnVsa0FjdGlvbkNvbnRyb2wudHlwZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bmJhci1idG5cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0V4cG9ydCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJidWxrQWN0aW9uQ29udHJvbC5jYWxsYmFjayhzZWxlY3RlZEl0ZW1JZHMsIHJlbG9hZC5iaW5kKHRoaXMpKVwiXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydFwiXG4gICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwieyBhY3Rpb246IFBYX0FDVElPTlMuQlVMS19FWFBPUlQgfVwiXG4gICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwic2lnbi1vdXRcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0V4cG9ydCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bmJhci1idG5cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJidWxrQWN0aW9uQ29udHJvbC5jYWxsYmFjayhzZWxlY3RlZEl0ZW1JZHMsIHJlbG9hZC5iaW5kKHRoaXMpKVwiXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwieyBhY3Rpb246IFBYX0FDVElPTlMuQlVMS19ERUxFVEUgfVwiXG4gICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiZGVsZXRlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG5iYXItYnRuXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGJ1bGtBY3Rpb25Db250cm9sLnRleHQgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJidWxrQWN0aW9uQ29udHJvbC5jYWxsYmFjayhzZWxlY3RlZEl0ZW1JZHMsIHJlbG9hZC5iaW5kKHRoaXMpKVwiXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5CVUxLX0NVU1RPTV9BQ1RJT04sXG4gICAgICAgICAgICAgICAgICBjdXN0b21BY3Rpb25OYW1lOiBidWxrQWN0aW9uQ29udHJvbC50ZXh0XG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwie3sgYnVsa0FjdGlvbkNvbnRyb2wuaWNvbiB9fVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBidWxrQWN0aW9uQ29udHJvbC50ZXh0IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5iYXItYnRuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuQlVMS19DQU5DRUxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgICAgICA8c3Bhbj57eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHRhYmxlXG4gICAgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciB0YWJsZS1maWx0ZXJlZC1zb3J0ZWQgdGFibGUtZGF0YS1ncmlkIGxhcmdlLXBhZGRpbmdcIlxuICAgIGNkay10YWJsZVxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgIFt0cmFja0J5XT1cInRyYWNrQnlOYW1lXCJcbiAgICBbY2xhc3MudGFibGUtc3RyaXBlZF09XCJkaXNwbGF5T3B0aW9ucy5zdHJpcGVkXCJcbiAgICBbY2xhc3MudGFibGUtYm9yZGVyZWRdPVwiZGlzcGxheU9wdGlvbnMuYm9yZGVyZWRcIlxuICAgIFtjbGFzcy50YWJsZS1kYXRhLWdyaWQtd2l0aC1jaGVja2JveGVzXT1cInNlbGVjdGFibGVcIlxuICAgIFtjbGFzcy50YWJsZS1kYXRhLWdyaWQtd2l0aC1hY3Rpb25zXT1cImFjdGlvbkNvbnRyb2xzLmxlbmd0aCA+IDBcIlxuICAgIFtzdHlsZS5ncmlkLXRlbXBsYXRlLWNvbHVtbnNdPVwic3R5bGVzLmdyaWRUZW1wbGF0ZUNvbHVtbnNcIlxuICAgIChtb3VzZW1vdmUpPVwicmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VNb3ZlJC5lbWl0KCRldmVudClcIlxuICAgIChtb3VzZXVwKT1cInJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkLmVtaXQoJGV2ZW50KVwiXG4gICAgZGF0YS1jeT1cImM4eS1kYXRhLWdyaWQtLXRhYmxlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeU5hbWVcIlxuICAgICAgW2Nka0NvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLm5hbWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgIDx0aCBjZGstaGVhZGVyLWNlbGwgKmNka0hlYWRlckNlbGxEZWYgZGF0YS10eXBlPVwiaWNvblwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWxlY3RlZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUuYWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZS5hbGxTZWxlY3RlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUuYWxsRGVzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRBbGxJdGVtc0luQ3VycmVudFBhZ2VTZWxlY3RlZCgkZXZlbnQudGFyZ2V0LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGFjdGlvbjogUFhfQUNUSU9OUy5TRUxFQ1RfQUxMX0lURU1TIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDx0ZCBjZGstY2VsbCAqY2RrQ2VsbERlZj1cImxldCByb3dcIiBkYXRhLXR5cGU9XCJpY29uXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VsZWN0ZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzSXRlbVNlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0SXRlbXNTZWxlY3RlZChbcm93XSwgJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLlNFTEVDVF9JVEVNLFxuICAgICAgICAgICAgICAgICAgaWQ6IHJvdy5pZFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktZGF0YS1ncmlkLS1jaGVja2JveFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FjdGlvbnMnXCI+XG4gICAgICAgICAgPHRoIGNkay1oZWFkZXItY2VsbCAqY2RrSGVhZGVyQ2VsbERlZiBkYXRhLXR5cGU9XCJpY29uXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHNyLW9ubHlcIj57eyAnQWN0aW9ucycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgPC90aD5cblxuICAgICAgICAgIDx0ZCBjZGstY2VsbCAqY2RrQ2VsbERlZj1cImxldCByb3dcIiBkYXRhLXR5cGU9XCJpY29uXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uQ29udHJvbHMubGVuZ3RoIDw9IDJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uQ29udHJvbCBvZiBhY3Rpb25Db250cm9sc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uQ29udHJvbCB8IGlzQ29udHJvbFZpc2libGU6IHJvd1wiXG4gICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiYWN0aW9uQ29udHJvbC50eXBlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJidWlsdEluQWN0aW9uVHlwZS5FZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidFZGl0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnRWRpdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25Db250cm9sLmNhbGxiYWNrKHJvdywgcmVsb2FkLmJpbmQodGhpcykpXCJcbiAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkVESVRfSVRFTSxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgc2hvd09uSG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRGVsZXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnRGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNvbnRyb2wuY2FsbGJhY2socm93LCByZWxvYWQuYmluZCh0aGlzKSlcIlxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiYnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5ERUxFVEVfSVRFTSxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktZGF0YS1ncmlkLS1yZW1vdmUtYnV0dG9uLWluLXJvd1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJkZWxldGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGFjdGlvbkNvbnRyb2wuaWNvbiA/IGFjdGlvbkNvbnRyb2wudGV4dCA6ICcnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAoYWN0aW9uQ29udHJvbC5pY29uID8gYWN0aW9uQ29udHJvbC50ZXh0IDogJycpIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25Db250cm9sLmNhbGxiYWNrKHJvdywgcmVsb2FkLmJpbmQodGhpcykpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogUFhfQUNUSU9OUy5DVVNUT01fQUNUSU9OX0lURU0sXG4gICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQWN0aW9uTmFtZTogYWN0aW9uQ29udHJvbC50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3cuaWRcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY3Rpb25Db250cm9sLmljb25cIiBjOHlJY29uPVwie3sgYWN0aW9uQ29udHJvbC5pY29uIH19XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFhY3Rpb25Db250cm9sLmljb25cIj57eyBhY3Rpb25Db250cm9sLnRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdtLWwtYXV0byBvdmVyZmxvdy12aXNpYmxlJzogYWN0aW9uQ29udHJvbHMubGVuZ3RoID4gMiB9XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBkcm9wZG93blxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSByaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb25Db250cm9scy5sZW5ndGggPiAyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGM4eS1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FjdGlvbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImVsbGlwc2lzLXZcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0XCIgKmRyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYWN0aW9uQ29udHJvbCBvZiBhY3Rpb25Db250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb25Db250cm9sIHwgaXNDb250cm9sVmlzaWJsZTogcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiYWN0aW9uQ29udHJvbC50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRWRpdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImJ1aWx0SW5BY3Rpb25UeXBlLkVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNvbnRyb2wuY2FsbGJhY2socm93LCByZWxvYWQuYmluZCh0aGlzKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuRURJVF9JVEVNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBlbmNpbFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdFZGl0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiYnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25Db250cm9sLmNhbGxiYWNrKHJvdywgcmVsb2FkLmJpbmQodGhpcykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkRFTEVURV9JVEVNLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImRlbGV0ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdFeHBvcnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJidWlsdEluQWN0aW9uVHlwZS5FeHBvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNvbnRyb2wuY2FsbGJhY2socm93LCByZWxvYWQuYmluZCh0aGlzKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFBYX0FDVElPTlMuRVhQT1JUX0lURU0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByb3cuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiZG93bmxvYWRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnRXhwb3J0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBhY3Rpb25Db250cm9sLnRleHQgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkNvbnRyb2wuY2FsbGJhY2socm93LCByZWxvYWQuYmluZCh0aGlzKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBQWF9BQ1RJT05TLkNVU1RPTV9BQ1RJT05fSVRFTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQWN0aW9uTmFtZTogYWN0aW9uQ29udHJvbC50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwie3sgYWN0aW9uQ29udHJvbC5pY29uIH19XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uQ29udHJvbC50ZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIGNkay1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKmNka0hlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10eXBlXT1cImNvbHVtbi5kYXRhVHlwZVwiXG4gICAgICAgICAgICBbY2xhc3Muc29ydGVkXT1cImNvbHVtbi5zb3J0T3JkZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmZpbHRlcmVkXT1cImNvbHVtbiB8IG1hcDogaXNDb2x1bW5GaWx0ZXJpbmdBcHBsaWVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWNvbHVtbi52aXNpYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbHVtbi5maWx0ZXJhYmxlXCIgW3RpdGxlXT1cIihjb2x1bW4uaGVhZGVyIHwgdHJhbnNsYXRlKSB8fCBjb2x1bW4ubmFtZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAoY29sdW1uLmhlYWRlciB8IHRyYW5zbGF0ZSkgfHwgY29sdW1uLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSB8IG1hcDogZ2V0SGVhZGVyQ2VsbFJlbmRlcmVyU3BlYzp0aGlzIGFzIGNlbGxSZW5kZXJlclNwZWNcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGM4eS1jZWxsLXJlbmRlcmVyIFtzcGVjXT1cImNlbGxSZW5kZXJlclNwZWNcIj48L2M4eS1jZWxsLXJlbmRlcmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIGlzRHJvcERvd25QbGFjZWRSaWdodCB0byBiZSByZW1vdmVkIHdoZW4gY29sdW1ucyBhcmUgdHJhbnNmb3JtZWQgdG8gb2JzZXJ2YWJsZXMuIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5maWx0ZXJhYmxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgIGRyb3Bkb3duXG4gICAgICAgICAgICAgICNncmlkSGVhZGVyRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgICAgICAgICAgIFtjZGtUcmFwRm9jdXNdPVwiZ3JpZEhlYWRlckRyb3Bkb3duLmlzT3BlblwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSB7eyBpc0Ryb3BEb3duUGxhY2VkUmlnaHQoY29sdW1uKSA/ICdyaWdodCcgOiAnbGVmdCcgfX1cIlxuICAgICAgICAgICAgICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29sdW1uLmhlYWRlciB8IHRyYW5zbGF0ZSkgfHwgY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGEtZ3JpZC0taGVhZGVyLWJ0bi0tJyArIGNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKGNvbHVtbi5oZWFkZXIgfCB0cmFuc2xhdGUpIHx8IGNvbHVtbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdIHwgbWFwOiBnZXRIZWFkZXJDZWxsUmVuZGVyZXJTcGVjOnRoaXMgYXMgY2VsbFJlbmRlcmVyU3BlY1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWNlbGwtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1kYXRhLWdyaWQtLWM4eS1jZWxsLXJlbmRlcmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3NwZWNdPVwiY2VsbFJlbmRlcmVyU3BlY1wiXG4gICAgICAgICAgICAgICAgICA+PC9jOHktY2VsbC1yZW5kZXJlcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiZmlsdGVyXCIgdGl0bGU9XCJ7eyAnRmlsdGVyJyB8IHRyYW5zbGF0ZSB9fVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPCEtLSBpc0Ryb3BEb3duUGxhY2VkUmlnaHQgdG8gYmUgcmVtb3ZlZCB3aGVuIGNvbHVtbnMgYXJlIHRyYW5zZm9ybWVkIHRvIG9ic2VydmFibGVzLiAtLT5cbiAgICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgKmRyb3Bkb3duTWVudVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZHJvcGRvd24tbWVudS1yaWdodC1ncmlkJzogaXNEcm9wRG93blBsYWNlZFJpZ2h0KGNvbHVtbikgfVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJkYXRhLWdyaWRfX2Ryb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd246IGdyaWRIZWFkZXJEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0gfCBtYXA6IGdldEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWM6dGhpcyBhcyBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxjOHktZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICBbc3BlY109XCJmaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLWN5PVwiYzh5LWRhdGEtZ3JpZC0tYzh5LWZpbHRlcmluZy1mb3JtLXJlbmRlcmVyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYzh5LWZpbHRlcmluZy1mb3JtLXJlbmRlcmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLXNvcnRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInNvcnRDb2x1bW5UaXRsZSB8IHRyYW5zbGF0ZTogeyBuYW1lOiBjb2x1bW4uaGVhZGVyIHwgdHJhbnNsYXRlIH1cIlxuICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VTb3J0T3JkZXIoY29sdW1uLm5hbWUpXCJcbiAgICAgICAgICAgICAgZGF0YS1jeT1cImNoYW5nZS1zb3J0LW9yZGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLnNvcnRPcmRlclwiPlxuICAgICAgICAgICAgICAgIDxpICpuZ1N3aXRjaENhc2U9XCInYXNjJ1wiIGM4eUljb249XCJsb25nLWFycm93LXVwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpICpuZ1N3aXRjaENhc2U9XCInZGVzYydcIiBjOHlJY29uPVwibG9uZy1hcnJvdy1kb3duXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpICpuZ1N3aXRjaERlZmF1bHQgYzh5SWNvbj1cImV4Y2hhbmdlXCI+PC9pPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5yZXNpemFibGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZU1vdXNlRG93biQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHRhcmdldENvbHVtbk5hbWU6IGNvbHVtbi5uYW1lIH0pXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvdGg+XG5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGNkay1jZWxsXG4gICAgICAgICAgICAqY2RrQ2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDU1NDbGFzc05hbWVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jZWxsLXRpdGxlXT1cImNvbHVtbi5oZWFkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInZGF0YS1ncmlkLS0nICsgY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXR5cGVdPVwiY29sdW1uLmRhdGFUeXBlXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWNvbHVtbi52aXNpYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzb2x2ZUNlbGxWYWx1ZShyb3csIGNvbHVtbi5wYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGNvbHVtbi5uYW1lXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSB8IG1hcDogZ2V0Q2VsbFJlbmRlcmVyU3BlYzp0aGlzIGFzIGNlbGxSZW5kZXJlclNwZWNcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1jZWxsLXJlbmRlcmVyIFtzcGVjXT1cImNlbGxSZW5kZXJlclNwZWNcIj48L2M4eS1jZWxsLXJlbmRlcmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgY2RrQ29sdW1uRGVmPVwiaW5maW5pdGVTY3JvbGxGb290ZXJcIj5cbiAgICAgIDx0ZCBjZGstZm9vdGVyLWNlbGwgKmNka0Zvb3RlckNlbGxEZWYgW3N0eWxlLmdyaWQtY29sdW1uXT1cInN0eWxlcy5ncmlkSW5maW5pdGVTY3JvbGxDb2x1bW5cIj5cbiAgICAgICAgPHRlbXBsYXRlICNpbmZpbml0ZVNjcm9sbENvbnRhaW5lcj48L3RlbXBsYXRlPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciBjZGstaGVhZGVyLXJvdyAqY2RrSGVhZGVyUm93RGVmPVwiY29sdW1uTmFtZXNcIj48L3RyPlxuXG4gICAgPHRyXG4gICAgICBkYXRhLWN5PVwiYzh5LWRhdGEtZ3JpZC0tcm93LWluLWRhdGEtZ3JpZFwiXG4gICAgICBjZGstcm93XG4gICAgICAqY2RrUm93RGVmPVwibGV0IHJvdzsgY29sdW1uczogY29sdW1uTmFtZXNcIlxuICAgICAgKG1vdXNlb3Zlcik9XCJyb3dNb3VzZU92ZXIuZW1pdChyb3cpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cInJvd01vdXNlTGVhdmUuZW1pdChyb3cpXCJcbiAgICAgIChjbGljayk9XCJyb3dDbGljay5lbWl0KHJvdylcIlxuICAgID48L3RyPlxuXG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDx0clxuICAgICAgICBbbmdDbGFzc109XCJ7IGhpZGRlbjogIWluZmluaXRlU2Nyb2xsIH1cIlxuICAgICAgICBjZGstZm9vdGVyLXJvd1xuICAgICAgICAqY2RrRm9vdGVyUm93RGVmPVwiWydpbmZpbml0ZVNjcm9sbEZvb3RlciddXCJcbiAgICAgID48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3RhYmxlPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImQtZmxleCBtLTAgcC10LTQwIHAtYi00MFwiXG4gICAgKm5nSWY9XCIhKGRhdGFTb3VyY2UubG9hZGluZyQgfCBhc3luYykgJiYgKGRhdGFTb3VyY2Uuc3RhdHMkIHwgYXN5bmMpLmZpbHRlcmVkU2l6ZSA9PT0gMFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTMgY29sLXNtLTQgbS1sLWF1dG8gbS1yLWF1dG9cIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImM4eS11aS1lbXB0eS1zdGF0ZSwgLmM4eS1lbXB0eS1zdGF0ZVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInBhZ2luYXRpb24gJiYgIWluZmluaXRlU2Nyb2xsXCIgY2xhc3M9XCJ0YWJsZS1kYXRhLWdyaWQtZm9vdGVyIHNlcGFyYXRvciBsYXJnZS1wYWRkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS00IG5vLWd1dHRlclwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIihkYXRhU291cmNlLnN0YXRzJCB8IGFzeW5jKS5jdXJyZW50UGFnZVNpemUgPiAwXCJcbiAgICAgICAgY2xhc3M9XCJjb3VudGVyIHAtdC04IHAtYi04XCJcbiAgICAgICAgZGF0YS1jeT1cImRhdGEtZ3JpZC0tY291bnRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiIG5nTm9uQmluZGFibGUgdHJhbnNsYXRlIFt0cmFuc2xhdGVQYXJhbXNdPVwicGFnaW5hdGlvbkxhYmVsUGFyYW1zXCI+XG4gICAgICAgICAge3sgcGFnZUZpcnN0SXRlbUlkeCB9fSAtIHt7IHBhZ2VMYXN0SXRlbUlkeCB9fSBvZiB7eyBpdGVtc1RvdGFsIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS00IG5vLWd1dHRlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIihkYXRhU291cmNlLnN0YXRzJCB8IGFzeW5jKS5maWx0ZXJlZFNpemUgPiBtaW5Qb3NzaWJsZVBhZ2VTaXplXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIGZvcm0taW5saW5lIHAtdC04IHAtYi04XCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibS1yLTRcIiBmb3I9XCJmaWx0ZXJlZFNpemVcIj57eyAnSXRlbXMgcGVyIHBhZ2UnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGlkPVwiZmlsdGVyZWRTaXplXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJkYXRhLWdyaWQtLXBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwicGFnaW5hdGlvbi5wYWdlU2l6ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgdXBkYXRlUGFnaW5hdGlvbih7IGl0ZW1zUGVyUGFnZTogJGV2ZW50LCBwYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHBhZ2VTaXplIG9mIHBvc3NpYmxlUGFnZVNpemVzXCIgW25nVmFsdWVdPVwicGFnZVNpemVcIj5cbiAgICAgICAgICAgICAge3sgcGFnZVNpemUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC1zbS00IG5vLWd1dHRlciB0ZXh0LXJpZ2h0XCI+XG4gICAgICA8cGFnaW5hdGlvblxuICAgICAgICAqbmdJZj1cIihkYXRhU291cmNlLnN0YXRzJCB8IGFzeW5jKS5maWx0ZXJlZFNpemUgPiAwXCJcbiAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJoaWRlUGFnaW5hdGlvbiQgfCBhc3luY1wiXG4gICAgICAgIFtuZ01vZGVsXT1cInBhZ2luYXRpb24uY3VycmVudFBhZ2VcIlxuICAgICAgICAocGFnZUNoYW5nZWQpPVwidXBkYXRlUGFnaW5hdGlvbigkZXZlbnQpXCJcbiAgICAgICAgW3RvdGFsSXRlbXNdPVwiKGRhdGFTb3VyY2Uuc3RhdHMkIHwgYXN5bmMpLmZpbHRlcmVkU2l6ZVwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwicGFnaW5hdGlvbi5wYWdlU2l6ZVwiXG4gICAgICAgIChudW1QYWdlcyk9XCJ0b3RhbFBhZ2VzQ291bnQkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgIFttYXhTaXplXT1cIjVcIlxuICAgICAgICBbYm91bmRhcnlMaW5rc109XCJmYWxzZVwiXG4gICAgICAgIHByZXZpb3VzVGV4dD1cIlByZXZpb3VzXCJcbiAgICAgICAgbmV4dFRleHQ9XCJOZXh0XCJcbiAgICAgICAgY2xhc3M9XCJwLXQtOCBwLWItOFwiXG4gICAgICA+PC9wYWdpbmF0aW9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19