@oneteme/jquery-table 0.0.15 → 0.0.16

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.
@@ -129,6 +129,8 @@ export class TableComponent {
129
129
  this.pageSize = 5;
130
130
  this.pageSizeOptions = [5, 10, 20];
131
131
  this.pageSizeOptionsGroupBy = [5, 10, 20];
132
+ /** Taille de page choisie par l'utilisateur ou restaurée des préférences ; prioritaire sur la config tant que le paginator est absent (mode Group by). */
133
+ this._userPageSize = null;
132
134
  this.draggedColumnKey = null;
133
135
  this.dragOverColumnKey = null;
134
136
  // ── Mode édition (Préférences)
@@ -1072,6 +1074,8 @@ export class TableComponent {
1072
1074
  groupBy: this.activeGroupByKey,
1073
1075
  columnOrder: this.activeFields.map(c => c.key),
1074
1076
  visibleColumns: this.activeFields.map(c => c.key),
1077
+ pageSize: this.paginator?.pageSize ?? this.pageSize,
1078
+ groupPageSize: this.groupPageSize,
1075
1079
  columnWidths: Object.keys(this._columnWidths).length ? { ...this._columnWidths } : undefined,
1076
1080
  slicePanelCollapsed: this._slicePanelCollapsed,
1077
1081
  hiddenSliceKeys: [...this._staticSliceHiddenKeys],
@@ -1101,6 +1105,11 @@ export class TableComponent {
1101
1105
  }
1102
1106
  this._groupBy.reset();
1103
1107
  this._groupBy.setDefaultCollapsed(false);
1108
+ this._userPageSize = null;
1109
+ this.pageSize = this.resolvePageSize();
1110
+ if (this.paginator)
1111
+ this.paginator.pageSize = this.pageSize;
1112
+ this.groupPageSize = this.resolveDefaultGroupPageSize();
1104
1113
  // Slices statiques : revenir aux seules celles cachées par la config (pas par l'utilisateur)
1105
1114
  this._staticSliceHiddenKeys = new Set(this._configHiddenKeys);
1106
1115
  this._organizer.updateHiddenStaticKeys(this._staticSliceHiddenKeys);
@@ -1151,6 +1160,17 @@ export class TableComponent {
1151
1160
  this._groupBy.reset();
1152
1161
  }
1153
1162
  }
1163
+ // Nombre de lignes : valeurs ignorées si elles ne figurent plus dans les options de la config
1164
+ if (typeof saved.pageSize === 'number' && this.pageSizeOptions.includes(saved.pageSize)) {
1165
+ this._userPageSize = saved.pageSize;
1166
+ this.pageSize = saved.pageSize;
1167
+ if (this.paginator)
1168
+ this.paginator.pageSize = saved.pageSize;
1169
+ }
1170
+ if (typeof saved.groupPageSize === 'number'
1171
+ && (saved.groupPageSize === 0 || this.pageSizeOptionsGroupBy.includes(saved.groupPageSize))) {
1172
+ this.groupPageSize = saved.groupPageSize;
1173
+ }
1154
1174
  // État panneau slice
1155
1175
  if (saved.slicePanelCollapsed !== undefined)
1156
1176
  this._slicePanelCollapsed = saved.slicePanelCollapsed;
@@ -1813,7 +1833,7 @@ export class TableComponent {
1813
1833
  return normalizeCellValue(rawValue);
1814
1834
  }
1815
1835
  resolvePageSize() {
1816
- return Math.max(1, this.resolvedConfig.pagination?.pageSize || this.pageSize || 5);
1836
+ return Math.max(1, this._userPageSize || this.resolvedConfig.pagination?.pageSize || this.pageSize || 5);
1817
1837
  }
1818
1838
  resolvePageSizeOptions() {
1819
1839
  const options = this.resolvedConfig.pagination?.pageSizeOptions || [5, 10, 20];
@@ -1861,6 +1881,7 @@ export class TableComponent {
1861
1881
  this._paginatorSubscribed = this.paginator;
1862
1882
  this.paginator.page.pipe(takeUntil(this._destroy$)).subscribe(() => {
1863
1883
  this.pageSize = this.paginator.pageSize;
1884
+ this._userPageSize = this.pageSize;
1864
1885
  this.pageChange.emit({ pageIndex: this.paginator.pageIndex, pageSize: this.paginator.pageSize });
1865
1886
  if (this._pendingRender !== null)
1866
1887
  return;
@@ -1976,4 +1997,4 @@ function serializableColumn(column) {
1976
1997
  lazy: !!column.lazy,
1977
1998
  };
1978
1999
  }
1979
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBbUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUF3QixNQUFNLEVBQUUsU0FBUyxFQUE4QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL1MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtC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QVM7dUJBQUMsWUFBWTtnQkFDUyxhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDUSxTQUFTO3NCQUE5QyxlQUFlO3VCQUFDLG1CQUFtQjtnQkE4Y3BDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQywyQkFBMkI7O0FBdWpEM0MsU0FBUyxrQkFBa0IsQ0FBSSxNQUE4QjtJQUMzRCxPQUFPO1FBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1FBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0tBQ3BCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgaXNEZXZNb2RlLCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBNYXRQYWdpbmF0b3JJbnRsLCBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBkZWZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uUHJvdmlkZXIsIFRhYmxlRXhwb3J0Q29uZmlnLCBUYWJsZVByZWZlcmVuY2VzQ29uZmlnLCBUYWJsZVByb3ZpZGVyLCBUYWJsZVZpZXdDb25maWcgfSBmcm9tICcuLi9qcXVlcnktdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgSnF0STE4biwgSlFUX0kxOE4sIEpRVF9JMThOX0RFRkFVTFRTIH0gZnJvbSAnLi4vanF0LWkxOG4udG9rZW4nO1xuaW1wb3J0IHsgSnF0Q2VsbERlZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZS9qcXQtY2VsbC1kZWYuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnLCBTbGljZVBhbmVsQ29tcG9uZW50LCBPcmdhbml6ZXJGYWNhZGUsIEdyb3VwQnlNYW5hZ2VyLCBPcmdhbml6ZXJDb25maWcsIE9yZ2FuaXplckJ1dHRvbkV2ZW50LCBPcmdhbml6ZXJTdGF0ZSB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXInO1xuaW1wb3J0IHsgZ2V0RnJlbmNoUGFnaW5hdG9ySW50bCwgaHVtYW5pemVLZXksIG5vcm1hbGl6ZUNlbGxWYWx1ZSB9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuaW1wb3J0IHsgVGFibGVQcmVmZXJlbmNlc01hbmFnZXIgfSBmcm9tICcuL3RhYmxlLXByZWZlcmVuY2VzLm1hbmFnZXInO1xuaW1wb3J0IHsgRXhwb3J0TWFuYWdlciB9IGZyb20gJy4vZXhwb3J0Lm1hbmFnZXInO1xuaW1wb3J0IHtcbiAgR1JPVVBfUk9XX0NPTFVNTiwgR1JPVVBfSEVBREVSX01BUktFUixcbiAgR1JPVVBfS0VZX0xBWllfTE9BRElORywgR1JPVVBfS0VZX0xBWllfRVJST1IsIEdST1VQX0tFWV9UT09fTUFOWSxcbiAgUk9XX1JBV19LRVksIFJPV19JTkRFWF9LRVksXG4gIFJPV19HUk9VUF9LRVksIFJPV19HUk9VUF9DT1VOVCwgUk9XX0dST1VQX1BBR0UsIFJPV19HUk9VUF9QQUdFX0NPVU5ULFxuICBMQVpZX0xPQURJTkdfVkFMVUUsIExBWllfRVJST1JfVkFMVUUsXG59IGZyb20gJy4vdGFibGUuY29uc3RhbnRzJztcbmltcG9ydCB7IE9yZ2FuaXplckJ1dHRvbldyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL29yZ2FuaXplci1idXR0b24vb3JnYW5pemVyLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVTZXJpYWxpemFibGUsIGNvbnRhaW5zRnVuY3Rpb24sIEZ1bGxzY3JlZW5NYW5hZ2VyLCBWaXN1YWxDb3B5RmVlZGJhY2tDb25maWcsIFZpc3VhbFNuYXBzaG90LCBWaXN1YWxTbmFwc2hvdEFwcGx5UmVzdWx0LCBWaXN1YWxTbmFwc2hvdERyYWZ0LCBWaXN1YWxTbmFwc2hvdFN0b3JhZ2UgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbi8qKiBDYWNoZSBpbnRlcm5lIGR1IGdyb3VwZW1lbnQg4oCUIGludmFsaWTDqSBkw6hzIHF1ZSBsZXMgZG9ubsOpZXMsIGxhIGNsw6kgb3UgbGVzIHBhcmFtw6h0cmVzIGRlIHRyaSBjaGFuZ2VudC4gKi9cbmludGVyZmFjZSBHcm91cEJ5Q2FjaGU8VD4ge1xuICByb3dzOiBUW107XG4gIGtleTogc3RyaW5nO1xuICBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnO1xuICBzb3J0QWN0aXZlOiBzdHJpbmc7XG4gIHNvcnREaXI6IHN0cmluZztcbiAgb3JkZXI6IHN0cmluZ1tdO1xuICBtYXA6IE1hcDxzdHJpbmcsIFRbXT47XG59XG5cbmludGVyZmFjZSBUYWJsZVNvcnRTdGF0ZSB7XG4gIGFjdGl2ZTogc3RyaW5nO1xuICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJyc7XG59XG5cbi8qKiBPcHRpb25zIGRlIGwnT3JnYW5pemVyIGTDqWR1aXRlcyBkZSBUYWJsZVZpZXdDb25maWcuICovXG5pbnRlcmZhY2UgT3JnYW5pemVyVmlld09wdGlvbnMge1xuICBlbmFibGVkPzogYm9vbGVhbjtcbiAgZW5hYmxlRmllbGRSZW1vdmFsPzogYm9vbGVhbjtcbiAgZW5hYmxlRmllbGREcmFnRHJvcD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2pxdWVyeS10YWJsZScsXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0VGFibGVNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0UGFnaW5hdG9yTW9kdWxlLCBNYXRTb3J0TW9kdWxlLCBNYXRNZW51TW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUsIFNsaWNlUGFuZWxDb21wb25lbnQsIE9yZ2FuaXplckJ1dHRvbldyYXBwZXJDb21wb25lbnQgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0UGFnaW5hdG9ySW50bCwgdXNlRmFjdG9yeTogZ2V0RnJlbmNoUGFnaW5hdG9ySW50bCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudmlzdWFsLWZ1bGxzY3JlZW4nKSBfaXNGdWxsc2NyZWVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZz86IFRhYmxlUHJvdmlkZXI8VD47XG5cbiAgQElucHV0KCkgZGF0YVNvdXJjZT86IFRbXSB8IHsgZGF0YTogVFtdIH07XG4gIEBJbnB1dCgpIGRhdGE/OiBUW107XG4gIEBJbnB1dCgpIGRpc3BsYXllZENvbHVtbnM/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29sdW1uc0NvbmZpZz86IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXTtcblxuICAvKipcbiAgICogTW9kZSBIVE1MIDogYWN0aXZlIGV0IGNvbmZpZ3VyZSBsZSBwYW5uZWF1IFZpZXcgaW5kw6lwZW5kYW1tZW50IGR1IGBbY29uZmlnXWAuXG4gICAqIFByZW5kIGxlIGRlc3N1cyBzdXIgYGNvbmZpZy52aWV3YCBzaSBkw6lmaW5pLlxuICAgKiBFeGVtcGxlIDogYDxqcXVlcnktdGFibGUgW3ZpZXddPVwieyBlbmFibGVkOiB0cnVlIH1cIj5gXG4gICAqL1xuICBASW5wdXQoKSB2aWV3PzogVGFibGVWaWV3Q29uZmlnO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkxhYmVscz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIEBJbnB1dCgpIGlzTG9hZGluZyA9IGZhbHNlO1xuICAvKipcbiAgICogw4AgcGFzc2VyIMOgIGB0cnVlYCBxdWFuZCBsYSByZXF1w6p0ZSByZWxhbmPDqWUgYXByw6hzIGBsYXp5Q29sdW1uc1JlcXVlc3RlZGAgw6ljaG91ZSA6IGxlcyBjb2xvbm5lcyBlbiBhdHRlbnRlIGFmZmljaGVudCB1biBib3V0b25cbiAgICogwqsgUsOpZXNzYXllciDCuy4gUmVwYXNzZXIgw6AgYGZhbHNlYCBhdSBub3V2ZWwgZXNzYWkuXG4gICAqL1xuICBASW5wdXQoKSBsYXp5RXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgY29weUZlZWRiYWNrOiBWaXN1YWxDb3B5RmVlZGJhY2tDb25maWcgPSB7fTtcblxuICAvKiogUGFyYW3DqHRyZSBkZSBjb250csO0bGUgcG91ciByw6lpbml0aWFsaXNlciBiYXJyZSBkZSByZWNoZXJjaGUuICovXG4gIEBJbnB1dCgpXG4gIHNldCBjbGVhclNlYXJjaElucHV0KHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgICAgdGhpcy5vblNlYXJjaENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBhZGRSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5BZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbHVtblJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjYXRlZ29yeVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSByb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvKiogw4ltaXMgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgdHJpICh5IGNvbXByaXMgbGUgdHJpIGluaXRpYWwpLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc29ydENoYW5nZSAgICA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0U3RhdGU+KCk7XG4gIC8qKiDDiW1pcyDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBwYWdlIG91IGRlIHRhaWxsZSBkZSBwYWdlLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZUNoYW5nZSAgICA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PigpO1xuICAvKiogw4ltaXMgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgbGEgcmVjaGVyY2hlIHRleHRlLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VhcmNoQ2hhbmdlICA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogw4ltaXMgcXVhbmQgbGUgR3JvdXAgYnkgY2hhbmdlIChjbMOpIGRlIGNvbG9ubmUsIG91IGBudWxsYCBzaSBkw6lzYWN0aXbDqSkuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBncm91cEJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudWxsPigpO1xuICAvKiogw4ltaXMgcXVhbmQgbGEgbGlzdGUgZGVzIGNvbG9ubmVzIHZpc2libGVzIGNoYW5nZSAoY2zDqXMgZGFucyBs4oCZb3JkcmUgZOKAmWFmZmljaGFnZSkuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc3VhbENvcGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8VmlzdWFsU25hcHNob3Q+KCk7XG4gIC8qKlxuICAgKiBDbMOpcyBkZSB0b3V0ZXMgbGVzIGNvbG9ubmVzIGBsYXp5YCBkZW1hbmTDqWVzIGp1c3F1J2ljaSAoY3VtdWwpLCDDqW1pc2VzIHF1YW5kIGwndW5lIGQnZWxsZXMgZXN0IGFjdGl2w6llIHBvdXIgbGEgcHJlbWnDqHJlIGZvaXMuXG4gICAqIEwnYXBwbGljYXRpb24gcmVsYW5jZSBzYSByZXF1w6p0ZSBjb21wbMOodGUgZW4gbGVzIGluY2x1YW50IHB1aXMgcmVwYXNzZSBsZXMgbm91dmVsbGVzIGBkYXRhYC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBsYXp5Q29sdW1uc1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpXG4gIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hdHRhY2hQYWdpbmF0b3IoKTtcbiAgICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3BhZ2luYXRvcjsgfVxuICBwcml2YXRlIF9wYWdpbmF0b3I/OiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydD86IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keVNjcm9sbCcpIHRhYmxlQm9keVNjcm9sbFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0YWJsZVNoZWxsJykgdGFibGVTaGVsbFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFNsaWNlUGFuZWxDb21wb25lbnQpIHNsaWNlUGFuZWxSZWY/OiBTbGljZVBhbmVsQ29tcG9uZW50PFQ+O1xuICBAQ29udGVudENoaWxkcmVuKEpxdENlbGxEZWZEaXJlY3RpdmUpIF9jZWxsRGVmcyE6IFF1ZXJ5TGlzdDxKcXRDZWxsRGVmRGlyZWN0aXZlPjtcbiAgLyoqIE1hcCBjbMOp4oaSVGVtcGxhdGVSZWYgcHLDqS1jYWxjdWzDqWUgZGVwdWlzIF9jZWxsRGVmcy4gTWlzZSDDoCBqb3VyIGRhbnMgbmdBZnRlckNvbnRlbnRJbml0IGV0IHN1ciBfY2VsbERlZnMuY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfY2VsbERlZk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogYW55OyBpbmRleDogbnVtYmVyOyB2YWx1ZTogYW55IH0+PigpO1xuXG4gIHJlbmRlcmVkQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgdGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KFtdKTtcblxuICAvKiogQ29uc3RhbnRlIGV4cG9zw6llIGF1IHRlbXBsYXRlIHBvdXIgbGUgbWF0Q29sdW1uRGVmIGRlIGxhIGxpZ25lIGRlIGdyb3VwZS4gKi9cbiAgcmVhZG9ubHkgX0dST1VQX1JPV19DT0xVTU4gPSBHUk9VUF9ST1dfQ09MVU1OO1xuICAvKiogQ2zDqXMgZCdhY2PDqHMgYXV4IHByb3ByacOpdMOpcyBkZXMgbGlnbmVzIHByb2pldMOpZXMg4oCUIGV4cG9zw6llcyBwb3VyIGxlIHRlbXBsYXRlLiAqL1xuICByZWFkb25seSBfUk9XX1JBV19LRVkgPSBST1dfUkFXX0tFWTtcbiAgcmVhZG9ubHkgX1JPV19JTkRFWF9LRVkgPSBST1dfSU5ERVhfS0VZO1xuICByZWFkb25seSBfUk9XX0dST1VQX0tFWSA9IFJPV19HUk9VUF9LRVk7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfQ09VTlQgPSBST1dfR1JPVVBfQ09VTlQ7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfUEFHRSA9IFJPV19HUk9VUF9QQUdFO1xuICByZWFkb25seSBfUk9XX0dST1VQX1BBR0VfQ09VTlQgPSBST1dfR1JPVVBfUEFHRV9DT1VOVDtcblxuICAvKiogRmFjYWRlIFZpZXcgOiDDqXRhdCBldCBhY3Rpb25zIGNlbnRyYWxpc8OpcyAoQ2hhbXBzIC8gR3JvdXAgYnkgLyBTbGljZSBieSkgKi9cbiAgcmVhZG9ubHkgX29yZ2FuaXplciA9IG5ldyBPcmdhbml6ZXJGYWNhZGU8VGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcblxuICAvKipcbiAgICogU25hcHNob3Qgc3RhYmxlIHN5bmNocm9uaXPDqSBkZXB1aXMgX29yZ2FuaXplci5maWVsZHMuYWN0aXZlRmllbGRzIGRhbnMgcmVmcmVzaFZpZXdNb2RlbCgpLlxuICAgKiBQcm9wcmnDqXTDqSAobm9uIGdldHRlcikgcG91ciBxdSdBbmd1bGFyIHB1aXNzZSBsYSBzdWl2cmUgc2FucyBORzAxMDAuXG4gICAqL1xuICBhY3RpdmVGaWVsZHM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSA9IFtdO1xuXG4gIGFjdGl2ZVNsaWNlRmlsdGVyOiAocm93OiBUKSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZTtcblxuICAvLyBQcm9wcmnDqXTDqXMgc3RhYmxlcyBwb3VyIGxlcyBiaW5kaW5ncyBkdSB0ZW1wbGF0ZSAoY29udHJlIGVycmV1ciBORzAxMDApXG4gIF9zbGljZUNvbmZpZ3M6IGFueVtdID0gW107XG4gIF9zbGljZUNvbHVtbnM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSA9IFtdO1xuICBfc2xpY2VEYXRhOiBUW10gPSBbXTtcbiAgX3NsaWNlU2hvd1RvZ2dsZSA9IHRydWU7XG4gIC8qKiBTbmFwc2hvdCBzdGFibGUgZGUgbGEgdmlzaWJpbGl0w6kgZHUgcGFubmVhdSBzbGljZSDigJQgamFtYWlzIGNhbGN1bMOpIGRlcHVpcyBAVmlld0NoaWxkICovXG4gIF9zaG93U2xpY2VQYW5lbCA9IGZhbHNlO1xuICAvKiogU25hcHNob3Qgc3RhYmxlIGRlIGwnw6l0YXQgY29sbGFwc2VkIGR1IHBhbm5lYXUgc2xpY2UsIG1pcyDDoCBqb3VyIHZpYSAoY29sbGFwc2VkQ2hhbmdlKSAqL1xuICBfc2xpY2VQYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9pbml0aWFsU2xpY2VQYW5lbENvbGxhcHNlZEFwcGxpZWQgPSBmYWxzZTtcblxuICAvLyBEw6lsw6lndcOpcyB2ZXJzIF92aWV3IChjb25zZXJ2w6lzIHBvdXIgY29tcGF0aWJpbGl0w6kgdGVtcGxhdGUgc2FucyByZWZhY3RvcmluZyBIVE1MKVxuICBnZXQgX3N0YXRpY1NsaWNlc0Zvck1lbnUoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZyB9PiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc3RhdGljU2xpY2VzRm9yTWVudTsgfVxuICBnZXQgX2FjdGl2ZUR5bmFtaWNTbGljZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHM7IH1cbiAgZ2V0IF9hdmFpbGFibGVDb2x1bW5zRm9yRHluYW1pY1NsaWNlKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hdmFpbGFibGVGb3JEeW5hbWljOyB9XG4gIGdldCBfYWxsRHluYW1pY1NsaWNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYWxsRHluYW1pY0ZpZWxkczsgfVxuICBnZXQgX2FjdGl2ZVNsaWNlQnlMYWJlbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYWN0aXZlTGFiZWw7IH1cbiAgX3NsaWNlQnlNZW51SXRlbXM6IEFycmF5PHsgaXNTdGF0aWM6IGJvb2xlYW47IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nOyBjb2w/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+IH0+ID0gW107XG5cbiAgc2VhcmNoUXVlcnkgPSAnJztcbiAgZ2V0IGFjdGl2ZUdyb3VwQnlLZXkoKTogc3RyaW5nIHwgbnVsbCB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXk7IH1cbiAgX21hdFNvcnRBY3RpdmUgPSAnJztcbiAgX21hdFNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJycgPSAnJztcbiAgcHJpdmF0ZSBfYWN0aXZlU29ydDogVGFibGVTb3J0U3RhdGUgPSB7IGFjdGl2ZTogJycsIGRpcmVjdGlvbjogJycgfTtcbiAgcHJpdmF0ZSBfc29ydFN1YnNjcmliZWQ6IE1hdFNvcnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF90b3RhbEZpbHRlcmVkQ291bnQgPSAwO1xuXG4gIC8qKiBHZXN0aW9ubmFpcmUgZHUgbW9kZSBHcm91cCBCeSAow6l0YXQgY29sbGFwc2VkLCBwYWdpbmF0aW9uLCB0cmkgZGVzIGdyb3VwZXMpLiAqL1xuICByZWFkb25seSBfZ3JvdXBCeSA9IG5ldyBHcm91cEJ5TWFuYWdlcihcbiAgICAoKSA9PiB7IHRoaXMuX3Byb2plY3RDdXJyZW50UGFnZSgpOyB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7IH0sXG4gICAgKCkgPT4gdGhpcy5yZWZyZXNoVmlld01vZGVsKCksXG4gICk7XG5cbiAgLyoqIETDqWzDqWd1w6lzIHZlcnMgR3JvdXBCeU1hbmFnZXIgcG91ciBsYSBjb21wYXRpYmlsaXTDqSBkZXMgdGVtcGxhdGVzLiAqL1xuICBnZXQgZ3JvdXBQYWdlU2l6ZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VTaXplOyB9XG4gIHNldCBncm91cFBhZ2VTaXplKHY6IG51bWJlcikgeyB0aGlzLl9ncm91cEJ5Lmdyb3VwUGFnZVNpemUgPSB2OyB9XG4gIGdldCBncm91cFNvcnRPcmRlcigpOiAnYXNjJyB8ICdkZXNjJyB7IHJldHVybiB0aGlzLl9ncm91cEJ5Lmdyb3VwU29ydE9yZGVyOyB9XG4gIHNldCBncm91cFNvcnRPcmRlcih2OiAnYXNjJyB8ICdkZXNjJykgeyB0aGlzLl9ncm91cEJ5Lmdyb3VwU29ydE9yZGVyID0gdjsgfVxuXG4gIC8qKlxuICAgKiBTdGF0dXQgZGVzIGNvbG9ubmVzIGBsYXp5YCBkw6lqw6AgZGVtYW5kw6llcyAoYWJzZW50ZSA9IHBhcyBlbmNvcmUgZGVtYW5kw6llKS5cbiAgICogYGxvYWRpbmdgIGR1cmUganVzcXUnw6AgbGEgcsOpY2VwdGlvbiBkZSBub3V2ZWxsZXMgYGRhdGFgIDsgbGEgcsOpZsOpcmVuY2UgY2hhbmdlIMOgIGNoYXF1ZSBtaXNlIMOgIGpvdXIgKHBhbm5lYXUgZGUgc2xpY2VzKS5cbiAgICovXG4gIF9sYXp5Q29sdW1uU3RhdHVzID0gbmV3IE1hcDxzdHJpbmcsICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2Vycm9yJz4oKTtcbiAgcHJpdmF0ZSBfbGF6eUZsdXNoUXVldWVkID0gZmFsc2U7XG4gIC8qKiBMaWduZXMgcmV0b3VybsOpZXMgcGFyIGBjb25maWcubGF6eUxvYWRlcmAgOiBlbGxlcyByZW1wbGFjZW50IGBkYXRhYCBqdXNxdSdhdSBwcm9jaGFpbiBgZGF0YWAuICovXG4gIHByaXZhdGUgX2xvYWRlclJvd3M6IFRbXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sb2FkZXJTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2xhenlXYXJuZWQgPSBmYWxzZTtcbiAgLyoqIENvbG9ubmVzIGRlIGxhIGRlcm5pw6hyZSBjb25maWcgcsOpc29sdWUgOiDDqXZpdGUgZGUgcmVjb25zdHJ1aXJlIGxlIHRhYmxlYXUgKGV0IGQnYWdpdGVyIGxlIHBhbm5lYXUgZGUgc2xpY2VzKSDDoCBjaGFxdWUgcmFmcmHDrmNoaXNzZW1lbnQuICovXG4gIHByaXZhdGUgX2NvbHVtbnNTb3VyY2U/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W107XG4gIHByaXZhdGUgX2NvbHVtbnNOb3JtYWxpemVkPzogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25hbExhenlDb2x1bW5zID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+PigpO1xuICBwcml2YXRlIF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIF9lbCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG4gIHByaXZhdGUgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIF9wYWdpbmF0b3JJbnRsID0gaW5qZWN0KE1hdFBhZ2luYXRvckludGwpO1xuICBwcml2YXRlIF9pMThuUmF3ID0gaW5qZWN0KEpRVF9JMThOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF90YWJsZVNoZWxsUmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnVsbEl0ZW1zUGVyUGFnZUxhYmVsID0gdGhpcy5fcGFnaW5hdG9ySW50bC5pdGVtc1BlclBhZ2VMYWJlbDtcbiAgY29weUZlZWRiYWNrTWVzc2FnZSA9ICcnO1xuICBwcml2YXRlIF9jb3B5RmVlZGJhY2tUaW1lcj86IG51bWJlcjtcblxuICAvKiogTGFiZWxzIGRlIGzigJlpbnRlcmZhY2UuIEZ1c2lvbm7DqXMgZGVwdWlzIEpRVF9JMThOX0RFRkFVTFRTIGV0IGxlIHRva2VuIEpRVF9JMThOIGluamVjdMOpLiAqL1xuICByZWFkb25seSBpMThuOiBKcXRJMThuID0gdGhpcy5faTE4blJhd1xuICAgID8geyAuLi5KUVRfSTE4Tl9ERUZBVUxUUywgLi4udGhpcy5faTE4blJhdyB9XG4gICAgOiB7IC4uLkpRVF9JMThOX0RFRkFVTFRTIH07XG5cbiAgaXNHcm91cEhlYWRlciA9IChfOiBudW1iZXIsIHJvdzogYW55KTogYm9vbGVhbiA9PiByb3dbR1JPVVBfSEVBREVSX01BUktFUl0gPT09IHRydWU7XG5cbiAgLyoqIFJldG91cm5lIHRydWUgc2kgbGEgbGlnbmUgZGUgZ3JvdXBlIGVzdCB1bmUgbGlnbmUgbm9ybWFsZSAobmkgbGF6eSwgbmkgdG9vLW1hbnkpLiAqL1xuICBpc05vcm1hbEdyb3VwUm93KHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gcm93W1JPV19HUk9VUF9LRVldO1xuICAgIHJldHVybiBrZXkgIT09IEdST1VQX0tFWV9MQVpZX0xPQURJTkcgJiYga2V5ICE9PSBHUk9VUF9LRVlfTEFaWV9FUlJPUiAmJiBrZXkgIT09IEdST1VQX0tFWV9UT09fTUFOWTtcbiAgfVxuICBpc0dyb3VwUm93TG9hZGluZyhyb3c6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldID09PSBHUk9VUF9LRVlfTEFaWV9MT0FESU5HOyB9XG4gIGlzR3JvdXBSb3dFcnJvcihyb3c6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldID09PSBHUk9VUF9LRVlfTEFaWV9FUlJPUjsgfVxuICBpc0dyb3VwUm93VG9vTWFueShyb3c6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldID09PSBHUk9VUF9LRVlfVE9PX01BTlk7IH1cblxuICByZXRyeUdyb3VwQnlDb2x1bW4oZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJldHJ5TGF6eUNvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKiBHw6hyZSBsZSBjbGljIHN1ciB1bmUgbGlnbmUgZCdlbi10w6p0ZSBkZSBncm91cGUgKG5vLW9wIHBvdXIgbGVzIMOpdGF0cyBzcMOpY2lhdXgpLiAqL1xuICBvbkdyb3VwSGVhZGVyQ2xpY2socm93OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNOb3JtYWxHcm91cFJvdyhyb3cpKSByZXR1cm47XG4gICAgdGhpcy50b2dnbGVHcm91cENvbGxhcHNlKHJvd1tST1dfR1JPVVBfS0VZXSk7XG4gIH1cblxuICAvKiogR2VzdGlvbm5haXJlIGV4cG9ydCBDU1YuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9ydCA9IG5ldyBFeHBvcnRNYW5hZ2VyPFQ+KFxuICAgICgpID0+IHRoaXMuX2FsbEZpbHRlcmVkUm93cyxcbiAgICAoKSA9PiB0aGlzLmFjdGl2ZUZpZWxkcyxcbiAgICAoKSA9PiB0aGlzLnJlc29sdmVkQ29uZmlnLmV4cG9ydCxcbiAgICAoY29sLCByb3csIGlkeCkgPT4gdGhpcy5fcmVzb2x2ZUV4cG9ydFZhbHVlKGNvbCwgcm93LCBpZHgpLFxuICApO1xuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGVcblxuICBwYWdlU2l6ZSA9IDU7XG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDIwXTtcbiAgcGFnZVNpemVPcHRpb25zR3JvdXBCeTogbnVtYmVyW10gPSBbNSwgMTAsIDIwXTtcblxuICBkcmFnZ2VkQ29sdW1uS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZHJhZ092ZXJDb2x1bW5LZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8vIOKUgOKUgCBNb2RlIMOpZGl0aW9uIChQcsOpZsOpcmVuY2VzKVxuICAvKiogVnJhaSBxdWFuZCBsZSBtb2RlIMOpZGl0aW9uIGVzdCBhY3RpZiAocmVzaXplICsgZHJhZyBjb2xvbm5lcywgaW50ZXJhY3Rpb25zIGTDqXNhY3RpdsOpZXMpLiAqL1xuICBfZWRpdE1vZGUgPSBmYWxzZTtcbiAgLyoqIExhcmdldXJzIGRlIGNvbG9ubmVzIHBlcnNvbm5hbGlzw6llcyBwYXIgbCd1dGlsaXNhdGV1ciAoY2zDqSDihpIgcHgpLiAqL1xuICBfY29sdW1uV2lkdGhzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIC8qKiBNZXNzYWdlIGRlIGZlZWRiYWNrIGFwcsOocyBzYXZlL2NsZWFyLiBgbnVsbGAgPSBwYXMgZGUgbWVzc2FnZS4gKi9cbiAgX3ByZWZlcmVuY2VzTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBWcmFpIHNpIHVuZSBjb25maWd1cmF0aW9uIGVzdCBzYXV2ZWdhcmTDqWUgcG91ciBjZSB0YWJsZWF1LiAqL1xuICBfaGFzU2F2ZWRDb25maWcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcHJlZmVyZW5jZXNNYW5hZ2VyOiBUYWJsZVByZWZlcmVuY2VzTWFuYWdlciB8IG51bGwgPSBudWxsO1xuICAvKiogdHJ1ZSB1bmUgZm9pcyBxdWUgbGUgZ3JvdXAtYnkgcGFyIGTDqWZhdXQgYSDDqXTDqSBpbml0aWFsaXPDqSAow6l2aXRlIGRlIHJlY29uZmlndXJlciBHcm91cEJ5TWFuYWdlciDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBkb25uw6llcykuICovXG4gIHByaXZhdGUgX2RlZmF1bHRHcm91cEJ5QXBwbGllZCA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXNpemVTdGF0ZTogeyBrZXk6IHN0cmluZzsgc3RhcnRYOiBudW1iZXI7IHN0YXJ0V2lkdGg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBEeW5hbWljIHNsaWNlIGtleXMgw6AgcmVzdGF1cmVyIGFwcsOocyBuZ0FmdGVyVmlld0luaXQgKHNsaWNlUGFuZWxSZWYgcGFzIGVuY29yZSBkaXNwbykuICovXG4gIHByaXZhdGUgX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICAvKiogRmlsdHJlcyBkZSBzbGljZSDDoCByZXN0YXVyZXIgYXByw6hzIG5nQWZ0ZXJWaWV3SW5pdCAoc2xpY2VQYW5lbFJlZiBwYXMgZW5jb3JlIGRpc3BvKS4gKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ1NsaWNlRmlsdGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZXNvbHZlZENvbmZpZzogVGFibGVQcm92aWRlcjxUPiA9IHsgY29sdW1uczogW10gfTtcbiAgcHJpdmF0ZSBfY29sdW1uTWFwOiBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBfcmVzb2x2ZWREYXRhOiBUW10gPSBbXTtcbiAgcHJpdmF0ZSBfcHJlc2VydmVQYWdlSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYXN0Q29uZmlnQ2xlYXJTZWFyY2hJbnB1dDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2luaXRpYWxTZWFyY2hRdWVyeUFwcGxpZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbGFzdEluaXRpYWxTZWFyY2hRdWVyeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIFNldWlsIGF1LWRlbMOgIGR1cXVlbCBsZSByZW5kdSBncm91cMOpIGVzdCBibG9xdcOpIHBvdXIgcHJvdMOpZ2VyIGxlIG5hdmlnYXRldXJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFYX0dST1VQX0NPVU5UID0gNTAwO1xuXG4gIC8vIOKUgOKUgCBPcHRpbWlzYXRpb24gcGVyZm9ybWFuY2VcbiAgcHJpdmF0ZSBfYWxsRmlsdGVyZWRSb3dzOiBUW10gPSBbXTtcbiAgcHJpdmF0ZSBfcGFnaW5hdG9yU3Vic2NyaWJlZDogTWF0UGFnaW5hdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIENhY2hlIGdyb3VwQnkg4oCUIGludmFsaWTDqSBkw6hzIHF1ZSByb3dzL2tleS90cmkgY2hhbmdlbnQuICovXG4gIHByaXZhdGUgX2dyb3VwQ2FjaGU6IEdyb3VwQnlDYWNoZTxUPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9wZW5kaW5nUmVuZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZlcnJlZFRpbWVycyA9IG5ldyBTZXQ8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+KCk7XG4gIHByaXZhdGUgX2hlYWRlck1lYXN1cmVGcmFtZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2Rlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIF9jb25maWdIaWRkZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblxuICAvKiogQ2zDqXMgZGVzIGNvbG9ubmVzIHZpc2libGVzIGR1IGRlcm5pZXIgw6ltaXNzaW9uIGNvbHVtbnNDaGFuZ2UgKHBvdXIgw6l2aXRlciBsZXMgw6ltaXNzaW9ucyBkdXBsaXF1ZW1lbnQpLiAqL1xuICBwcml2YXRlIF9wcmV2Q29sdW1uS2V5czogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIGVtaXRDb2x1bW5zQ2hhbmdlSWZOZWVkZWQoKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dEtleXMgPSBbLi4udGhpcy5yZW5kZXJlZENvbHVtbnNdO1xuICAgIGlmIChuZXh0S2V5cy5sZW5ndGggPT09IHRoaXMuX3ByZXZDb2x1bW5LZXlzLmxlbmd0aFxuICAgICAgJiYgbmV4dEtleXMuZXZlcnkoKGtleSwgaW5kZXgpID0+IGtleSA9PT0gdGhpcy5fcHJldkNvbHVtbktleXNbaW5kZXhdKSkgcmV0dXJuO1xuICAgIHRoaXMuX3ByZXZDb2x1bW5LZXlzID0gbmV4dEtleXM7XG4gICAgdGhpcy5jb2x1bW5zQ2hhbmdlLmVtaXQobmV4dEtleXMpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFDaGFuZ2VkID0gISEoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2RhdGFTb3VyY2UnXSk7XG4gICAgaWYgKGRhdGFDaGFuZ2VkKSB0aGlzLl9vbk5ld0RhdGEoKTtcbiAgICBpZiAoY2hhbmdlc1snbGF6eUVycm9yJ10pIHRoaXMuX2FwcGx5TGF6eUVycm9yKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddKSB7XG4gICAgICB0aGlzLmFwcGx5Q29uZmlnU2VhcmNoUmVzZXQoKTtcbiAgICAgIHRoaXMuYXBwbHlJbml0aWFsU2VhcmNoUXVlcnkoY2hhbmdlc1snY29uZmlnJ10uZmlyc3RDaGFuZ2UpO1xuICAgICAgdGhpcy5faW52YWxpZGF0ZU9yZ2FuaXplckNvbmZpZygpOyAvLyBsZXMgY29sb25uZXMgb250IHB1IGNoYW5nZXJcbiAgICB9XG4gICAgaWYgKGRhdGFDaGFuZ2VkICYmIHRoaXMuX2xhenlDb2x1bW5TdGF0dXMuc2l6ZSAmJiB0aGlzLl9yZXNvbHZlZERhdGEubGVuZ3RoKSB0aGlzLl9ydW5MYXp5TG9hZGVyKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVidWlsZENlbGxEZWZNYXAoKTtcbiAgICB0aGlzLl9jZWxsRGVmcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlYnVpbGRDZWxsRGVmTWFwKCk7XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdHRhY2hQYWdpbmF0b3IoKTtcbiAgICB0aGlzLmF0dGFjaFNvcnQoKTtcbiAgICB0aGlzLl9tZWFzdXJlSGVhZGVySGVpZ2h0KCk7XG4gICAgdGhpcy5fb2JzZXJ2ZVRhYmxlU2hlbGxXaWR0aCgpO1xuICAgIHRoaXMuX2FwcGx5UGVuZGluZ0R5bmFtaWNTbGljZUtleXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVUYWJsZVNoZWxsV2lkdGgoKTogdm9pZCB7XG4gICAgY29uc3QgdGFibGVTaGVsbCA9IHRoaXMudGFibGVTaGVsbFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIXRhYmxlU2hlbGwgfHwgdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gICAgdGhpcy5fdGFibGVTaGVsbFJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChbZW50cnldKSA9PiB7XG4gICAgICBjb25zdCBjb21wYWN0ID0gZW50cnkuY29udGVudFJlY3Qud2lkdGggPCA2NjA7XG4gICAgICBjb25zdCBsYWJlbCA9IGNvbXBhY3QgPyAnUGFyIHBhZ2UgOicgOiB0aGlzLl9mdWxsSXRlbXNQZXJQYWdlTGFiZWw7XG4gICAgICBpZiAodGhpcy5fcGFnaW5hdG9ySW50bC5pdGVtc1BlclBhZ2VMYWJlbCA9PT0gbGFiZWwpIHJldHVybjtcblxuICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRvckludGwuaXRlbXNQZXJQYWdlTGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5fcGFnaW5hdG9ySW50bC5jaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5fdGFibGVTaGVsbFJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFibGVTaGVsbCk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVBlbmRpbmdEeW5hbWljU2xpY2VLZXlzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1BlbmRpbmdEeW5hbWljID0gISF0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cztcbiAgICBjb25zdCBoYXNQZW5kaW5nRmlsdGVycyA9ICEhdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycztcbiAgICBpZiAoIWhhc1BlbmRpbmdEeW5hbWljICYmICFoYXNQZW5kaW5nRmlsdGVycykgcmV0dXJuO1xuXG4gICAgY29uc3QgYWxsQ29scyA9IHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXTtcbiAgICBjb25zdCBrZXlzID0gaGFzUGVuZGluZ0R5bmFtaWMgPyBbLi4udGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMhXSA6IFtdO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID8geyAuLi50aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzIH0gOiBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gbnVsbDtcblxuICAgIHRoaXMuX3NjaGVkdWxlRGVmZXJyZWQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc29sdmVkRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKGZpbHRlcnMpIHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cyA9IFsuLi5rZXlzXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGFsbENvbHMuZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICBpZiAoY29sKSB0aGlzLmFkZER5bmFtaWNTbGljZShjb2wpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlsdGVycyAmJiB0aGlzLnNsaWNlUGFuZWxSZWYpIHtcbiAgICAgICAgdGhpcy5zbGljZVBhbmVsUmVmLnJlc3RvcmVGaWx0ZXJzKGZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLl90YWJsZVNoZWxsUmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAodGhpcy5fY29weUZlZWRiYWNrVGltZXIgIT09IHVuZGVmaW5lZCkgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9jb3B5RmVlZGJhY2tUaW1lcik7XG4gICAgaWYgKHRoaXMuX3BlbmRpbmdSZW5kZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wZW5kaW5nUmVuZGVyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3ByZWZlcmVuY2VzTWVzc2FnZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIpO1xuICAgIH1cbiAgICB0aGlzLl9kZWZlcnJlZFRpbWVycy5mb3JFYWNoKHRpbWVyID0+IGNsZWFyVGltZW91dCh0aW1lcikpO1xuICAgIHRoaXMuX2RlZmVycmVkVGltZXJzLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuX2hlYWRlck1lYXN1cmVGcmFtZSAhPT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5faGVhZGVyTWVhc3VyZUZyYW1lKTtcbiAgICAvLyBOZXR0b2llIHVuIMOpdmVudHVlbCByZXNpemUgZW4gY291cnMgKGxpc3RlbmVycyB3aW5kb3cgbm9uIHJldGlyw6lzKVxuICAgIHRoaXMuX3Jlc2l6ZVN0YXRlID0gbnVsbDtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9vcmdhbml6ZXIuZGVzdHJveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWVhc3VyZUhlYWRlckhlaWdodCgpOiB2b2lkIHtcbiAgICBjb25zdCBtZWFzdXJlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgY29uc3QgaGVhZGVyUm93ID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0ci5tYXQtbWRjLWhlYWRlci1yb3cnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChoZWFkZXJSb3cpIHtcbiAgICAgICAgY29uc3QgaCA9IGhlYWRlclJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIGlmIChoID4gMCkge1xuICAgICAgICAgIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWN0dWFsLWhlYWRlci1oZWlnaHQnLCBoICsgJ3B4Jyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBIZWFkZXIgcGFzIGVuY29yZSByZW5kdSAoZXg6IGxhenkgQW5ndWxhciBNYXRlcmlhbCksIG9uIHLDqWVzc2FpZSBhcHLDqHMgbGUgcHJvY2hhaW4gZnJhbWVcbiAgICAgIHRoaXMuX3NjaGVkdWxlSGVhZGVyTWVhc3VyZShtZWFzdXJlKTtcbiAgICB9O1xuICAgIHRoaXMuX3NjaGVkdWxlSGVhZGVyTWVhc3VyZShtZWFzdXJlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NjaGVkdWxlSGVhZGVyTWVhc3VyZShtZWFzdXJlOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX2hlYWRlck1lYXN1cmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2hlYWRlck1lYXN1cmVGcmFtZSA9IG51bGw7XG4gICAgICAgIG1lYXN1cmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2NoZWR1bGVEZWZlcnJlZChjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9kZWZlcnJlZFRpbWVycy5kZWxldGUodGltZXIpO1xuICAgICAgaWYgKCF0aGlzLl9kZXN0cm95ZWQpIGNhbGxiYWNrKCk7XG4gICAgfSwgMCk7XG4gICAgdGhpcy5fZGVmZXJyZWRUaW1lcnMuYWRkKHRpbWVyKTtcbiAgfVxuXG4gIHByaXZhdGUgX29yZ2FuaXplckNvbmZpZ0NhY2hlOiBPcmdhbml6ZXJDb25maWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfaW52YWxpZGF0ZU9yZ2FuaXplckNvbmZpZygpOiB2b2lkIHsgdGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGUgPSBudWxsOyB9XG4gIGdldCBvcmdhbml6ZXJDb25maWcoKTogT3JnYW5pemVyQ29uZmlnIHtcbiAgICBpZiAodGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGUpIHJldHVybiB0aGlzLl9vcmdhbml6ZXJDb25maWdDYWNoZTtcbiAgICBjb25zdCBhbGxDb2xzID0gWy4uLnRoaXMuX29yZ2FuaXplci5tZW51QmFzZUZpZWxkcywgLi4udGhpcy5fb3JnYW5pemVyLm1lbnVPcHRpb25hbEZpZWxkc107XG4gICAgY29uc3Qgb3JnYW5pemVyT3B0aW9ucyA9IHRoaXMucmVzb2x2ZWRDb25maWcub3JnYW5pemVyO1xuICAgIHRoaXMuX29yZ2FuaXplckNvbmZpZ0NhY2hlID0ge1xuICAgICAgZmllbGRzOiB0aGlzLl9vcmdhbml6ZXIuc2hvd0ZpZWxkcyA/IGFsbENvbHMubWFwKGMgPT4gKHtcbiAgICAgICAgaWQ6IGMua2V5LFxuICAgICAgICBsYWJlbDogdGhpcy5jb2xMYWJlbChjKSxcbiAgICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgICBzdGF0ZTogJ3JlYWR5JyBhcyBjb25zdCxcbiAgICAgIH0pKSA6IHVuZGVmaW5lZCxcbiAgICAgIGdyb3VwczogdGhpcy5fb3JnYW5pemVyLnNob3dHcm91cEJ5U2VjdGlvbiA/IHRoaXMuX29yZ2FuaXplci5ncm91cEJ5RmllbGRzLm1hcChjID0+ICh7XG4gICAgICAgIGlkOiBjLmtleSxcbiAgICAgICAgbGFiZWw6IHRoaXMuY29sTGFiZWwoYyksXG4gICAgICAgIGljb246IGMuaWNvbixcbiAgICAgIH0pKSA6IHVuZGVmaW5lZCxcbiAgICAgIHNsaWNlczogdGhpcy5fb3JnYW5pemVyLnNob3dTbGljZUJ5U2VjdGlvbiA/IHRoaXMuX3NsaWNlQnlNZW51SXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgaWQ6IGl0ZW0ua2V5LFxuICAgICAgICBsYWJlbDogaXRlbS50aXRsZSxcbiAgICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgfSkpIDogdW5kZWZpbmVkLFxuICAgICAgYnV0dG9uTGFiZWw6IG9yZ2FuaXplck9wdGlvbnM/LmJ1dHRvbkxhYmVsLFxuICAgICAgYnV0dG9uSWNvbjogb3JnYW5pemVyT3B0aW9ucz8uYnV0dG9uSWNvbixcbiAgICAgIHNob3dCdXR0b25JY29uOiBvcmdhbml6ZXJPcHRpb25zPy5zaG93QnV0dG9uSWNvbixcbiAgICAgIHNob3dFeHBvcnQ6IHRoaXMuc2hvd0V4cG9ydEJ1dHRvbixcbiAgICAgIG9uRXhwb3J0OiAoKSA9PiB0aGlzLm9uRXhwb3J0KCksXG4gICAgICBzaG93UHJlZmVyZW5jZXM6IHRoaXMuc2hvd1ByZWZlcmVuY2VzTWVudSxcbiAgICAgIGhhc1NhdmVkUHJlZmVyZW5jZXM6IHRoaXMuaGFzU2F2ZWRQcmVmZXJlbmNlcyxcbiAgICAgIG9uUHJlZmVyZW5jZXNFZGl0OiAoKSA9PiB0aGlzLmVudGVyRWRpdE1vZGUoKSxcbiAgICAgIG9uUHJlZmVyZW5jZXNTYXZlOiAoKSA9PiB0aGlzLnNhdmVQcmVmZXJlbmNlcygpLFxuICAgICAgb25QcmVmZXJlbmNlc0NsZWFyOiAoKSA9PiB0aGlzLmNsZWFyUHJlZmVyZW5jZXMoKSxcbiAgICAgIHNob3dBY3Rpb25zOiB0aGlzLnJlc29sdmVkQ29uZmlnLnNob3dBY3Rpb25zID09PSB0cnVlLFxuICAgICAgb25Db3B5VmlzdWFsOiB0aGlzLnJlc29sdmVkQ29uZmlnLm9uQ29weVZpc3VhbCA/PyAoKCkgPT4gdGhpcy5jb3B5VmlzdWFsU25hcHNob3QoKSksXG4gICAgICBvblRvZ2dsZUZ1bGxzY3JlZW46IHRoaXMucmVzb2x2ZWRDb25maWcub25Ub2dnbGVGdWxsc2NyZWVuID8/ICh0aGlzLmZ1bGxzY3JlZW5TdXBwb3J0ZWQgPyAoKSA9PiB0aGlzLnRvZ2dsZUZ1bGxzY3JlZW4oKSA6IHVuZGVmaW5lZCksXG4gICAgICBpc0Z1bGxzY3JlZW46IHRoaXMuX2lzRnVsbHNjcmVlbixcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXJDb25maWdDYWNoZTtcbiAgfVxuXG4gIGdldCBvcmdhbml6ZXJIaWRlTWVudVZhbHVlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5vcmdhbml6ZXI/LmhpZGVNZW51VmFsdWVzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IG9yZ2FuaXplclN0YXRlKCk6IE9yZ2FuaXplclN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZUZpZWxkczogdGhpcy52aXNpYmxlQ29sdW1ucy5tYXAoYyA9PiBjLmtleSksXG4gICAgICBzZWxlY3RlZEdyb3VwQnk6IHRoaXMuYWN0aXZlR3JvdXBCeUtleSA/PyB1bmRlZmluZWQsXG4gICAgICBzZWxlY3RlZFNsaWNlczogdGhpcy5fc2xpY2VCeU1lbnVJdGVtc1xuICAgICAgICAuZmlsdGVyKGkgPT4gdGhpcy5pc1NsaWNlTWVudUl0ZW1BY3RpdmUoaSkpXG4gICAgICAgIC5tYXAoaSA9PiBpLmtleSksXG4gICAgfTtcbiAgfVxuXG4gIG9uT3JnYW5pemVyVmlld0NoYW5nZShldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2ZpZWxkVG9nZ2xlZCcpIHtcbiAgICAgIGNvbnN0IGFsbENvbHMgPSBbLi4udGhpcy5fb3JnYW5pemVyLm1lbnVCYXNlRmllbGRzLCAuLi50aGlzLl9vcmdhbml6ZXIubWVudU9wdGlvbmFsRmllbGRzXTtcbiAgICAgIGNvbnN0IG5ld1Zpc2libGUgPSBuZXcgU2V0KGV2ZW50LnN0YXRlLnZpc2libGVGaWVsZHMgPz8gW10pO1xuICAgICAgZm9yIChjb25zdCBjb2wgb2YgYWxsQ29scykge1xuICAgICAgICBjb25zdCBpc05vd1Zpc2libGUgPSBuZXdWaXNpYmxlLmhhcyhjb2wua2V5KTtcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5WaXNpYmxlKGNvbC5rZXkpICE9PSBpc05vd1Zpc2libGUpIHtcbiAgICAgICAgICB0aGlzLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZShjb2wsIGlzTm93VmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdncm91cEJ5U2VsZWN0ZWQnKSB7XG4gICAgICBjb25zdCBuZXdLZXkgPSBldmVudC5zdGF0ZS5zZWxlY3RlZEdyb3VwQnkgPz8gbnVsbDtcbiAgICAgIHRoaXMub25Hcm91cEJ5Q2hhbmdlKG5ld0tleSA9PT0gdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID8gbnVsbCA6IG5ld0tleSk7XG4gICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnc2xpY2VTZWxlY3RlZCcpIHtcbiAgICAgIGNvbnN0IHByZXZTbGljZXMgPSBuZXcgU2V0KHRoaXMub3JnYW5pemVyU3RhdGUuc2VsZWN0ZWRTbGljZXMgPz8gW10pO1xuICAgICAgY29uc3QgbmV4dFNsaWNlcyA9IG5ldyBTZXQoZXZlbnQuc3RhdGUuc2VsZWN0ZWRTbGljZXMgPz8gW10pO1xuICAgICAgY29uc3QgY2xpY2tlZElkID0gWy4uLnByZXZTbGljZXNdLmZpbmQoaWQgPT4gIW5leHRTbGljZXMuaGFzKGlkKSlcbiAgICAgICAgPz8gWy4uLm5leHRTbGljZXNdLmZpbmQoaWQgPT4gIXByZXZTbGljZXMuaGFzKGlkKSk7XG4gICAgICBpZiAoY2xpY2tlZElkKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zbGljZUJ5TWVudUl0ZW1zLmZpbmQoaSA9PiBpLmtleSA9PT0gY2xpY2tlZElkKTtcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMub25TbGljZU1lbnVJdGVtQ2xpY2soaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLnRpdGxlID8/ICcnO1xuICB9XG5cbiAgZ2V0IHNob3dUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVkQ29uZmlnLnRpdGxlO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRmllbGRzO1xuICB9XG5cbiAgZ2V0IHNob3dTZWFyY2hCYXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLnNlYXJjaD8uZW5hYmxlZCA9PT0gdHJ1ZTsgfVxuICBnZXQgc2hvd1ZpZXdCdXR0b24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZW5hYmxlZCB8fCB0aGlzLnNob3dFeHBvcnRCdXR0b24gfHwgdGhpcy5zaG93UHJlZmVyZW5jZXNNZW51OyB9XG4gIGdldCBzaG93T3JnYW5pemVyQnV0dG9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmVuYWJsZWQgfHwgdGhpcy5zaG93RXhwb3J0QnV0dG9uIHx8IHRoaXMuc2hvd1ByZWZlcmVuY2VzTWVudTsgfVxuICBnZXQgc2hvd1NsaWNlRXhwYW5kQnRuKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fc2hvd1NsaWNlUGFuZWwgJiYgdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCAmJiB0aGlzLl9zbGljZVNob3dUb2dnbGU7IH1cbiAgZ2V0IHNob3dFeHBvcnRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcuZXhwb3J0Py5lbmFibGVkID09PSB0cnVlO1xuICB9XG4gIGdldCBzaG93UHJlZmVyZW5jZXNNZW51KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLnByZWZlcmVuY2VzPy5lbmFibGVkID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzRGVmYXVsdEdyb3VwQnlBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZUdyb3VwQnlLZXkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID09PSB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRHcm91cEJ5O1xuICB9XG5cbiAgZ2V0IGhhc1NhdmVkUHJlZmVyZW5jZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oYXNTYXZlZENvbmZpZzsgfVxuXG4gIGdldCBzaG93VG9vbGJhcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc2hvd1NlYXJjaEJhciB8fCB0aGlzLnNob3dWaWV3QnV0dG9uIHx8IHRoaXMuc2hvd1NsaWNlRXhwYW5kQnRuOyB9XG4gIGdldCBmdWxsc2NyZWVuU3VwcG9ydGVkKCk6IGJvb2xlYW4geyByZXR1cm4gRnVsbHNjcmVlbk1hbmFnZXIuaXNTdXBwb3J0ZWQodGhpcy5fZWwubmF0aXZlRWxlbWVudCk7IH1cblxuICBhc3luYyB0b2dnbGVGdWxsc2NyZWVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBGdWxsc2NyZWVuTWFuYWdlci50b2dnbGUodGhpcy5fZWwubmF0aXZlRWxlbWVudCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLl9pc0Z1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5faW52YWxpZGF0ZU9yZ2FuaXplckNvbmZpZygpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBDcsOpZSB1biBzbmFwc2hvdCBhdXRvbm9tZSBldCBsZSBwbGFjZSBkYW5zIGxlIHN0b2NrYWdlIHBhcnRhZ8OpLiAqL1xuICBjb3B5VmlzdWFsU25hcHNob3QobGFiZWw/OiBzdHJpbmcpOiBWaXN1YWxTbmFwc2hvdCB8IG51bGwge1xuICAgIGNvbnN0IHNuYXBzaG90TGFiZWwgPSBsYWJlbCA/PyAodGhpcy50aXRsZSB8fCAnVGFibGVhdScpO1xuICAgIGlmICghc25hcHNob3RMYWJlbD8udHJpbSgpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBWaXN1YWxTbmFwc2hvdFN0b3JhZ2UoKS5jcmVhdGUodGhpcy5jcmVhdGVWaXN1YWxTbmFwc2hvdChzbmFwc2hvdExhYmVsLnRyaW0oKSkpO1xuICAgIHRoaXMudmlzdWFsQ29waWVkLmVtaXQoc25hcHNob3QpO1xuICAgIHRoaXMuc2hvd0NvcHlGZWVkYmFjaygpO1xuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0NvcHlGZWVkYmFjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb3B5RmVlZGJhY2suZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcbiAgICB0aGlzLmNvcHlGZWVkYmFja01lc3NhZ2UgPSB0aGlzLmNvcHlGZWVkYmFjay5tZXNzYWdlIHx8ICdDb3Bpw6knO1xuICAgIGlmICh0aGlzLl9jb3B5RmVlZGJhY2tUaW1lciAhPT0gdW5kZWZpbmVkKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyKTtcbiAgICB0aGlzLl9jb3B5RmVlZGJhY2tUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuY29weUZlZWRiYWNrTWVzc2FnZSA9ICcnLCB0aGlzLmNvcHlGZWVkYmFjay5kdXJhdGlvbk1zID8/IDIyMDApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6ZnVsbHNjcmVlbmNoYW5nZScpXG4gIG9uRnVsbHNjcmVlbkNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0Z1bGxzY3JlZW4gPSBGdWxsc2NyZWVuTWFuYWdlci5pc0FjdGl2ZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZXhwYW5kU2xpY2VQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWNlUGFuZWxSZWY/LnRvZ2dsZVBhbmVsKCk7XG4gIH1cbiAgZ2V0IHNob3dGaWVsZHMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2hvd0ZpZWxkczsgfVxuICBnZXQgc2hvd0dyb3VwQnlTZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNob3dHcm91cEJ5U2VjdGlvbjsgfVxuXG4gIGdldCBmaWx0ZXJlZFJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlR3JvdXBCeUtleSA/IHRoaXMuX3RvdGFsRmlsdGVyZWRDb3VudCA6IHRoaXMuX2FsbEZpbHRlcmVkUm93cy5sZW5ndGg7XG4gIH1cblxuICBnZXQgYWN0aXZlR3JvdXBCeUxhYmVsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuYWN0aXZlR3JvdXBCeUxhYmVsOyB9XG5cbiAgZ2V0IHRvdGFsQ29sdW1uQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci50b3RhbEZpZWxkQ291bnQ7IH1cblxuICBnZXQgYWN0aXZlU2xpY2VCeUxhYmVsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVMYWJlbDsgfVxuXG4gIGdldCBhY3RpdmVEeW5hbWljU2xpY2VDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzOyB9XG5cbiAgcmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWNlUGFuZWxSZWY/LnJlbW92ZUR5bmFtaWNTbGljZUJ5S2V5KGtleSk7XG4gIH1cblxuICBnZXQgZ3JvdXBCeUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5ncm91cEJ5RmllbGRzOyB9XG5cbiAgY29sTGFiZWwoY29sOiB7IGtleTogc3RyaW5nOyBoZWFkZXI/OiBzdHJpbmcgfSk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZmllbGRMYWJlbChjb2wpOyB9XG5cbiAgLyoqIFRyYWR1aXQgbGVzIG9wdGlvbnMgZGUgbGEgdnVlIHRhYmxlIHZlcnMgY2VsbGVzIGRlIGwnT3JnYW5pemVyLiAqL1xuICBwcml2YXRlIF9vcmdhbml6ZXJWaWV3Q29uZmlnKCk6IE9yZ2FuaXplclZpZXdPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2aWV3ID0gdGhpcy5yZXNvbHZlZENvbmZpZy52aWV3O1xuICAgIGlmICghdmlldykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlZDogdmlldy5lbmFibGVkLFxuICAgICAgZW5hYmxlRmllbGRSZW1vdmFsOiB2aWV3LmVuYWJsZUNvbHVtblJlbW92YWwsXG4gICAgICBlbmFibGVGaWVsZERyYWdEcm9wOiB2aWV3LmVuYWJsZUNvbHVtbkRyYWdEcm9wLFxuICAgIH07XG4gIH1cblxuICAvKiogTmUgY2hhbmdlIGxhIHLDqWbDqXJlbmNlIHF1ZSBzaSBsZSBjb250ZW51IGNoYW5nZSA6IGxlIHBhbm5lYXUgcmVjYWxjdWxlIHRvdXQgw6AgY2hhcXVlIG5vdXZlbGxlIHLDqWbDqXJlbmNlLiAqL1xuICBwcml2YXRlIF9zZXRTbGljZUNvbmZpZ3MobmV4dDogU2xpY2VDb25maWc8VD5bXSk6IHZvaWQge1xuICAgIGNvbnN0IHNhbWUgPSBuZXh0Lmxlbmd0aCA9PT0gdGhpcy5fc2xpY2VDb25maWdzLmxlbmd0aCAmJiBuZXh0LmV2ZXJ5KChzbGljZSwgaSkgPT4gc2xpY2UgPT09IHRoaXMuX3NsaWNlQ29uZmlnc1tpXSk7XG4gICAgaWYgKCFzYW1lKSB0aGlzLl9zbGljZUNvbmZpZ3MgPSBuZXh0O1xuICB9XG5cbiAgb25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcnVuU2VhcmNoKCk7XG4gICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaFF1ZXJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgX3J1blNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcmVzZXJ2ZVBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgICB0aGlzLnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEdyb3VwQnlBbmRFbWl0KGtleTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzS2V5ID0gdGhpcy5fb3JnYW5pemVyLmdyb3VwQnkuYWN0aXZlS2V5ID8/IG51bGw7XG4gICAgdGhpcy5fb3JnYW5pemVyLnNldEdyb3VwQnkoa2V5KTtcbiAgICBjb25zdCBuZXh0S2V5ID0gdGhpcy5fb3JnYW5pemVyLmdyb3VwQnkuYWN0aXZlS2V5ID8/IG51bGw7XG4gICAgaWYgKHByZXZpb3VzS2V5ICE9PSBuZXh0S2V5KSB0aGlzLmdyb3VwQnlDaGFuZ2UuZW1pdChuZXh0S2V5KTtcbiAgfVxuXG4gIG9uR3JvdXBCeUNoYW5nZShrZXk6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnNldEdyb3VwQnlBbmRFbWl0KGtleSk7XG4gICAgdGhpcy5fZ3JvdXBCeS5zZXREZWZhdWx0Q29sbGFwc2VkKGtleSAhPT0gbnVsbCk7XG4gICAgdGhpcy5fZ3JvdXBCeS5yZXNldCgpO1xuICAgIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRHcm91cFBhZ2VTaXplKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgdGhpcy5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICAgIGlmICgha2V5KSB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5fc2NoZWR1bGVEZWZlcnJlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGVCb2R5U2Nyb2xsUmVmPy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgb25Hcm91cFBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2dyb3VwQnkub25Hcm91cFBhZ2VTaXplQ2hhbmdlKE51bWJlcihzaXplKSk7XG4gIH1cblxuICBvbkdyb3VwU29ydFRvZ2dsZShkaXI6ICdhc2MnIHwgJ2Rlc2MnKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS5vbkdyb3VwU29ydFRvZ2dsZShkaXIsIChrZXkpID0+IHtcbiAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLl9zY2hlZHVsZURlZmVycmVkKCgpID0+IHRoaXMuc2Nyb2xsVG9Hcm91cEhlYWRlcihrZXkpKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXp5Q29sdW1uU3RhdHVzKGtleTogc3RyaW5nKTogJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InIHtcbiAgICByZXR1cm4gdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5nZXQoa2V5KSA/PyAnaWRsZSc7XG4gIH1cblxuICBnZXRMYXp5UmVuZGVyVHlwZShyb3dWYWx1ZTogYW55KTogJ2xvYWRpbmcnIHwgJ2Vycm9yJyB8ICd2YWx1ZScge1xuICAgIGlmIChyb3dWYWx1ZSA9PT0gTEFaWV9MT0FESU5HX1ZBTFVFKSByZXR1cm4gJ2xvYWRpbmcnO1xuICAgIGlmIChyb3dWYWx1ZSA9PT0gTEFaWV9FUlJPUl9WQUxVRSkgcmV0dXJuICdlcnJvcic7XG4gICAgcmV0dXJuICd2YWx1ZSc7XG4gIH1cblxuICAvKiogUmVsYW5jZSBsYSBkZW1hbmRlIGRlcyBjb2xvbm5lcyBlbiBlcnJldXIgOiBsZSBjaGFyZ2V1ciBlc3QgcmFwcGVsw6ksIG91IGwnYXBwbGljYXRpb24gcmVmYWl0IHNhIHJlcXXDqnRlIGNvbXBsw6h0ZS4gKi9cbiAgcmV0cnlMYXp5Q29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBmYWlsZWQgPSBbLi4udGhpcy5fbGF6eUNvbHVtblN0YXR1c10uZmlsdGVyKChbLCBzdGF0dXNdKSA9PiBzdGF0dXMgPT09ICdlcnJvcicpLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgaWYgKCFmYWlsZWQubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5fc2V0TGF6eVN0YXR1cyhmYWlsZWQsICdsb2FkaW5nJyk7XG4gICAgdGhpcy5sYXp5Q29sdW1uc1JlcXVlc3RlZC5lbWl0KFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmtleXMoKV0pO1xuICAgIHRoaXMuX3J1bkxhenlMb2FkZXIoKTtcbiAgICB0aGlzLl9zY2hlZHVsZVJlbmRlcigpO1xuICB9XG5cbiAgLyoqIENvbG9ubmVzIGxhenkgZG9udCBsYSB2YWxldXIgZXN0IG7DqWNlc3NhaXJlIDogYWZmaWNow6llcywgdXRpbGlzw6llcyBlbiBHcm91cCBieSBvdSBlbiBTbGljZSBieSBkeW5hbWlxdWUuICovXG4gIHByaXZhdGUgX3VzZWRMYXp5Q29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIGNvbnN0IHVzZWQgPSBuZXcgTWFwPHN0cmluZywgVGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcbiAgICBjb25zdCBhZGQgPSAoY29sdW1uPzogVGFibGVDb2x1bW5Qcm92aWRlcjxUPikgPT4geyBpZiAoY29sdW1uPy5sYXp5KSB1c2VkLnNldChjb2x1bW4ua2V5LCBjb2x1bW4pOyB9O1xuICAgIHRoaXMuYWN0aXZlRmllbGRzLmZvckVhY2goYWRkKTtcbiAgICB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLmZvckVhY2goYWRkKTtcbiAgICBjb25zdCBncm91cEtleSA9IHRoaXMuYWN0aXZlR3JvdXBCeUtleTtcbiAgICBpZiAoZ3JvdXBLZXkpIGFkZCh0aGlzLl9jb2x1bW5NYXAuZ2V0KGdyb3VwS2V5KSk7XG4gICAgcmV0dXJuIFsuLi51c2VkLnZhbHVlcygpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVsIHF1ZSBzb2l0IGxlIGNoZW1pbiBkJ2FjdGl2YXRpb24gKE9yZ2FuaXplciwgR3JvdXAgYnksIFNsaWNlIGJ5LCBwcsOpZsOpcmVuY2VzLi4uKSwgbGVzIGNvbG9ubmVzIGxhenkgdXRpbGlzw6llcyBldCBwYXMgZW5jb3JlXG4gICAqIGRlbWFuZMOpZXMgc29udCByw6ljbGFtw6llcyBlbiB1biBzZXVsIMOpdsOpbmVtZW50LiBIb3JzIGN5Y2xlIGRlIGTDqXRlY3Rpb24sIGV0IHNldWxlbWVudCB1bmUgZm9pcyBkZXMgbGlnbmVzIGFmZmljaMOpZXMgOlxuICAgKiBsYSBwcmVtacOocmUgcsOpcG9uc2UgZGUgbCdhcHBsaWNhdGlvbiBuZSBkb2l0IHBhcyDDqnRyZSBwcmlzZSBwb3VyIGNlbGxlIHF1aSBjb250aWVudCBsZXMgY29sb25uZXMuXG4gICAqL1xuICBwcml2YXRlIF9yZXF1ZXN0TGF6eUNvbHVtbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xhenlGbHVzaFF1ZXVlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2xhenlGbHVzaFF1ZXVlZCA9IHRydWU7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdGhpcy5fbGF6eUZsdXNoUXVldWVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5fZGVzdHJveWVkIHx8ICF0aGlzLl9yZXNvbHZlZERhdGEubGVuZ3RoKSByZXR1cm47XG4gICAgICBjb25zdCBpZGxlID0gdGhpcy5fdXNlZExhenlDb2x1bW5zKCkuZmlsdGVyKGMgPT4gIXRoaXMuX2xhenlDb2x1bW5TdGF0dXMuaGFzKGMua2V5KSk7XG4gICAgICBpZiAoIWlkbGUubGVuZ3RoKSByZXR1cm47XG4gICAgICB0aGlzLl93YXJuSWZOb0xhenlTb3VyY2UoaWRsZSk7XG4gICAgICB0aGlzLl9zZXRMYXp5U3RhdHVzKGlkbGUubWFwKGMgPT4gYy5rZXkpLCAnbG9hZGluZycpO1xuICAgICAgdGhpcy5sYXp5Q29sdW1uc1JlcXVlc3RlZC5lbWl0KFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmtleXMoKV0pO1xuICAgICAgdGhpcy5fcnVuTGF6eUxvYWRlcigpO1xuICAgICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBBcHBlbGxlIGBjb25maWcubGF6eUxvYWRlcmAgYXZlYyB0b3V0ZXMgbGVzIGNvbG9ubmVzIGxhenkgZGVtYW5kw6llcyA7IHNhIHLDqXBvbnNlIHJlbXBsYWNlIGBkYXRhYC4gKi9cbiAgcHJpdmF0ZSBfcnVuTGF6eUxvYWRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkZXIgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmxhenlMb2FkZXI7XG4gICAgaWYgKCFsb2FkZXIpIHJldHVybjtcbiAgICB0aGlzLl9sb2FkZXJTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmtleXMoKV07XG4gICAgdGhpcy5fbG9hZGVyU3ViID0gZGVmZXIoKCkgPT4gbG9hZGVyKGNvbHVtbnMpKS5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByb3dzID0+IHtcbiAgICAgICAgdGhpcy5fbG9hZGVyUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3NldHRsZUxhenlDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgY29uc3QgbG9hZGluZyA9IFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzXS5maWx0ZXIoKFssIHN0YXR1c10pID0+IHN0YXR1cyA9PT0gJ2xvYWRpbmcnKS5tYXAoKFtrZXldKSA9PiBrZXkpO1xuICAgICAgICB0aGlzLl9zZXRMYXp5U3RhdHVzKGxvYWRpbmcsICdlcnJvcicpO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIE5vdXZlYXUgYGRhdGFgIDogaWwgbCdlbXBvcnRlIHN1ciBsZXMgbGlnbmVzIGR1IGNoYXJnZXVyLiBBdmVjIHVuIGNoYXJnZXVyLCBsZXMgY29sb25uZXMgZMOpasOgIGRlbWFuZMOpZXMgc29udCByZWNoYXJnw6llcy4gKi9cbiAgcHJpdmF0ZSBfb25OZXdEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuX2xvYWRlclN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9sb2FkZXJSb3dzID0gbnVsbDtcbiAgICBpZiAodGhpcy5jb25maWc/LmxhenlMb2FkZXIgJiYgdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5zaXplKSB7XG4gICAgICB0aGlzLl9zZXRMYXp5U3RhdHVzKFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmtleXMoKV0sICdsb2FkaW5nJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldHRsZUxhenlDb2x1bW5zKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNhbnMgY2hhcmdldXIgbmkgw6ljb3V0ZXVyLCBsYSBjb2xvbm5lIGRlbWFuZMOpZSByZXN0ZXJhaXQgZW4gc2tlbGV0b24gc2FucyBxdWUgcmllbiBuZSBsJ2V4cGxpcXVlLiAqL1xuICBwcml2YXRlIF93YXJuSWZOb0xhenlTb3VyY2UoY29sdW1uczogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xhenlXYXJuZWQgfHwgdGhpcy5yZXNvbHZlZENvbmZpZy5sYXp5TG9hZGVyIHx8IHRoaXMubGF6eUNvbHVtbnNSZXF1ZXN0ZWQub2JzZXJ2ZWQgfHwgIWlzRGV2TW9kZSgpKSByZXR1cm47XG4gICAgdGhpcy5fbGF6eVdhcm5lZCA9IHRydWU7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFtqcXVlcnktdGFibGVdIENvbG9ubmUgbGF6eSBhY3RpdsOpZSAoJHtjb2x1bW5zLm1hcChjID0+IGMua2V5KS5qb2luKCcsICcpfSkgbWFpcyBuaSBjb25maWcubGF6eUxvYWRlciBuaSAobGF6eUNvbHVtbnNSZXF1ZXN0ZWQpIG5lIHNvbnQgZMOpZmluaXMgOiBgXG4gICAgICArICdhdWN1bmUgcmVxdcOqdGUgblxcJ2VzdCBsYW5jw6llIGV0IGxlIHNrZWxldG9uIHJlc3RlcmEgYWZmaWNow6kuJyxcbiAgICApO1xuICB9XG5cbiAgLyoqIERlIG5vdXZlbGxlcyBgZGF0YWAgc29udCBhcnJpdsOpZXMgOiB0b3V0ZXMgbGVzIGNvbG9ubmVzIGRlbWFuZMOpZXMgc29udCBjb25zaWTDqXLDqWVzIGNvbW1lIHByw6p0ZXMuICovXG4gIHByaXZhdGUgX3NldHRsZUxhenlDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHdhaXRpbmcgPSBbLi4udGhpcy5fbGF6eUNvbHVtblN0YXR1c10uZmlsdGVyKChbLCBzdGF0dXNdKSA9PiBzdGF0dXMgIT09ICdsb2FkZWQnKS5tYXAoKFtrZXldKSA9PiBrZXkpO1xuICAgIGlmICh3YWl0aW5nLmxlbmd0aCkgdGhpcy5fc2V0TGF6eVN0YXR1cyh3YWl0aW5nLCAnbG9hZGVkJyk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseUxhenlFcnJvcigpOiB2b2lkIHtcbiAgICBjb25zdCBmcm9tID0gdGhpcy5sYXp5RXJyb3IgPyAnbG9hZGluZycgOiAnZXJyb3InO1xuICAgIGNvbnN0IGtleXMgPSBbLi4udGhpcy5fbGF6eUNvbHVtblN0YXR1c10uZmlsdGVyKChbLCBzdGF0dXNdKSA9PiBzdGF0dXMgPT09IGZyb20pLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgaWYgKGtleXMubGVuZ3RoKSB0aGlzLl9zZXRMYXp5U3RhdHVzKGtleXMsIHRoaXMubGF6eUVycm9yID8gJ2Vycm9yJyA6ICdsb2FkaW5nJyk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRMYXp5U3RhdHVzKGtleXM6IHN0cmluZ1tdLCBzdGF0dXM6ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2Vycm9yJyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgTWFwKHRoaXMuX2xhenlDb2x1bW5TdGF0dXMpO1xuICAgIGtleXMuZm9yRWFjaChrZXkgPT4gbmV4dC5zZXQoa2V5LCBzdGF0dXMpKTtcbiAgICB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzID0gbmV4dDtcbiAgfVxuXG4gIHRvZ2dsZUdyb3VwQ29sbGFwc2UoZ3JvdXBLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2dyb3VwQnkudG9nZ2xlR3JvdXBDb2xsYXBzZShncm91cEtleSwgKGtleSkgPT4ge1xuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuX3NjaGVkdWxlRGVmZXJyZWQoKCkgPT4gdGhpcy5zY3JvbGxUb0dyb3VwSGVhZGVyKGtleSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9Hcm91cEhlYWRlcihncm91cEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy50YWJsZUJvZHlTY3JvbGxSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICBjb25zdCByb3cgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYHRyW2RhdGEtZ3JvdXAta2V5PVwiJHtDU1MuZXNjYXBlKGdyb3VwS2V5KX1cIl1gKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xuICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IE51bWJlci5wYXJzZUZsb2F0KFxuICAgICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLWFjdHVhbC1oZWFkZXItaGVpZ2h0JykgfHwgJzU2J1xuICAgICkgfHwgNTY7XG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByb3dSZWN0ID0gcm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IGN1cnJlbnRTY3JvbGxUb3AgKyAocm93UmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCkgLSBoZWFkZXJIZWlnaHQ7XG4gICAgY29udGFpbmVyLnNjcm9sbFRvKHsgdG9wOiB0YXJnZXRTY3JvbGxUb3AsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgfVxuXG4gIGlzR3JvdXBDb2xsYXBzZWQoZ3JvdXBLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9ncm91cEJ5LmlzR3JvdXBDb2xsYXBzZWQoZ3JvdXBLZXkpO1xuICB9XG5cbiAgZ3JvdXBQYWdlQmFjayhncm91cEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VCYWNrKGdyb3VwS2V5KTtcbiAgfVxuXG4gIGdyb3VwUGFnZUZvcndhcmQoZ3JvdXBLZXk6IHN0cmluZywgdG90YWxDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VGb3J3YXJkKGdyb3VwS2V5LCB0b3RhbENvdW50KTtcbiAgfVxuXG4gIGdldCBoYXNBZGRhYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLm1lbnVCYXNlRmllbGRzLmxlbmd0aCA+IDAgfHwgdGhpcy5fb3JnYW5pemVyLm1lbnVPcHRpb25hbEZpZWxkcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IG1lbnVCYXNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIubWVudUJhc2VGaWVsZHM7XG4gIH1cblxuICBnZXQgbWVudU9wdGlvbmFsQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIubWVudU9wdGlvbmFsRmllbGRzO1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnNUb0FkZCgpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSBuZXcgU2V0KHRoaXMuYWN0aXZlRmllbGRzLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KSk7XG4gICAgcmV0dXJuICh0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgfHwgW10pLmZpbHRlcigoYykgPT4gYy5vcHRpb25hbCAmJiAhYWN0aXZlS2V5cy5oYXMoYy5rZXkpKTtcbiAgfVxuXG4gIGdldCBhbGxvd0NvbHVtblJlbW92YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5hbGxvd0ZpZWxkUmVtb3ZhbDtcbiAgfVxuXG4gIGdldCBoYXNTbGljZUNvbmZpZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzPy5sZW5ndGggPz8gMCkgPiAwO1xuICB9XG5cbiAgZ2V0IHNob3dTbGljZVBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93U2xpY2VQYW5lbDtcbiAgfVxuXG4gIG9uU2xpY2VQYW5lbENvbGxhcHNlZENoYW5nZShjb2xsYXBzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gY29sbGFwc2VkO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1BlbmRpbmdEeW5hbWljU2xpY2VzID0gKHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzPy5sZW5ndGggPz8gMCkgPiAwO1xuICAgIGNvbnN0IGhhc0NmZyA9IHRoaXMuX3NsaWNlQ29uZmlncy5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLmxlbmd0aCA+IDBcbiAgICAgIHx8IGhhc1BlbmRpbmdEeW5hbWljU2xpY2VzO1xuICAgIGNvbnN0IHdhc1Zpc2libGUgPSB0aGlzLl9zaG93U2xpY2VQYW5lbDtcbiAgICB0aGlzLl9zaG93U2xpY2VQYW5lbCA9IGhhc0NmZyAmJiB0aGlzLl9yZXNvbHZlZERhdGEubGVuZ3RoID4gMDtcbiAgICAvLyBMZXMgZG9ubsOpZXMgdmllbm5lbnQgZCdhcnJpdmVyIDogYXBwbGlxdWVyIGxlcyBkeW5hbWljIHNsaWNlcyBldCBsZXMgZmlsdHJlcyBlbiBhdHRlbnRlLlxuICAgIC8vIExlcyBzbGljZXMgZHluYW1pcXVlcyBzb250IGFqb3V0w6llcyBhdmFudCBsZXMgZmlsdHJlcyBwb3VyIHJlbmRyZSBsZXVycyBjbMOpcyBkaXNwb25pYmxlcy5cbiAgICBpZiAoIXdhc1Zpc2libGUgJiYgdGhpcy5fc2hvd1NsaWNlUGFuZWwgJiYgKHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgfHwgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycztcbiAgICAgIGNvbnN0IGR5bmFtaWNLZXlzID0gdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXM7XG4gICAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gbnVsbDtcbiAgICAgIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gbnVsbDtcbiAgICAgIGNvbnN0IGFsbENvbHMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW107XG4gICAgICB0aGlzLl9zY2hlZHVsZURlZmVycmVkKCgpID0+IHtcbiAgICAgICAgaWYgKGR5bmFtaWNLZXlzKSB7XG4gICAgICAgICAgZHluYW1pY0tleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sID0gYWxsQ29scy5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICAgICAgICBpZiAoY29sKSB0aGlzLmFkZER5bmFtaWNTbGljZShjb2wpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzICYmIHRoaXMuc2xpY2VQYW5lbFJlZikge1xuICAgICAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZi5yZXN0b3JlRmlsdGVycyhmaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0FkZFNsaWNlQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2hvd1NsaWNlQnlTZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRpY1NsaWNlc0Zvck1lbnUoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zdGF0aWNTbGljZXNGb3JNZW51O1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnNGb3JEeW5hbWljU2xpY2UoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYXZhaWxhYmxlRm9yRHluYW1pYztcbiAgfVxuXG4gIGlzU3RhdGljU2xpY2VWaXNpYmxlKGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMuaGFzKGNvbHVtbktleSk7XG4gIH1cblxuICB0b2dnbGVTdGF0aWNTbGljZShjb2x1bW5LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgaWYgKG5leHQuaGFzKGNvbHVtbktleSkpIG5leHQuZGVsZXRlKGNvbHVtbktleSk7XG4gICAgZWxzZSBuZXh0LmFkZChjb2x1bW5LZXkpO1xuICAgIHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyA9IG5leHQ7XG4gICAgdGhpcy5fb3JnYW5pemVyLnVwZGF0ZUhpZGRlblN0YXRpY0tleXModGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzKTtcbiAgICAvLyBMZSBwYW5uZWF1IHJldGlyZSBsYSBzw6lsZWN0aW9uIGR1IHNsaWNlIG1hc3F1w6kgZXQgcsOpw6ltZXQgbGUgZmlsdHJlIGRlcyBhdXRyZXMuXG4gICAgdGhpcy5fc2V0U2xpY2VDb25maWdzKHRoaXMuX2NvbXB1dGVTbGljZUNvbmZpZ3MoKSk7XG4gICAgdGhpcy5fcmVjb21wdXRlU2hvd1NsaWNlUGFuZWwoKTtcbiAgICB0aGlzLl9zY2hlZHVsZVJlbmRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFkZER5bmFtaWNTbGljZShjb2x1bW46IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnNsaWNlUGFuZWxSZWY/LmFkZER5bmFtaWNTbGljZShjb2x1bW4pO1xuICB9XG5cbiAgZ2V0IGFsbER5bmFtaWNTbGljZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsRHluYW1pY1NsaWNlQ29sdW1ucztcbiAgfVxuXG4gIGlzRHluYW1pY1NsaWNlQWN0aXZlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5pc0R5bmFtaWNTbGljZUFjdGl2ZShrZXkpO1xuICB9XG5cbiAgdG9nZ2xlRHluYW1pY1NsaWNlKGNvbDogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRHluYW1pY1NsaWNlQWN0aXZlKGNvbC5rZXkpKSB7XG4gICAgICB0aGlzLnJlbW92ZUR5bmFtaWNTbGljZUJ5S2V5KGNvbC5rZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZER5bmFtaWNTbGljZShjb2wpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2xpY2VGaWx0ZXJDaGFuZ2UocHJlZDogKHJvdzogVCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlU2xpY2VGaWx0ZXIgPSBwcmVkO1xuICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICB0aGlzLnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XG4gIH1cblxuICBvbkR5bmFtaWNTbGljZUtleXNDaGFuZ2Uoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl9vcmdhbml6ZXIub25EeW5hbWljU2xpY2VLZXlzQ2hhbmdlKGtleXMpO1xuICAgIHRoaXMuX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsKCk7XG4gICAgdGhpcy5fcmVxdWVzdExhenlDb2x1bW5zKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGVtcHR5U3RhdGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLmxhYmVscz8uZW1wdHkgfHwgdGhpcy5pMThuLmVtcHR5U3RhdGU7XG4gIH1cblxuICBnZXQgbG9hZGluZ1N0YXRlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5sYWJlbHM/LmxvYWRpbmcgfHwgdGhpcy5pMThuLmxvYWRpbmdTdGF0ZTtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVJc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgLy8gX3BlbmRpbmdSZW5kZXIgOiBsZSByZW5kdSBpbnRlcm5lIG4nZXN0IHBhcyBlbmNvcmUgdGVybWluw6kg4oaSIHBhcyBkZSBtZXNzYWdlIHZpZGUgcHLDqW1hdHVyw6lcbiAgICByZXR1cm4gIXRoaXMuaXNMb2FkaW5nICYmIHRoaXMuX3BlbmRpbmdSZW5kZXIgPT09IG51bGwgJiYgdGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGdldCBzaG93UGFnaW5hdGlvbigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hY3RpdmVHcm91cEJ5S2V5ICE9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcucGFnaW5hdGlvbj8uZW5hYmxlZCAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRQYWdpbmF0aW9uU2hvd0ZpcnN0TGFzdEJ1dHRvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcucGFnaW5hdGlvbj8uc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgIT09IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIuaXNGaWVsZERyYWdEcm9wRW5hYmxlZDtcbiAgfVxuXG4gIGdldCB0b3RhbFJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVHcm91cEJ5S2V5XG4gICAgICA/IHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEuZmlsdGVyKChyKSA9PiAhcltHUk9VUF9IRUFERVJfTUFSS0VSXSkubGVuZ3RoXG4gICAgICA6IHRoaXMuX2FsbEZpbHRlcmVkUm93cy5sZW5ndGg7XG4gIH1cblxuICAvLyDilIDilIAgR2VzdGlvbiBkZXMgY29sb25uZXNcblxuICBvbkFkZENvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4pOiB2b2lkIHtcbiAgICB0aGlzLl9vcmdhbml6ZXIuYWRkRmllbGQoY29sdW1uKTtcbiAgICB0aGlzLl9wcmVzZXJ2ZVBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdG9yPy5wYWdlSW5kZXggPz8gbnVsbDtcbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcblxuICAgIHRoaXMuYWRkUmVxdWVzdGVkLmVtaXQoKTtcbiAgICB0aGlzLmNvbHVtbkFkZGVkLmVtaXQoY29sdW1uKTtcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZShjb2x1bW46IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4sIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpc1Zpc2libGUgPSB0aGlzLl9vcmdhbml6ZXIuaXNGaWVsZFZpc2libGUoY29sdW1uLmtleSk7XG5cbiAgICBpZiAoY2hlY2tlZCAmJiAhaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLm9uQWRkQ29sdW1uKGNvbHVtbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjaGVja2VkICYmIGlzVmlzaWJsZSkge1xuICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuX29yZ2FuaXplci5yZW1vdmVGaWVsZChjb2x1bW4ua2V5KTtcbiAgICAgIGlmICghcmVtb3ZlZCkgcmV0dXJuO1xuICAgICAgdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4ID8/IG51bGw7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICAgIHRoaXMuY29sdW1uUmVtb3ZlZC5lbWl0KGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgaXNDb2x1bW5WaXNpYmxlKGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRmllbGRzLnNvbWUoYyA9PiBjLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgfVxuXG4gIG9uUmVtb3ZlQ29sdW1uKGNvbHVtbktleTogc3RyaW5nLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuYWN0aXZlRmllbGRzLmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICBpZiAoIWNvbHVtbikgcmV0dXJuO1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLl9vcmdhbml6ZXIucmVtb3ZlRmllbGQoY29sdW1uS2V5KTtcbiAgICBpZiAoIXJlbW92ZWQpIHJldHVybjtcbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICB0aGlzLmNvbHVtblJlbW92ZWQuZW1pdChjb2x1bW4pO1xuICB9XG5cbiAgLy8g4pSA4pSAIExpZ25lc1xuXG4gIHByaXZhdGUgX3JlYnVpbGRDZWxsRGVmTWFwKCk6IHZvaWQge1xuICAgIHRoaXMuX2NlbGxEZWZNYXAgPSBuZXcgTWFwKFxuICAgICAgKHRoaXMuX2NlbGxEZWZzID8/IFtdKS5tYXAoZCA9PiBbZC5jb2x1bW5LZXksIGQudGVtcGxhdGVdIGFzIFtzdHJpbmcsIFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBhbnk7IGluZGV4OiBudW1iZXI7IHZhbHVlOiBhbnkgfT5dKVxuICAgICk7XG4gIH1cblxuICBnZXRDZWxsVGVtcGxhdGUoa2V5OiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogYW55OyBpbmRleDogbnVtYmVyOyB2YWx1ZTogYW55IH0+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxEZWZNYXAuZ2V0KGtleSkgPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBoYXNDdXN0b21DZWxsRGVmcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2VsbERlZk1hcC5zaXplID4gMDtcbiAgfVxuXG4gIGdldCBoYXNSb3dDbGlja0hhbmRsZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm93U2VsZWN0ZWQub2JzZXJ2ZWQgfHwgISF0aGlzLnJlc29sdmVkQ29uZmlnLm9uUm93U2VsZWN0ZWQ7XG4gIH1cblxuICByb3dBY3Rpb25MYWJlbChyb3c6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBTw6lsZWN0aW9ubmVyIGxhIGxpZ25lICR7KHJvdz8uW1JPV19JTkRFWF9LRVldID8/IDApICsgMX1gO1xuICB9XG5cbiAgLyoqIExhcmdldXIgbWluaW1hbGUgZHUgdGFibGVhdSBlbiBweCwgY2FsY3Vsw6llIGRlcHVpcyBsZXMgbGFyZ2V1cnMgZXhwbGljaXRlcyBkZXMgY29sb25uZXMgYWN0aXZlcy5cbiAgICogUmV0b3VybmUgbnVsbCBzaSBhdWN1bmUgY29sb25uZSBuJ2EgZGUgbGFyZ2V1ciBkw6lmaW5pZSAobGUgdGFibGVhdSByZW1wbGl0IGFsb3JzIDEwMCUgZHUgY29udGVuZXVyKS5cbiAgICogU2V1bGVzIGxlcyB2YWxldXJzIGV4cGxpY2l0ZW1lbnQgZW4gYHB4YCBzb250IHNvbW1hYmxlcyA7IGxlcyBwb3VyY2VudGFnZXMgb3UgYXV0cmVzIHVuaXTDqXMgc29udCBpZ25vcsOpcy4gKi9cbiAgZ2V0IHRhYmxlTWluV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaGFzUmVzaXplZCA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbHVtbldpZHRocykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNTb21lRXhwbGljaXRXaWR0aCA9IGhhc1Jlc2l6ZWQgfHwgdGhpcy5hY3RpdmVGaWVsZHMuc29tZShjID0+IGMud2lkdGgpO1xuICAgIGlmICghaGFzU29tZUV4cGxpY2l0V2lkdGgpIHJldHVybiBudWxsO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuYWN0aXZlRmllbGRzKSB7XG4gICAgICBpZiAodGhpcy5fY29sdW1uV2lkdGhzW2NvbC5rZXldICE9IG51bGwpIHtcbiAgICAgICAgc3VtICs9IHRoaXMuX2NvbHVtbldpZHRoc1tjb2wua2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgIGNvbnN0IGlzUHggPSBjb2wud2lkdGgudHJpbSgpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ3B4Jyk7XG4gICAgICAgIGNvbnN0IHB4ID0gTnVtYmVyLnBhcnNlRmxvYXQoY29sLndpZHRoKTtcbiAgICAgICAgaWYgKGlzUHggJiYgIU51bWJlci5pc05hTihweCkpIHsgc3VtICs9IHB4OyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdW0gKz0gMTIwOyAvLyBsYXJnZXVyIG1pbmltYWxlIGVzdGltw6llIHBvdXIgdW5lIGNvbG9ubmUgc2FucyBsYXJnZXVyIGV4cGxpY2l0ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VtICsgJ3B4JztcbiAgfVxuXG4gIHRyYWNrUm93Rm4gPSAoX2luZGV4OiBudW1iZXIsIHJvdzogYW55KTogYW55ID0+IHtcbiAgICBpZiAocm93W0dST1VQX0hFQURFUl9NQVJLRVJdKSByZXR1cm4gYF9fZ3JvdXBfJHtyb3dbUk9XX0dST1VQX0tFWV19YDtcbiAgICBpZiAocm93W1JPV19HUk9VUF9LRVldICE9PSB1bmRlZmluZWQpIHJldHVybiBgX19yb3dfJHtyb3dbUk9XX0dST1VQX0tFWV19XyR7cm93W1JPV19JTkRFWF9LRVldID8/IF9pbmRleH1gO1xuICAgIHJldHVybiByb3dbUk9XX0lOREVYX0tFWV0gPz8gX2luZGV4O1xuICB9O1xuXG4gIGdldFJvd0NsYXNzKHJvdzogYW55KTogc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgY29uc3QgZm4gPSB0aGlzLnJlc29sdmVkQ29uZmlnLnJvd0NsYXNzO1xuICAgIGlmICghZm4gfHwgcm93Py5bR1JPVVBfSEVBREVSX01BUktFUl0pIHJldHVybiB7fTtcbiAgICByZXR1cm4gZm4ocm93W1JPV19SQVdfS0VZXSA/PyByb3csIHJvd1tST1dfSU5ERVhfS0VZXSA/PyAwKTtcbiAgfVxuXG4gIG9uUm93Q2xpY2socm93OiBhbnksIGV2ZW50OiBNb3VzZUV2ZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChyb3c/LltHUk9VUF9IRUFERVJfTUFSS0VSXSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5oYXNSb3dDbGlja0hhbmRsZXIpIHJldHVybjtcbiAgICBjb25zdCByZXNvbHZlZCA9IChyb3c/LltST1dfUkFXX0tFWV0gPz8gcm93KSBhcyBUO1xuICAgIHRoaXMucmVzb2x2ZWRDb25maWcub25Sb3dTZWxlY3RlZD8uKHJlc29sdmVkLCBldmVudCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJlc29sdmVkKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBEcmFnICYgZHJvcFxuXG4gIG9uSGVhZGVyRHJhZ1N0YXJ0KGNvbHVtbktleTogc3RyaW5nLCBldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkICYmICF0aGlzLl9lZGl0TW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ2dlZENvbHVtbktleSA9IGNvbHVtbktleTtcbiAgICB0aGlzLmRyYWdPdmVyQ29sdW1uS2V5ID0gbnVsbDtcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgY29sdW1uS2V5KTtcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcktleURvd24oY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCghdGhpcy5pc0NvbHVtbkRyYWdEcm9wRW5hYmxlZCAmJiAhdGhpcy5fZWRpdE1vZGUpXG4gICAgICB8fCAoZXZlbnQua2V5ICE9PSAnQXJyb3dMZWZ0JyAmJiBldmVudC5rZXkgIT09ICdBcnJvd1JpZ2h0JykpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuYWN0aXZlRmllbGRzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9IGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgPyBjdXJyZW50SW5kZXggLSAxIDogY3VycmVudEluZGV4ICsgMTtcbiAgICBpZiAoY3VycmVudEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gdGhpcy5hY3RpdmVGaWVsZHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHJlb3JkZXJlZCA9IFsuLi50aGlzLmFjdGl2ZUZpZWxkc107XG4gICAgW3Jlb3JkZXJlZFtjdXJyZW50SW5kZXhdLCByZW9yZGVyZWRbdGFyZ2V0SW5kZXhdXSA9IFtyZW9yZGVyZWRbdGFyZ2V0SW5kZXhdLCByZW9yZGVyZWRbY3VycmVudEluZGV4XV07XG4gICAgdGhpcy5fb3JnYW5pemVyLnNldEFjdGl2ZUZpZWxkcyhyZW9yZGVyZWQpO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICB9XG5cbiAgb25IZWFkZXJEcmFnT3Zlcihjb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICgoIXRoaXMuaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgJiYgIXRoaXMuX2VkaXRNb2RlKSB8fCAhdGhpcy5kcmFnZ2VkQ29sdW1uS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmRyYWdPdmVyQ29sdW1uS2V5ID0gY29sdW1uS2V5O1xuICB9XG5cbiAgb25IZWFkZXJEcm9wKHRhcmdldENvbHVtbktleTogc3RyaW5nLCBldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKCghdGhpcy5pc0NvbHVtbkRyYWdEcm9wRW5hYmxlZCAmJiAhdGhpcy5fZWRpdE1vZGUpIHx8ICF0aGlzLmRyYWdnZWRDb2x1bW5LZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgbW92ZWQgPSB0aGlzLl9vcmdhbml6ZXIucmVvcmRlckZpZWxkcyh0aGlzLmRyYWdnZWRDb2x1bW5LZXksIHRhcmdldENvbHVtbktleSk7XG4gICAgaWYgKCFtb3ZlZCkge1xuICAgICAgdGhpcy5vbkhlYWRlckRyYWdFbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICB0aGlzLm9uSGVhZGVyRHJhZ0VuZCgpO1xuICB9XG5cbiAgb25IZWFkZXJEcmFnRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dlZENvbHVtbktleSA9IG51bGw7XG4gICAgdGhpcy5kcmFnT3ZlckNvbHVtbktleSA9IG51bGw7XG4gIH1cblxuICBpc0hlYWRlckRyb3BUYXJnZXQoY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRyYWdnZWRDb2x1bW5LZXkgJiYgdGhpcy5kcmFnT3ZlckNvbHVtbktleSA9PT0gY29sdW1uS2V5ICYmIHRoaXMuZHJhZ2dlZENvbHVtbktleSAhPT0gY29sdW1uS2V5O1xuICB9XG5cbiAgLy8g4pSA4pSAIFByw6lmw6lyZW5jZXMgOiBtb2RlIMOpZGl0aW9uXG5cbiAgZW50ZXJFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlID0gbnVsbDtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjb25maXJtRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdE1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogRMOpbWFycmUgbGUgcmVzaXplIGQndW5lIGNvbG9ubmUgKG1vdXNlZG93biBzdXIgbGEgcG9pZ27DqWUgZHJvaXRlKS4gKi9cbiAgb25SZXNpemVTdGFydChjb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2VkaXRNb2RlKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHRoID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgndGgnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF0aCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2Nyb2xsRWwgPSB0aGlzLnRhYmxlQm9keVNjcm9sbFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoc2Nyb2xsRWwpIHtcbiAgICAgIGNvbnN0IGFsbFRoID0gc2Nyb2xsRWwucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJ3RoLm1hdC1tZGMtaGVhZGVyLWNlbGwnKTtcbiAgICAgIGFsbFRoLmZvckVhY2godGhFbCA9PiB7XG4gICAgICAgIGNvbnN0IGNvbENsYXNzID0gQXJyYXkuZnJvbSh0aEVsLmNsYXNzTGlzdCkuZmluZChjID0+IGMuc3RhcnRzV2l0aCgnbWF0LWNvbHVtbi0nKSk7XG4gICAgICAgIGNvbnN0IGNvbEtleSA9IGNvbENsYXNzID8gY29sQ2xhc3MucmVwbGFjZSgnbWF0LWNvbHVtbi0nLCAnJykgOiBudWxsO1xuICAgICAgICBpZiAoY29sS2V5ICYmIHRoaXMuX2NvbHVtbldpZHRoc1tjb2xLZXldID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7IC4uLnRoaXMuX2NvbHVtbldpZHRocywgW2NvbEtleV06IHRoRWwub2Zmc2V0V2lkdGggfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzaXplU3RhdGUgPSB7IGtleTogY29sdW1uS2V5LCBzdGFydFg6IGV2ZW50LmNsaWVudFgsIHN0YXJ0V2lkdGg6IHRoLm9mZnNldFdpZHRoIH07XG5cbiAgICBjb25zdCBvbk1vdmUgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9yZXNpemVTdGF0ZSkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3ZlKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvblVwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsdGEgPSBlLmNsaWVudFggLSB0aGlzLl9yZXNpemVTdGF0ZS5zdGFydFg7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KDYwLCB0aGlzLl9yZXNpemVTdGF0ZS5zdGFydFdpZHRoICsgZGVsdGEpO1xuICAgICAgdGhpcy5fY29sdW1uV2lkdGhzID0geyAuLi50aGlzLl9jb2x1bW5XaWR0aHMsIFt0aGlzLl9yZXNpemVTdGF0ZS5rZXldOiBuZXdXaWR0aCB9O1xuICAgICAgLy8gZGV0ZWN0Q2hhbmdlcygpIHBvdXIgZm9yY2VyIGxhIG1pc2Ugw6Agam91ciBpbW3DqWRpYXRlIGVuIG1vZGUgT25QdXNoXG4gICAgICAvLyAobGVzIGxpc3RlbmVycyB3aW5kb3cgdG91cm5lbnQgaG9ycyB6b25lIEFuZ3VsYXIgYXZlYyBydW5PdXRzaWRlQW5ndWxhcilcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uVXAgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNpemVTdGF0ZSA9IG51bGw7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3ZlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25VcCk7XG4gICAgfTtcblxuICAgIC8vIExpc3RlbmVycyBob3JzIHpvbmUgQW5ndWxhciBwb3VyIMOpdml0ZXIgZGVzIGN5Y2xlcyBDRCDDoCBjaGFxdWUgbW91c2Vtb3ZlXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdmUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvblVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXRvdXJuZSBsYSBsYXJnZXVyIENTUyBkJ3VuZSBjb2xvbm5lIChweCBzaSBwZXJzb25uYWxpc8OpZSwgc2lub24gbGEgdmFsZXVyIGRlIGNvbmZpZyBvdSBhdXRvKS4gKi9cbiAgZ2V0Q29sdW1uV2lkdGgoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9jb2x1bW5XaWR0aHNba2V5XSAhPSBudWxsKSByZXR1cm4gdGhpcy5fY29sdW1uV2lkdGhzW2tleV0gKyAncHgnO1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbHVtbk1hcC5nZXQoa2V5KTtcbiAgICByZXR1cm4gY29sPy53aWR0aCA/PyAnYXV0byc7XG4gIH1cblxuICAvLyDilIDilIAgUHLDqWbDqXJlbmNlcyA6IHNhdmUgLyBjbGVhclxuXG4gIHNhdmVQcmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlcikgcmV0dXJuO1xuICAgIGNvbnN0IGR5bmFtaWNTbGljZUtleXMgPSB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLm1hcChjID0+IGMua2V5KTtcbiAgICBjb25zdCBjb25maWc6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyA9IHtcbiAgICAgIHNlYXJjaDogICAgICAgICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgfHwgdW5kZWZpbmVkLFxuICAgICAgZ3JvdXBCeTogICAgICAgICAgICAgdGhpcy5hY3RpdmVHcm91cEJ5S2V5LFxuICAgICAgY29sdW1uT3JkZXI6ICAgICAgICAgdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpLFxuICAgICAgdmlzaWJsZUNvbHVtbnM6ICAgICAgdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpLFxuICAgICAgY29sdW1uV2lkdGhzOiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fY29sdW1uV2lkdGhzKS5sZW5ndGggPyB7IC4uLnRoaXMuX2NvbHVtbldpZHRocyB9IDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VQYW5lbENvbGxhcHNlZDogdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCxcbiAgICAgIGhpZGRlblNsaWNlS2V5czogICAgIFsuLi50aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXNdLFxuICAgICAgZHluYW1pY1NsaWNlS2V5czogICAgZHluYW1pY1NsaWNlS2V5cy5sZW5ndGggPyBkeW5hbWljU2xpY2VLZXlzIDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VGaWx0ZXJzOiAgICAgICAgdGhpcy5zbGljZVBhbmVsUmVmID8gdGhpcy5zbGljZVBhbmVsUmVmLmdldEFjdGl2ZUZpbHRlcnMoKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlci5zYXZlKGNvbmZpZyk7XG4gICAgdGhpcy5faGFzU2F2ZWRDb25maWcgPSB0cnVlO1xuICAgIHRoaXMuX3Nob3dQcmVmZXJlbmNlc01lc3NhZ2UodGhpcy5pMThuLnByZWZlcmVuY2VzU2F2ZWRNZXNzYWdlKTtcbiAgfVxuXG4gIGNsZWFyUHJlZmVyZW5jZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIpIHJldHVybjtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIuY2xlYXIoKTtcbiAgICB0aGlzLl9oYXNTYXZlZENvbmZpZyA9IGZhbHNlO1xuXG4gICAgLy8gQ2FwdHVyZXIgbGVzIGR5bmFtaWMgc2xpY2VzIGFjdGl2ZXMgQVZBTlQgbGUgcmVzZXQgKHJlc2V0VG9EZWZhdWx0cygpIGxlcyB2aWRlKVxuICAgIGNvbnN0IGR5bmFtaWNTbGljZXNUb1JlbW92ZSA9IHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMuc2xpY2UoKTtcblxuICAgIC8vIFJlc2V0IGNvbXBsZXQgZGUgbCfDqXRhdCB2ZXJzIGxlcyB2YWxldXJzIHBhciBkw6lmYXV0IGRlIGxhIGNvbmZpZ1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7fTtcbiAgICB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XG4gICAgLy8gU3luY2hyb25pc2VyIGwnw6l0YXQgaW50ZXJuZSBkdSBzbGljZS1wYW5lbCA6IHNpIGxlIGNvbXBvc2FudCBlc3QgZW4gw6l0YXQgY29sbGFwc2VkXG4gICAgLy8gKGwndXRpbGlzYXRldXIgbCdhdmFpdCBmZXJtw6kgYXByw6hzIGxhIHNhdXZlZ2FyZGUpLCBsZSByb3V2cmlyIGV4cGxpY2l0ZW1lbnQgcG91clxuICAgIC8vIMOpdml0ZXIgcXVlIGRpc3BsYXk6bm9uZSBzb2l0IHJldGlyw6kgbWFpcyBxdWUgaXNDb2xsYXBzZWQgaW50ZXJuZSByZXN0ZSDDoCB0cnVlLlxuICAgIGlmICh0aGlzLnNsaWNlUGFuZWxSZWY/LmlzQ29sbGFwc2VkKSB7XG4gICAgICB0aGlzLnNsaWNlUGFuZWxSZWYudG9nZ2xlUGFuZWwoKTtcbiAgICB9XG4gICAgdGhpcy5fZ3JvdXBCeS5yZXNldCgpO1xuICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZChmYWxzZSk7XG5cbiAgICAvLyBTbGljZXMgc3RhdGlxdWVzIDogcmV2ZW5pciBhdXggc2V1bGVzIGNlbGxlcyBjYWNow6llcyBwYXIgbGEgY29uZmlnIChwYXMgcGFyIGwndXRpbGlzYXRldXIpXG4gICAgdGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzID0gbmV3IFNldCh0aGlzLl9jb25maWdIaWRkZW5LZXlzKTtcbiAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlSGlkZGVuU3RhdGljS2V5cyh0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMpO1xuXG4gICAgLy8gQ29sb25uZXMgZXQgZ3JvdXBCeSA6IHJlc2V0IHZpYSBsYSBmYWNhZGUgKHJldGlyZSBsZXMgb3B0aW9ubmVsbGVzLCByZW1ldCBsJ29yZHJlIGNvbmZpZylcbiAgICB0aGlzLl9vcmdhbml6ZXIucmVzZXRUb0RlZmF1bHRzKCk7XG4gICAgdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gZmFsc2U7XG5cbiAgICAvLyBEeW5hbWljIHNsaWNlcyA6IGxlcyByZXRpcmVyIGR1IHNsaWNlIHBhbmVsIGF2ZWMgbGEgbGlzdGUgY2FwdHVyw6llIGF2YW50IGxlIHJlc2V0XG4gICAgZHluYW1pY1NsaWNlc1RvUmVtb3ZlLmZvckVhY2goY29sID0+IHtcbiAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8ucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoY29sLmtleSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaWx0cmUgZGUgc2xpY2UgYWN0aWZcbiAgICB0aGlzLmFjdGl2ZVNsaWNlRmlsdGVyID0gKCkgPT4gdHJ1ZTtcbiAgICBpZiAodGhpcy5zbGljZVBhbmVsUmVmKSB0aGlzLnNsaWNlUGFuZWxSZWYucmVzdG9yZUZpbHRlcnMoe30pO1xuXG4gICAgLy8gUmFmcmHDrmNoaXQgdG91dGUgbGEgdnVlXG4gICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcbiAgICB0aGlzLnJlbmRlcmVkQ29sdW1ucyA9IHRoaXMuYWN0aXZlRmllbGRzLm1hcChjID0+IGMua2V5KTtcbiAgICB0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cyA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycyA9IG51bGw7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG5cbiAgICB0aGlzLl9zaG93UHJlZmVyZW5jZXNNZXNzYWdlKHRoaXMuaTE4bi5wcmVmZXJlbmNlc0NsZWFyZWRNZXNzYWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzTWVzc2FnZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3Nob3dQcmVmZXJlbmNlc01lc3NhZ2UobXNnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgIT09IG51bGwpIGNsZWFyVGltZW91dCh0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lcik7XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlID0gbXNnO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlID0gbnVsbDtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9LCA0MDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UHJlZmVyZW5jZXMoc2F2ZWQ6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXNhdmVkKSByZXR1cm47XG4gICAgLy8gUmVjaGVyY2hlXG4gICAgaWYgKHNhdmVkLnNlYXJjaCkgdGhpcy5zZWFyY2hRdWVyeSA9IHNhdmVkLnNlYXJjaDtcbiAgICAvLyBMYXJnZXVycyBjb2xvbm5lc1xuICAgIGlmIChzYXZlZC5jb2x1bW5XaWR0aHMpIHRoaXMuX2NvbHVtbldpZHRocyA9IHsgLi4uc2F2ZWQuY29sdW1uV2lkdGhzIH07XG4gICAgLy8gR3JvdXAgYnlcbiAgICBpZiAoc2F2ZWQuZ3JvdXBCeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldEdyb3VwQnlBbmRFbWl0KHNhdmVkLmdyb3VwQnkpO1xuICAgICAgaWYgKHNhdmVkLmdyb3VwQnkpIHtcbiAgICAgICAgdGhpcy5fZ3JvdXBCeS5zZXREZWZhdWx0Q29sbGFwc2VkKHRydWUpO1xuICAgICAgICB0aGlzLl9ncm91cEJ5LnJlc2V0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIMOJdGF0IHBhbm5lYXUgc2xpY2VcbiAgICBpZiAoc2F2ZWQuc2xpY2VQYW5lbENvbGxhcHNlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gc2F2ZWQuc2xpY2VQYW5lbENvbGxhcHNlZDtcbiAgICAvLyBTbGljZXMgc3RhdGlxdWVzIGNhY2jDqWVzIOKAlCBvbiB1dGlsaXNlIGxhIHZhbGV1ciBleGFjdGUgc2F1dmVnYXJkw6llIChwYXMgbGVzIGRlZmF1bHRzIGRlIGNvbmZpZylcbiAgICBpZiAoc2F2ZWQuaGlkZGVuU2xpY2VLZXlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyA9IG5ldyBTZXQoc2F2ZWQuaGlkZGVuU2xpY2VLZXlzKTtcbiAgICAgIHRoaXMuX29yZ2FuaXplci51cGRhdGVIaWRkZW5TdGF0aWNLZXlzKHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgfVxuICAgIC8vIENvbG9ubmVzIHZpc2libGVzICsgb3JkcmUg4oCUIHJlY29uc3RydWl0IGFjdGl2ZUZpZWxkcyBlbiB1bmUgc2V1bGUgcGFzc2UuXG4gICAgLy8gT24gcGFydCBkZSBzYXZlZC5jb2x1bW5PcmRlciAob3JkcmUgc2F1dmVnYXJkw6kpIHNpIGRpc3BvbmlibGUsIHNpbm9uIHNhdmVkLnZpc2libGVDb2x1bW5zLlxuICAgIC8vIENlbGEgZ8OocmUgw6AgbGEgZm9pcyA6IGNvbG9ubmVzIG9wdGlvbm5lbGxlcyBham91dMOpZXMsIGNvbG9ubmVzIHJldGlyw6llcywgZXQgcsOpb3Jkb25uYW5jZW1lbnQuXG4gICAgY29uc3QgdGFyZ2V0S2V5cyA9IHNhdmVkLmNvbHVtbk9yZGVyID8/IHNhdmVkLnZpc2libGVDb2x1bW5zO1xuICAgIGlmICh0YXJnZXRLZXlzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbEJ5S2V5ID0gbmV3IE1hcCgodGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdKS5tYXAoYyA9PiBbYy5rZXksIGNdKSk7XG4gICAgICAvLyBDb2xvbm5lcyBkYW5zIGwnb3JkcmUgc2F1dmVnYXJkw6kgKG9uIG5lIGdhcmRlIHF1ZSBjZWxsZXMgY29ubnVlcyBkZSBsYSBjb25maWcpXG4gICAgICBjb25zdCBvcmRlcmVkID0gdGFyZ2V0S2V5c1xuICAgICAgICAubWFwKGtleSA9PiBhbGxCeUtleS5nZXQoa2V5KSlcbiAgICAgICAgLmZpbHRlcigoYyk6IGMgaXMgVGFibGVDb2x1bW5Qcm92aWRlcjxUPiA9PiBjICE9PSB1bmRlZmluZWQpO1xuICAgICAgLy8gQ29sb25uZXMgYWN0aXZlcyBhY3R1ZWxsbGVtZW50IG5vbiBwcsOpc2VudGVzIGRhbnMgdGFyZ2V0S2V5cyAobm9uLW9wdGlvbmFsIHBhc3PDqWVzIHNvdXMgc2lsZW5jZSlcbiAgICAgIC8vIOKGkiBvbiBsZXMgZXhjbHV0IDogbCd1dGlsaXNhdGV1ciBhdmFpdCBleHBsaWNpdGVtZW50IGNob2lzaSBjZSBzb3VzLWVuc2VtYmxlXG4gICAgICBpZiAob3JkZXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX29yZ2FuaXplci5zZXRBY3RpdmVGaWVsZHMob3JkZXJlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZpbHRyZXMgYWN0aWZzIGR1IHNsaWNlIHBhbmVsXG4gICAgLy8gRmlsdHJlcyBhY3RpZnMgZHUgc2xpY2UgcGFuZWwg4oCUIHRvdWpvdXJzIHN0b2Nrw6lzIGVuIHBlbmRpbmcgOlxuICAgIC8vIGFwcGxpcXXDqXMgcGFyIF9hcHBseVBlbmRpbmdEeW5hbWljU2xpY2VLZXlzIChzaSBkeW5hbWljIHNsaWNlcykgb3VcbiAgICAvLyBwYXIgX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsIChxdWFuZCBsZXMgZG9ubsOpZXMgYXJyaXZlbnQgZXQgcmVuZGVudCBsZSBwYW5lbCB2aXNpYmxlKVxuICAgIGlmIChzYXZlZC5zbGljZUZpbHRlcnMgJiYgT2JqZWN0LmtleXMoc2F2ZWQuc2xpY2VGaWx0ZXJzKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPSBzYXZlZC5zbGljZUZpbHRlcnM7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRmlsdGVyQ29sdW1uS2V5cyA9IE9iamVjdC5lbnRyaWVzKHNhdmVkLnNsaWNlRmlsdGVycyA/PyB7fSlcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlc10pID0+IGtleS5zdGFydHNXaXRoKCdjb2x1bW46JykgJiYgdmFsdWVzLmxlbmd0aCA+IDApXG4gICAgICAubWFwKChba2V5XSkgPT4ga2V5LnNsaWNlKCdjb2x1bW46Jy5sZW5ndGgpKTtcbiAgICBjb25zdCBzdGF0aWNTbGljZUtleXMgPSBuZXcgU2V0KFxuICAgICAgKHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzID8/IFtdKVxuICAgICAgICAubWFwKHNsaWNlID0+IHNsaWNlLmNvbHVtbktleSlcbiAgICAgICAgLmZpbHRlcigoa2V5KToga2V5IGlzIHN0cmluZyA9PiAhIWtleSlcbiAgICApO1xuICAgIGNvbnN0IGR5bmFtaWNTbGljZUtleXMgPSBuZXcgU2V0KHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFsbER5bmFtaWNGaWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLmtleSkpO1xuXG4gICAgLy8gVW4gZmlsdHJlIHBlcnNpc3RhbnQgZG9pdCB0b3Vqb3VycyByZXRyb3V2ZXIgc2Egc2xpY2UgOiB1bmUgcHLDqWbDqXJlbmNlXG4gICAgLy8gYW5jaWVubmUgb3UgaW5jb21wbMOodGUgbmUgcGV1dCBwYXMgbGFpc3NlciB1biBmaWx0cmUgc2FucyBwYW5uZWF1IHZpc2libGUuXG4gICAgYWN0aXZlRmlsdGVyQ29sdW1uS2V5c1xuICAgICAgLmZpbHRlcihrZXkgPT4gc3RhdGljU2xpY2VLZXlzLmhhcyhrZXkpKVxuICAgICAgLmZvckVhY2goa2V5ID0+IHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cy5kZWxldGUoa2V5KSk7XG4gICAgdGhpcy5fb3JnYW5pemVyLnVwZGF0ZUhpZGRlblN0YXRpY0tleXModGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzKTtcblxuICAgIC8vIFVuZSBjbMOpIGRlIGZpbHRyZSBzdXIgdW5lIGNvbG9ubmUgbm9uIHN0YXRpcXVlIGTDqXNpZ25lIHVuZSBzbGljZSBkeW5hbWlxdWUuXG4gICAgLy8gRWxsZSBjb21wbMOodGUgZHluYW1pY1NsaWNlS2V5cyBwb3VyIGxlcyBjb25maWd1cmF0aW9ucyBzYXV2ZWdhcmTDqWVzIGF2YW50XG4gICAgLy8gcXVlIGNlIGNoYW1wIG5lIHNvaXQgcGVyc2lzdGFudC5cbiAgICBjb25zdCBwZXJzaXN0ZWREeW5hbWljS2V5cyA9IFtcbiAgICAgIC4uLihzYXZlZC5keW5hbWljU2xpY2VLZXlzID8/IFtdKSxcbiAgICAgIC4uLmFjdGl2ZUZpbHRlckNvbHVtbktleXMsXG4gICAgXTtcbiAgICBjb25zdCB1bmlxdWVEeW5hbWljS2V5cyA9IFsuLi5uZXcgU2V0KHBlcnNpc3RlZER5bmFtaWNLZXlzKV0uZmlsdGVyKFxuICAgICAga2V5ID0+ICFzdGF0aWNTbGljZUtleXMuaGFzKGtleSkgJiYgZHluYW1pY1NsaWNlS2V5cy5oYXMoa2V5KVxuICAgICk7XG4gICAgaWYgKHVuaXF1ZUR5bmFtaWNLZXlzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMgPSB1bmlxdWVEeW5hbWljS2V5cztcbiAgICB9XG4gIH1cblxuICBjYW5SZW1vdmVDb2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX29yZ2FuaXplci5hbGxvd0ZpZWxkUmVtb3ZhbCAmJlxuICAgICAgY29sdW1uLnJlbW92YWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuYWN0aXZlRmllbGRzLmxlbmd0aCA+IDFcbiAgICApO1xuICB9XG5cbiAgaXNDZWxsRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbDtcbiAgfVxuXG4gIGFzVGl0bGUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICAvLyDilIDilIAgRXhwb3J0IENTVlxuXG4gIG9uRXhwb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuX2V4cG9ydC5leHBvcnQoKTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlIGxlcyBsaWduZXMgZXQgbCfDqXRhdCBhY3R1ZWxsZW1lbnQgdmlzaWJsZXMgZGFucyB1biBzbmFwc2hvdCBhdXRvbm9tZS4gKi9cbiAgY3JlYXRlVmlzdWFsU25hcHNob3QobGFiZWwgPSB0aGlzLnRpdGxlIHx8ICdUYWJsZWF1Jyk6IFZpc3VhbFNuYXBzaG90RHJhZnQge1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChjb250YWluc0Z1bmN0aW9uKHRoaXMucmVzb2x2ZWRDb25maWcpKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKCdDZXJ0YWluZXMgZm9uY3Rpb25zIGRlIGNvbmZpZ3VyYXRpb24gbmUgc29udCBwYXMgdHJhbnNwb3J0YWJsZXMuJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgbGFiZWwsXG4gICAgICBjb25maWc6IGNsb25lU2VyaWFsaXphYmxlKHtcbiAgICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICAgIGNvbHVtbnM6IHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucz8ubWFwKGNvbHVtbiA9PiBzZXJpYWxpemFibGVDb2x1bW4oY29sdW1uKSksXG4gICAgICAgIHNlYXJjaDogdGhpcy5yZXNvbHZlZENvbmZpZy5zZWFyY2gsXG4gICAgICAgIHBhZ2luYXRpb246IHRoaXMucmVzb2x2ZWRDb25maWcucGFnaW5hdGlvbixcbiAgICAgIH0pLFxuICAgICAgc3RhdGU6IGNsb25lU2VyaWFsaXphYmxlKHtcbiAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFF1ZXJ5LFxuICAgICAgICBncm91cEJ5OiB0aGlzLmFjdGl2ZUdyb3VwQnlLZXksXG4gICAgICAgIGNvbHVtbk9yZGVyOiB0aGlzLmFjdGl2ZUZpZWxkcy5tYXAoY29sdW1uID0+IGNvbHVtbi5rZXkpLFxuICAgICAgICB2aXNpYmxlQ29sdW1uczogdGhpcy5hY3RpdmVGaWVsZHMubWFwKGNvbHVtbiA9PiBjb2x1bW4ua2V5KSxcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4ID8/IDAsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gdGhpcy5wYWdlU2l6ZSxcbiAgICAgIH0pLFxuICAgICAgZGF0YTogY2xvbmVTZXJpYWxpemFibGUodGhpcy5fYWxsRmlsdGVyZWRSb3dzKSxcbiAgICAgIHdhcm5pbmdzLFxuICAgIH07XG4gIH1cblxuICAvKiogQXBwbGlxdWUgbCfDqXRhdCBjb21wYXRpYmxlIGV0IHJldG91cm5lIGxlcyBkb25uw6llcyDDoCBmb3VybmlyIGF1IGNvbXBvc2FudCBjaWJsZS4gKi9cbiAgYXBwbHlWaXN1YWxTbmFwc2hvdChzbmFwc2hvdDogVmlzdWFsU25hcHNob3QpOiBWaXN1YWxTbmFwc2hvdEFwcGx5UmVzdWx0IHtcbiAgICBpZiAoc25hcHNob3QudHlwZSAhPT0gJ3RhYmxlJykge1xuICAgICAgcmV0dXJuIHsgYXBwbGllZDogZmFsc2UsIHJlc3RvcmVkOiBbXSwgc2tpcHBlZDogWyd0eXBlJ10sIHdhcm5pbmdzOiBbJ0xlIHNuYXBzaG90IG5cXCdlc3QgcGFzIHVuIHRhYmxlYXUuJ10gfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LnN0YXRlIGFzIHtcbiAgICAgIHNlYXJjaD86IHN0cmluZztcbiAgICAgIGdyb3VwQnk/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgdmlzaWJsZUNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgICAgIGNvbHVtbk9yZGVyPzogc3RyaW5nW107XG4gICAgICBjb2x1bW5XaWR0aHM/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgIH07XG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IE1hcCgodGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdKS5tYXAoY29sdW1uID0+IFtjb2x1bW4ua2V5LCBjb2x1bW5dKSk7XG4gICAgY29uc3QgcmVxdWVzdGVkS2V5cyA9IHN0YXRlLmNvbHVtbk9yZGVyID8/IHN0YXRlLnZpc2libGVDb2x1bW5zID8/IFtdO1xuICAgIGNvbnN0IGNvbXBhdGlibGVLZXlzID0gcmVxdWVzdGVkS2V5cy5maWx0ZXIoa2V5ID0+IGF2YWlsYWJsZS5oYXMoa2V5KSk7XG4gICAgY29uc3Qgc2tpcHBlZCA9IHJlcXVlc3RlZEtleXMuZmlsdGVyKGtleSA9PiAhYXZhaWxhYmxlLmhhcyhrZXkpKTtcbiAgICBjb25zdCByZXN0b3JlZDogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChjb21wYXRpYmxlS2V5cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX29yZ2FuaXplci5zZXRBY3RpdmVGaWVsZHMoY29tcGF0aWJsZUtleXMubWFwKGtleSA9PiBhdmFpbGFibGUuZ2V0KGtleSkhKSk7XG4gICAgICByZXN0b3JlZC5wdXNoKCdjb2x1bW5zJyk7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGF0ZS5zZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gc3RhdGUuc2VhcmNoO1xuICAgICAgcmVzdG9yZWQucHVzaCgnc2VhcmNoJyk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5ncm91cEJ5ID09PSBudWxsIHx8IHR5cGVvZiBzdGF0ZS5ncm91cEJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSBzdGF0ZS5ncm91cEJ5ICYmIGF2YWlsYWJsZS5oYXMoc3RhdGUuZ3JvdXBCeSkgPyBzdGF0ZS5ncm91cEJ5IDogbnVsbDtcbiAgICAgIHRoaXMuc2V0R3JvdXBCeUFuZEVtaXQoZ3JvdXBLZXkpO1xuICAgICAgcmVzdG9yZWQucHVzaCgnZ3JvdXBCeScpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29sdW1uV2lkdGhzKSB7XG4gICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7IC4uLnN0YXRlLmNvbHVtbldpZHRocyB9O1xuICAgICAgcmVzdG9yZWQucHVzaCgnY29sdW1uV2lkdGhzJyk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHJldHVybiB7XG4gICAgICBhcHBsaWVkOiB0cnVlLFxuICAgICAgcmVzdG9yZWQsXG4gICAgICBza2lwcGVkLFxuICAgICAgd2FybmluZ3M6IHNuYXBzaG90Lndhcm5pbmdzID8/IFtdLFxuICAgICAgZGF0YTogY2xvbmVTZXJpYWxpemFibGUoc25hcHNob3QuZGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQaXBlbGluZSBkZSBkb25uw6llcyAocHJpdsOpKVxuXG4gIHByaXZhdGUgcmVmcmVzaFZpZXdNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNvbHZlZERhdGEgPSB0aGlzLnJlc29sdmVEYXRhKCk7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZyA9IHRoaXMuYnVpbGRFZmZlY3RpdmVDb25maWcoKTtcbiAgICB0aGlzLl9jb2x1bW5NYXAgPSBuZXcgTWFwKCh0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgfHwgW10pLm1hcChjID0+IFtjLmtleSwgY10pKTtcblxuICAgIGlmICghdGhpcy5faW5pdGlhbFNsaWNlUGFuZWxDb2xsYXBzZWRBcHBsaWVkKSB7XG4gICAgICB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gdGhpcy5yZXNvbHZlZENvbmZpZy5zbGljZVBhbmVsQ29sbGFwc2VkID09PSB0cnVlO1xuICAgICAgdGhpcy5faW5pdGlhbFNsaWNlUGFuZWxDb2xsYXBzZWRBcHBsaWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgSW5pdGlhbGlzZXIgbGUgZ2VzdGlvbm5haXJlIGRlIHByw6lmw6lyZW5jZXMgc2kgbCdvcHRpb24gZXN0IGFjdGl2w6llXG4gICAgY29uc3QgcHJlZnNJZCA9IHRoaXMucmVzb2x2ZWRDb25maWcucHJlZmVyZW5jZXM/LmVuYWJsZWRcbiAgICAgID8gdGhpcy5yZXNvbHZlZENvbmZpZy5wcmVmZXJlbmNlcy50YWJsZUlkXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudElkID0gcHJlZnNJZCA/PyBudWxsO1xuICAgIC8vIFByw6lmw6lyZW5jZXMgw6AgYXBwbGlxdWVyIGFwcsOocyBfb3JnYW5pemVyLnVwZGF0ZSgpIChxdWFuZCBhY3RpdmVGaWVsZHMgZXN0IGTDqWrDoCBwZXVwbMOpKVxuICAgIGxldCBwZW5kaW5nUHJlZnM6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChjdXJyZW50SWQgJiYgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyPy5rZXkgIT09ICgnanF0X3ByZWZzXycgKyBjdXJyZW50SWQpKSB7XG4gICAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIgPSBuZXcgVGFibGVQcmVmZXJlbmNlc01hbmFnZXIoY3VycmVudElkKTtcbiAgICAgIHRoaXMuX2hhc1NhdmVkQ29uZmlnID0gdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyLmhhc1NhdmVkKCk7XG4gICAgICBwZW5kaW5nUHJlZnMgPSB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIubG9hZCgpO1xuICAgIH0gZWxzZSBpZiAoIWN1cnJlbnRJZCkge1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyID0gbnVsbDtcbiAgICAgIHRoaXMuX2hhc1NhdmVkQ29uZmlnID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRMOpbMOoZ3VlIMOgIGxhIGZhY2FkZSA6IG1pc2Ugw6Agam91ciBkZSBsJ8OpdGF0IFZpZXcgKGNvbG9ubmVzLCBncm91cEJ5IG1ldGEsIHNsaWNlQnkgbWV0YSlcbiAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlKHtcbiAgICAgIGNvbmZpZzogdGhpcy5fb3JnYW5pemVyVmlld0NvbmZpZygpLFxuICAgICAgZmllbGRzOiB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW10sXG4gICAgICBzbGljZUNvbmZpZ3M6IHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzID8/IFtdLFxuICAgICAgZGVmYXVsdEdyb3VwQnk6IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdEdyb3VwQnksXG4gICAgfSk7XG5cbiAgICBpZiAoIXBlbmRpbmdQcmVmcyAmJiAhdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkICYmICF0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS51c2VyQ3VzdG9taXplZCAmJiB0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZCh0cnVlKTtcbiAgICAgIHRoaXMuX2dyb3VwQnkucmVzZXQoKTtcbiAgICAgIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRHcm91cFBhZ2VTaXplKCk7XG4gICAgICB0aGlzLmdyb3VwQnlDaGFuZ2UuZW1pdCh0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXkpO1xuICAgIH1cblxuICAgIC8vIFN5bmNocm9uaXNlIGxhIHByb3ByacOpdMOpIHN0YWJsZSAow6l2aXRlIE5HMDEwMCDigJQgbGEgZmFjYWRlIGVzdCBzb3VyY2UgZGUgdsOpcml0w6kpXG4gICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcblxuICAgIHRoaXMucmVuZGVyZWRDb2x1bW5zID0gdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpO1xuICAgIHRoaXMuZW1pdENvbHVtbnNDaGFuZ2VJZk5lZWRlZCgpO1xuXG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCB0aGlzLnJlc29sdmVQYWdlU2l6ZSgpO1xuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5yZXNvbHZlUGFnZVNpemVPcHRpb25zKCk7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5ID0gdGhpcy5yZXNvbHZlUGFnZVNpemVPcHRpb25zR3JvdXBCeSgpO1xuICAgIGlmICh0aGlzLmdyb3VwUGFnZVNpemUgIT09IDAgJiYgIXRoaXMucGFnZVNpemVPcHRpb25zR3JvdXBCeS5pbmNsdWRlcyh0aGlzLmdyb3VwUGFnZVNpemUpKSB7XG4gICAgICB0aGlzLmdyb3VwUGFnZVNpemUgPSB0aGlzLnJlc29sdmVEZWZhdWx0R3JvdXBQYWdlU2l6ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYXR0YWNoUGFnaW5hdG9yKCk7XG4gICAgdGhpcy5hdHRhY2hTb3J0KCk7XG5cbiAgICAvLyBSw6lpbml0aWFsaXNlIF9zdGF0aWNTbGljZUhpZGRlbktleXMgc2V1bGVtZW50IHNpIGxlcyBjbMOpcyBoaWRkZW4gZGUgbGEgY29uZmlnIG9udCB2cmFpbWVudCBjaGFuZ8OpXG4gICAgLy8gRVQgcXUnaWwgbid5IGEgcGFzIGRlIHByw6lmw6lyZW5jZXMgc2F1dmVnYXJkw6llcyAocXVpIGfDqXJlcm9udCBoaWRkZW5TbGljZUtleXMgZWxsZXMtbcOqbWVzKS5cbiAgICBjb25zdCBuZXdDb25maWdIaWRkZW4gPSBuZXcgU2V0PHN0cmluZz4oXG4gICAgICAodGhpcy5yZXNvbHZlZENvbmZpZy5zbGljZXMgPz8gW10pLmZpbHRlcihzID0+IHMuaGlkZGVuICYmIHMuY29sdW1uS2V5KS5tYXAocyA9PiBzLmNvbHVtbktleSEpXG4gICAgKTtcbiAgICBpZiAoIVRhYmxlQ29tcG9uZW50Ll9zZXRzRXF1YWwobmV3Q29uZmlnSGlkZGVuLCB0aGlzLl9jb25maWdIaWRkZW5LZXlzKSkge1xuICAgICAgdGhpcy5fY29uZmlnSGlkZGVuS2V5cyA9IG5ld0NvbmZpZ0hpZGRlbjtcbiAgICAgIC8vIE4nw6ljcmFzZXIgX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyBxdWUgc2kgb24gbidlc3QgUEFTIGVuIHRyYWluIGQnYXBwbGlxdWVyIGRlcyBwcmVmc1xuICAgICAgLy8gKHBlbmRpbmdQcmVmcyBsZXMgZ8OocmVyYSBsdWktbcOqbWUgdmlhIF9hcHBseVByZWZlcmVuY2VzIOKGkiBoaWRkZW5TbGljZUtleXMpXG4gICAgICBpZiAoIXBlbmRpbmdQcmVmcykge1xuICAgICAgICB0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMgPSBuZXcgU2V0KG5ld0NvbmZpZ0hpZGRlbik7XG4gICAgICAgIHRoaXMuX29yZ2FuaXplci51cGRhdGVIaWRkZW5TdGF0aWNLZXlzKHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbGlxdWUgbGVzIHByw6lmw6lyZW5jZXMgSUNJLCBBUFLDiFMgX29yZ2FuaXplci51cGRhdGUoKSBFVCBhcHLDqHMgX2NvbmZpZ0hpZGRlbktleXMgbWlzIMOgIGpvdXIsXG4gICAgLy8gbWFpcyBhdmFudCBfY29tcHV0ZVNsaWNlQ29uZmlncygpIHBvdXIgcXVlIGhpZGRlblNsaWNlS2V5cyBzb2l0IGTDqWrDoCByZXN0YXVyw6kuXG4gICAgaWYgKHBlbmRpbmdQcmVmcykge1xuICAgICAgdGhpcy5fYXBwbHlQcmVmZXJlbmNlcyhwZW5kaW5nUHJlZnMpO1xuICAgICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcbiAgICAgIHRoaXMucmVuZGVyZWRDb2x1bW5zID0gdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpO1xuICAgICAgdGhpcy5lbWl0Q29sdW1uc0NoYW5nZUlmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvcHJpw6l0w6lzIHN0YWJsZXMgcG91ciBsZXMgYmluZGluZ3MgZHUgdGVtcGxhdGVcbiAgICAvLyBPbiByZWNhbGN1bGUgX3NsaWNlQ29uZmlncyBlbiByZWZsw6l0YW50IGwnw6l0YXQgY291cmFudCBkZXMgc2xpY2VzIGNhY2jDqWVzLFxuICAgIC8vIHBvdXIgcXVlIFNsaWNlUGFuZWxDb21wb25lbnQubmdPbkluaXQgcmXDp29pdmUgbGEgYm9ubmUgdmFsZXVyIGRlIGBoaWRkZW5gXG4gICAgLy8gbcOqbWUgcXVhbmQgbGUgY29tcG9zYW50IGVzdCBjcsOpw6kgcG91ciBsYSAxw6hyZSBmb2lzIGFwcsOocyB1biB0b2dnbGUuXG4gICAgdGhpcy5fc2V0U2xpY2VDb25maWdzKHRoaXMuX2NvbXB1dGVTbGljZUNvbmZpZ3MoKSk7XG4gICAgdGhpcy5fc2xpY2VDb2x1bW5zID0gdGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdO1xuICAgIHRoaXMuX3NsaWNlRGF0YSA9IHRoaXMuX3Jlc29sdmVkRGF0YTtcbiAgICB0aGlzLl9zbGljZVNob3dUb2dnbGUgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmVuYWJsZVNsaWNlVG9nZ2xlICE9PSBmYWxzZTtcbiAgICB0aGlzLl9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCgpO1xuICAgIGlmICghdGhpcy5fYWN0aXZlU29ydC5hY3RpdmUgJiYgdGhpcy5yZXNvbHZlZENvbmZpZy5kZWZhdWx0U29ydCkge1xuICAgICAgdGhpcy5fbWF0U29ydEFjdGl2ZSA9IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQuYWN0aXZlO1xuICAgICAgdGhpcy5fbWF0U29ydERpcmVjdGlvbiA9IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQuZGlyZWN0aW9uO1xuICAgIH1cbiAgICB0aGlzLl9idWlsZFNsaWNlQnlNZW51SXRlbXMoKTtcblxuICAgIHRoaXMuX3JlcXVlc3RMYXp5Q29sdW1ucygpO1xuICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gIH1cblxuICAvKiogUmV0b3VybmUgdW5pcXVlbWVudCBsZXMgc2xpY2VzIHZpc2libGVzIChub24gY2FjaMOpZXMgcGFyIF9zdGF0aWNTbGljZUhpZGRlbktleXMpLlxuICAgKiBMZSBTbGljZVBhbmVsQ29tcG9uZW50IGFmZmljaGUgdG91dCBjZSBxdSdpbCByZcOnb2l0IOKAlCBjJ2VzdCBpY2kgcXVlIHNlIGZhaXQgbGUgZmlsdHJhZ2UuICovXG4gIHByaXZhdGUgX2NvbXB1dGVTbGljZUNvbmZpZ3MoKTogU2xpY2VDb25maWc8VD5bXSB7XG4gICAgcmV0dXJuICh0aGlzLnJlc29sdmVkQ29uZmlnLnNsaWNlcyA/PyBbXSkuZmlsdGVyKFxuICAgICAgcyA9PiAhcy5jb2x1bW5LZXkgfHwgIXRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cy5oYXMocy5jb2x1bW5LZXkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9zZXRzRXF1YWwoYTogU2V0PHN0cmluZz4sIGI6IFNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2IG9mIGEpIGlmICghYi5oYXModikpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkU2xpY2VCeU1lbnVJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0aWNTbGljZU1hcCA9IG5ldyBNYXAodGhpcy5fc3RhdGljU2xpY2VzRm9yTWVudS5tYXAocyA9PiBbcy5rZXksIHNdKSk7XG4gICAgY29uc3QgZHluYW1pY1NsaWNlU2V0ID0gbmV3IFNldCh0aGlzLl9hbGxEeW5hbWljU2xpY2VDb2x1bW5zLm1hcChjID0+IGMua2V5KSk7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGl0ZW1zOiBBcnJheTx7IGlzU3RhdGljOiBib29sZWFuOyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZzsgY29sPzogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGNvbC5rZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChzdGF0aWNTbGljZU1hcC5oYXMoY29sLmtleSkpIHtcbiAgICAgICAgY29uc3QgcyA9IHN0YXRpY1NsaWNlTWFwLmdldChjb2wua2V5KSE7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBpc1N0YXRpYzogdHJ1ZSwga2V5OiBzLmtleSwgdGl0bGU6IHMudGl0bGUsIGljb246IHMuaWNvbiB9KTtcbiAgICAgICAgc2Vlbi5hZGQoY29sLmtleSk7XG4gICAgICB9IGVsc2UgaWYgKGR5bmFtaWNTbGljZVNldC5oYXMoY29sLmtleSkpIHtcbiAgICAgICAgaXRlbXMucHVzaCh7IGlzU3RhdGljOiBmYWxzZSwga2V5OiBjb2wua2V5LCB0aXRsZTogdGhpcy5jb2xMYWJlbChjb2wpLCBpY29uOiBjb2wuaWNvbiwgY29sIH0pO1xuICAgICAgICBzZWVuLmFkZChjb2wua2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3N0YXRpY1NsaWNlc0Zvck1lbnUpIHtcbiAgICAgIGlmICghc2Vlbi5oYXMocy5rZXkpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBpc1N0YXRpYzogdHJ1ZSwga2V5OiBzLmtleSwgdGl0bGU6IHMudGl0bGUsIGljb246IHMuaWNvbiB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc2xpY2VCeU1lbnVJdGVtcyA9IGl0ZW1zO1xuICAgIHRoaXMuX2ludmFsaWRhdGVPcmdhbml6ZXJDb25maWcoKTsgLy8gbGVzIHNsaWNlcyBvbnQgY2hhbmfDqVxuICB9XG5cbiAgZ2V0IHNsaWNlQnlNZW51SXRlbXMoKSB7IHJldHVybiB0aGlzLl9zbGljZUJ5TWVudUl0ZW1zOyB9XG5cbiAgb25TbGljZU1lbnVJdGVtQ2xpY2soaXRlbTogeyBpc1N0YXRpYzogYm9vbGVhbjsga2V5OiBzdHJpbmc7IGNvbD86IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4gfSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmlzU3RhdGljKSB7XG4gICAgICB0aGlzLnRvZ2dsZVN0YXRpY1NsaWNlKGl0ZW0ua2V5KTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0uY29sKSB7XG4gICAgICB0aGlzLnRvZ2dsZUR5bmFtaWNTbGljZShpdGVtLmNvbCk7XG4gICAgfVxuICB9XG5cbiAgaXNTbGljZU1lbnVJdGVtQWN0aXZlKGl0ZW06IHsgaXNTdGF0aWM6IGJvb2xlYW47IGtleTogc3RyaW5nIH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbS5pc1N0YXRpYyA/IHRoaXMuaXNTdGF0aWNTbGljZVZpc2libGUoaXRlbS5rZXkpIDogdGhpcy5pc0R5bmFtaWNTbGljZUFjdGl2ZShpdGVtLmtleSk7XG4gIH1cblxuICBwcml2YXRlIF9zY2hlZHVsZVJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3BlbmRpbmdSZW5kZXIpO1xuICAgICAgdGhpcy5fcGVuZGluZ1JlbmRlciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9wZW5kaW5nUmVuZGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdSZW5kZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuX2V4ZWN1dGVSZW5kZXIoKSk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2V4ZWN1dGVSZW5kZXIoKTogdm9pZCB7XG4gICAgY29uc3QgY2F0ZWdvcnlSb3dzID0gdGhpcy5nZXRDYXRlZ29yeUZpbHRlcmVkRGF0YSgpO1xuICAgIGlmICh0aGlzLmFjdGl2ZUdyb3VwQnlLZXkpIHtcbiAgICAgIC8vIEVuIG1vZGUgZ3JvdXBCeSwgcHJvamVjdFJvd3MgZ8OocmUgdG91dCBsZSB0cmkgaW50ZXJuZW1lbnQg4oCUIHBhcyBkZSBzb3J0IGdsb2JhbCBpbnV0aWxlXG4gICAgICB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MgPSBjYXRlZ29yeVJvd3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbXBhcmVGbiA9IHRoaXMuX2J1aWxkU29ydENvbXBhcmF0b3IoY2F0ZWdvcnlSb3dzKTtcbiAgICAgIHRoaXMuX2FsbEZpbHRlcmVkUm93cyA9IGNvbXBhcmVGbiA/IFsuLi5jYXRlZ29yeVJvd3NdLnNvcnQoY29tcGFyZUZuKSA6IGNhdGVnb3J5Um93cztcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBwYWdpbmF0b3IgYXZlYyBsZSBub3V2ZWF1IHRvdGFsXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICBjb25zdCBzYXZlZEluZGV4ID0gdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPz8gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4O1xuICAgICAgY29uc3QgbWF4UGFnZSA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCh0aGlzLl9hbGxGaWx0ZXJlZFJvd3MubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZSkgLSAxKTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLmxlbmd0aCA9IHRoaXMuX2FsbEZpbHRlcmVkUm93cy5sZW5ndGg7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSBNYXRoLm1pbihzYXZlZEluZGV4LCBtYXhQYWdlKTtcbiAgICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9qZWN0Q3VycmVudFBhZ2UoKTtcbiAgICAvLyBkZXRlY3RDaGFuZ2VzKCkgYXUgbGlldSBkZSBtYXJrRm9yQ2hlY2soKSA6IG1ldCDDoCBqb3VyIHVuaXF1ZW1lbnQgQ0UgY29tcG9zYW50XG4gICAgLy8gc2FucyBkw6ljbGVuY2hlciB1biBjeWNsZSBDRCBnbG9iYWwgcXVpIHByb3ZvcXVlcmFpdCBORzAxMDAgZGFucyBsZXMgcGFyZW50cy5cbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJvamVjdEN1cnJlbnRQYWdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUdyb3VwQnlLZXkpIHtcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEgPSB0aGlzLnByb2plY3RSb3dzKHRoaXMuX2FsbEZpbHRlcmVkUm93cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwO1xuICAgIGNvbnN0IHN0YXJ0ID0gcGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZTtcbiAgICBjb25zdCBwYWdlUm93cyA9IHRoaXMuX2FsbEZpbHRlcmVkUm93cy5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKTtcblxuICAgIGNvbnN0IHByb2plY3RlZDogYW55W10gPSBbXTtcbiAgICBwYWdlUm93cy5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHN0YXJ0ICsgaTtcbiAgICAgIGNvbnN0IHA6IGFueSA9IHsgW1JPV19SQVdfS0VZXTogcm93LCBbUk9XX0lOREVYX0tFWV06IGlkeCB9O1xuICAgICAgdGhpcy5hY3RpdmVGaWVsZHMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIHBbY29sLmtleV0gPSB0aGlzLnJlc29sdmVDZWxsVmFsdWUoY29sLCByb3csIGlkeCk7XG4gICAgICB9KTtcbiAgICAgIHByb2plY3RlZC5wdXNoKHApO1xuICAgIH0pO1xuICAgIHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEgPSBwcm9qZWN0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRWZmZWN0aXZlQ29uZmlnKCk6IFRhYmxlUHJvdmlkZXI8VD4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLl9yZXNvbHZlZERhdGE7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5fbm9ybWFsaXplQ29sdW1ucyhcbiAgICAgIGNvbmZpZy5jb2x1bW5zIHx8XG4gICAgICB0aGlzLmNvbHVtbnNDb25maWcgfHxcbiAgICAgIHRoaXMucmVzb2x2ZUNvbHVtbnNGcm9tQ29tcGF0KHJvd3MpLFxuICAgICk7XG5cbiAgICAvLyBNb2RlIEhUTUwgOiBbdmlld10gcHJlbmQgbGUgZGVzc3VzIHN1ciBjb25maWcudmlldyBzaSBmb3VybmkgKFBoYXNlIDMpLlxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXcgPz8gY29uZmlnLnZpZXc7XG5cbiAgICBjb25zdCBhdXRvVGFibGVJZCA9IGNvbmZpZy5wcmVmZXJlbmNlcz8udGFibGVJZCB8fCBUYWJsZUNvbXBvbmVudC5faGFzaENvbHVtbnMoKGNvbHVtbnMgfHwgW10pLm1hcChjID0+IGMua2V5KSk7XG4gICAgY29uc3QgZXhwb3J0Q29uZmlnOiBUYWJsZUV4cG9ydENvbmZpZzxUPiA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBmaWxlbmFtZTogYXV0b1RhYmxlSWQsXG4gICAgICAuLi5jb25maWcuZXhwb3J0LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmVmc0NvbmZpZzogVGFibGVQcmVmZXJlbmNlc0NvbmZpZyA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0YWJsZUlkOiBhdXRvVGFibGVJZCxcbiAgICAgIC4uLmNvbmZpZy5wcmVmZXJlbmNlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICB2aWV3LFxuICAgICAgc2xpY2VzOiBjb25maWcuc2xpY2VzIHx8IFtdLFxuICAgICAgZW5hYmxlU2xpY2VUb2dnbGU6IGNvbmZpZy5lbmFibGVTbGljZVRvZ2dsZSA/PyB0cnVlLFxuICAgICAgZXhwb3J0OiBleHBvcnRDb25maWcsXG4gICAgICBwcmVmZXJlbmNlczogcHJlZnNDb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBVbmUgY29sb25uZSBsYXp5IGVzdCBmb3Jjw6ltZW50IG9wdGlvbm5lbGxlIDogYG9wdGlvbmFsYCBlc3QgaW1wbGljaXRlLCBldCBgb3B0aW9uYWw6IGZhbHNlYCBlc3QgcmVmdXPDqS4gKi9cbiAgcHJpdmF0ZSBfbm9ybWFsaXplQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10pOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIGlmIChjb2x1bW5zID09PSB0aGlzLl9jb2x1bW5zU291cmNlKSByZXR1cm4gdGhpcy5fY29sdW1uc05vcm1hbGl6ZWQhO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb2x1bW5zLm1hcChjb2x1bW4gPT4gdGhpcy5fd2l0aEltcGxpZWRPcHRpb25hbChjb2x1bW4pKTtcbiAgICBjb25zdCByZXN1bHQgPSBub3JtYWxpemVkLnNvbWUoKGNvbHVtbiwgaW5kZXgpID0+IGNvbHVtbiAhPT0gY29sdW1uc1tpbmRleF0pID8gbm9ybWFsaXplZCA6IGNvbHVtbnM7XG4gICAgdGhpcy5fY29sdW1uc1NvdXJjZSA9IGNvbHVtbnM7XG4gICAgdGhpcy5fY29sdW1uc05vcm1hbGl6ZWQgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgX3dpdGhJbXBsaWVkT3B0aW9uYWwoY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiB7XG4gICAgaWYgKCFjb2x1bW4ubGF6eSB8fCBjb2x1bW4ub3B0aW9uYWwpIHJldHVybiBjb2x1bW47XG4gICAgaWYgKChjb2x1bW4gYXMgeyBvcHRpb25hbD86IGJvb2xlYW4gfSkub3B0aW9uYWwgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBbanF1ZXJ5LXRhYmxlXSBMYSBjb2xvbm5lICcke2NvbHVtbi5rZXl9JyBlc3QgbGF6eSA6IGVsbGUgZXN0IGZvcmPDqW1lbnQgb3B0aW9ubmVsbGUgKG9wdGlvbmFsOiB0cnVlIGVzdCBpbXBsaWNpdGUpLiBgXG4gICAgICAgICsgJ29wdGlvbmFsOiBmYWxzZSBsYSBmZXJhaXQgZGVtYW5kZXIgZMOocyBsZSBwcmVtaWVyIHJlbmR1LCBzb2l0IHVuZSByZXF1w6p0ZSBkZSBwbHVzIHBvdXIgcmllbi4gJ1xuICAgICAgICArICdSZXRpcmV6IG9wdGlvbmFsOiBmYWxzZSwgb3UgbGF6eTogdHJ1ZSBzaSBsYSBjb2xvbm5lIGRvaXQgdG91am91cnMgw6p0cmUgYWZmaWNow6llLicsXG4gICAgICApO1xuICAgIH1cbiAgICBsZXQgaW1wbGllZCA9IHRoaXMuX29wdGlvbmFsTGF6eUNvbHVtbnMuZ2V0KGNvbHVtbik7XG4gICAgaWYgKCFpbXBsaWVkKSB7XG4gICAgICBpbXBsaWVkID0geyAuLi5jb2x1bW4sIG9wdGlvbmFsOiB0cnVlIH07XG4gICAgICB0aGlzLl9vcHRpb25hbExhenlDb2x1bW5zLnNldChjb2x1bW4sIGltcGxpZWQpO1xuICAgIH1cbiAgICByZXR1cm4gaW1wbGllZDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb25maWdTZWFyY2hSZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBjbGVhclRva2VuID0gdGhpcy5yZXNvbHZlZENvbmZpZy5jbGVhclNlYXJjaElucHV0O1xuICAgIGNvbnN0IHNob3VsZENsZWFyID0gISFjbGVhclRva2VuICYmIGNsZWFyVG9rZW4gIT09IHRoaXMuX2xhc3RDb25maWdDbGVhclNlYXJjaElucHV0O1xuXG4gICAgdGhpcy5fbGFzdENvbmZpZ0NsZWFyU2VhcmNoSW5wdXQgPSBjbGVhclRva2VuO1xuXG4gICAgaWYgKCFzaG91bGRDbGVhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5pdGlhbFNlYXJjaFF1ZXJ5KGlzRmlyc3RDb25maWdDaGFuZ2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWxRdWVyeSA9IHRoaXMucmVzb2x2ZWRDb25maWcuc2VhcmNoPy5pbml0aWFsUXVlcnk7XG4gICAgaWYgKGluaXRpYWxRdWVyeSA9PT0gdGhpcy5fbGFzdEluaXRpYWxTZWFyY2hRdWVyeVxuICAgICAgJiYgKHRoaXMuX2luaXRpYWxTZWFyY2hRdWVyeUFwcGxpZWQgfHwgIWlzRmlyc3RDb25maWdDaGFuZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdEluaXRpYWxTZWFyY2hRdWVyeSA9IGluaXRpYWxRdWVyeTtcbiAgICB0aGlzLl9pbml0aWFsU2VhcmNoUXVlcnlBcHBsaWVkID0gdHJ1ZTtcbiAgICBjb25zdCBuZXh0ID0gaW5pdGlhbFF1ZXJ5ID8/ICcnO1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNlYXJjaFF1ZXJ5ICE9PSBuZXh0O1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSBuZXh0O1xuICAgIGlmIChjaGFuZ2VkKSB0aGlzLm9uU2VhcmNoQ2hhbmdlKCk7XG4gICAgZWxzZSB0aGlzLl9ydW5TZWFyY2goKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9oYXNoQ29sdW1ucyhrZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyID0ga2V5cy5qb2luKCd8Jyk7XG4gICAgbGV0IGggPSAweDgxMWM5ZGM1O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgaCA9IE1hdGguaW11bChoLCAweDAxMDAwMTkzKSA+Pj4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICcwJyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEYXRhKCk6IFRbXSB7XG4gICAgaWYgKHRoaXMuX2xvYWRlclJvd3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkZXJSb3dzO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhU291cmNlICYmIEFycmF5LmlzQXJyYXkoKHRoaXMuZGF0YVNvdXJjZSBhcyBhbnkpLmRhdGEpKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZGF0YVNvdXJjZSBhcyBhbnkpLmRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uc0Zyb21Db21wYXQocm93czogVFtdKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnMubWFwKChrZXkpID0+ICh7XG4gICAgICAgIGtleSxcbiAgICAgICAgaGVhZGVyOiB0aGlzLmNvbHVtbkxhYmVscz8uW2tleV0gfHwgaHVtYW5pemVLZXkoa2V5KSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFJvdyA9IHJvd3NbMF0gYXMgYW55O1xuICAgIGlmICghZmlyc3RSb3cgfHwgdHlwZW9mIGZpcnN0Um93ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaXJzdFJvdykubWFwKChrZXkpID0+ICh7XG4gICAgICBrZXksXG4gICAgICBoZWFkZXI6IHRoaXMuY29sdW1uTGFiZWxzPy5ba2V5XSB8fCBodW1hbml6ZUtleShrZXkpLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2F0ZWdvcnlGaWx0ZXJlZERhdGEoKTogVFtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fcmVzb2x2ZWREYXRhO1xuXG4gICAgbGV0IGZpbHRlcmVkID0gZGF0YS5maWx0ZXIodGhpcy5hY3RpdmVTbGljZUZpbHRlcik7XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VhcmNoUXVlcnk/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgY29uc3QgcmVzdHJpY3RlZEtleXMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnNlYXJjaD8uc2VhcmNoQ29sdW1ucztcbiAgICAgIGNvbnN0IHNlYXJjaENvbHMgPSByZXN0cmljdGVkS2V5cz8ubGVuZ3RoXG4gICAgICAgID8gWy4uLnRoaXMuX2NvbHVtbk1hcC52YWx1ZXMoKV0uZmlsdGVyKGNvbCA9PiByZXN0cmljdGVkS2V5cy5pbmNsdWRlcyhjb2wua2V5KSlcbiAgICAgICAgOiBbLi4udGhpcy5fY29sdW1uTWFwLnZhbHVlcygpXTtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+XG4gICAgICAgIHNlYXJjaENvbHMuc29tZSgoY29sKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5nZXREaXNwbGF5VmFsdWVGb3JTZWFyY2goY29sLCByb3cpO1xuICAgICAgICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgcHJvamVjdFJvd3Mocm93czogVFtdKTogYW55W10ge1xuICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5hY3RpdmVHcm91cEJ5S2V5O1xuXG4gICAgaWYgKCFncm91cEtleSkge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2plY3RlZDogYW55ID0geyBbUk9XX1JBV19LRVldOiByb3csIFtST1dfSU5ERVhfS0VZXTogaW5kZXggfTtcbiAgICAgICAgdGhpcy5hY3RpdmVGaWVsZHMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgcHJvamVjdGVkW2NvbC5rZXldID0gdGhpcy5yZXNvbHZlQ2VsbFZhbHVlKGNvbCwgcm93LCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucHVzaChwcm9qZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwQ29sRGVmID0gdGhpcy5fY29sdW1uTWFwLmdldChncm91cEtleSk7XG4gICAgY29uc3QgZ3JvdXBMYXp5U3RhdHVzID0gZ3JvdXBDb2xEZWY/LmxhenkgPyAodGhpcy5fbGF6eUNvbHVtblN0YXR1cy5nZXQoZ3JvdXBLZXkpID8/ICdpZGxlJykgOiAnbG9hZGVkJztcblxuICAgIGlmIChncm91cExhenlTdGF0dXMgIT09ICdsb2FkZWQnKSB7XG4gICAgICB0aGlzLl90b3RhbEZpbHRlcmVkQ291bnQgPSByb3dzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGtleSA9IGdyb3VwTGF6eVN0YXR1cyA9PT0gJ2Vycm9yJyA/IEdST1VQX0tFWV9MQVpZX0VSUk9SIDogR1JPVVBfS0VZX0xBWllfTE9BRElORztcbiAgICAgIHJldHVybiBbeyBbR1JPVVBfSEVBREVSX01BUktFUl06IHRydWUsIFtST1dfR1JPVVBfS0VZXToga2V5LCBbUk9XX0dST1VQX0NPVU5UXTogcm93cy5sZW5ndGgsIFtST1dfR1JPVVBfUEFHRV06IDAsIFtST1dfR1JPVVBfUEFHRV9DT1VOVF06IDEgfV07XG4gICAgfVxuXG4gICAgY29uc3QgZWZmZWN0aXZlU29ydCA9IHRoaXMuX2FjdGl2ZVNvcnQuYWN0aXZlICYmIHRoaXMuX2FjdGl2ZVNvcnQuZGlyZWN0aW9uXG4gICAgICA/IHRoaXMuX2FjdGl2ZVNvcnRcbiAgICAgIDogdGhpcy5yZXNvbHZlZENvbmZpZy5kZWZhdWx0U29ydCA/PyB7IGFjdGl2ZTogJycsIGRpcmVjdGlvbjogJycgYXMgY29uc3QgfTtcblxuICAgIC8vIFbDqXJpZmllIHNpIGxlIGNhY2hlIGVzdCBlbmNvcmUgdmFsaWRlIChtw6ptZSByw6lmw6lyZW5jZSBkZSByb3dzICsgbcOqbWUgcGFyYW3DqHRyZXMgZGUgdHJpL2dyb3VwZSlcbiAgICBjb25zdCBjYWNoZVZhbGlkID1cbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUucm93cyA9PT0gcm93cyAmJlxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZS5rZXkgPT09IGdyb3VwS2V5ICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLnNvcnRPcmRlciA9PT0gdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlciAmJlxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZS5zb3J0QWN0aXZlID09PSAoZWZmZWN0aXZlU29ydC5hY3RpdmUgPz8gJycpICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLnNvcnREaXIgPT09IChlZmZlY3RpdmVTb3J0LmRpcmVjdGlvbiA/PyAnJyk7XG5cbiAgICBsZXQgZ3JvdXBPcmRlcjogc3RyaW5nW107XG4gICAgbGV0IGdyb3VwTWFwOiBNYXA8c3RyaW5nLCBUW10+O1xuXG4gICAgaWYgKGNhY2hlVmFsaWQpIHtcbiAgICAgIGdyb3VwT3JkZXIgPSB0aGlzLl9ncm91cENhY2hlIS5vcmRlcjtcbiAgICAgIGdyb3VwTWFwID0gdGhpcy5fZ3JvdXBDYWNoZSEubWFwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcsOpLWNhbGN1bCBkZXMgdmFsZXVycyBkZSBncm91cGUgZW4gdW4gc2V1bCBwYXNzYWdlICjDqXZpdGUgTyhuKSBmaW5kKCkgcGFyIGNvbXBhcmFpc29uKVxuICAgICAgY29uc3QgZ3JvdXBWYWx1ZUNhY2hlID0gbmV3IE1hcDxULCBzdHJpbmc+KCk7XG4gICAgICByb3dzLmZvckVhY2gocm93ID0+IGdyb3VwVmFsdWVDYWNoZS5zZXQocm93LCBTdHJpbmcodGhpcy5nZXRMYXp5QXdhcmVWYWx1ZShncm91cEtleSwgcm93KSA/PyAnJykpKTtcblxuICAgICAgLy8gUHLDqS1jYWxjdWwgZGVzIHZhbGV1cnMgZGUgdHJpICjDqXZpdGUgTyhuIGxvZyBuKSDDlyBnZXRMYXp5QXdhcmVWYWx1ZSBkYW5zIGxlIGNvbXBhcmF0ZXVyKVxuICAgICAgY29uc3QgZmFzdENvbXBhcmVGbiA9IHRoaXMuX2J1aWxkQ2FjaGVkU29ydENvbXBhcmF0b3Iocm93cywgZWZmZWN0aXZlU29ydCk7XG5cbiAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5yb3dzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhID0gZ3JvdXBWYWx1ZUNhY2hlLmdldChhKSE7XG4gICAgICAgIGNvbnN0IHZiID0gZ3JvdXBWYWx1ZUNhY2hlLmdldChiKSE7XG4gICAgICAgIGNvbnN0IGNtcCA9IHZhLmxvY2FsZUNvbXBhcmUodmIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlciA9PT0gJ2Rlc2MnID8gLWNtcCA6IGNtcDtcbiAgICAgIH0pO1xuXG4gICAgICBncm91cE9yZGVyID0gW107XG4gICAgICBncm91cE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUW10+KCk7XG4gICAgICBzb3J0ZWQuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSBncm91cFZhbHVlQ2FjaGUuZ2V0KHJvdykhO1xuICAgICAgICBpZiAoIWdyb3VwTWFwLmhhcyhncm91cFZhbHVlKSkge1xuICAgICAgICAgIGdyb3VwT3JkZXIucHVzaChncm91cFZhbHVlKTtcbiAgICAgICAgICBncm91cE1hcC5zZXQoZ3JvdXBWYWx1ZSwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwTWFwLmdldChncm91cFZhbHVlKSEucHVzaChyb3cpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRyaSBpbnRyYS1ncm91cGUgc3RvY2vDqSBkYW5zIGxlIGNhY2hlIOKAlCDDqXZpdGUgbGUgcmUtdHJpIHN1ciBjb2xsYXBzZS9leHBhbmQvcGFnaW5hdGlvblxuICAgICAgaWYgKGZhc3RDb21wYXJlRm4pIHtcbiAgICAgICAgY29uc3QgZm4gPSBmYXN0Q29tcGFyZUZuO1xuICAgICAgICBncm91cE1hcC5mb3JFYWNoKChncm91cFJvd3MsIGtleSkgPT4ge1xuICAgICAgICAgIGdyb3VwTWFwLnNldChrZXksIFsuLi5ncm91cFJvd3NdLnNvcnQoZm4pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1pc2UgZW4gY2FjaGVcbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUgPSB7XG4gICAgICAgIHJvd3MsXG4gICAgICAgIGtleTogZ3JvdXBLZXksXG4gICAgICAgIHNvcnRPcmRlcjogdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlcixcbiAgICAgICAgc29ydEFjdGl2ZTogZWZmZWN0aXZlU29ydC5hY3RpdmUgPz8gJycsXG4gICAgICAgIHNvcnREaXI6IGVmZmVjdGl2ZVNvcnQuZGlyZWN0aW9uID8/ICcnLFxuICAgICAgICBvcmRlcjogZ3JvdXBPcmRlcixcbiAgICAgICAgbWFwOiBncm91cE1hcCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fdG90YWxGaWx0ZXJlZENvdW50ID0gcm93cy5sZW5ndGg7XG5cbiAgICAvLyBQcm90ZWN0aW9uIGNvbnRyZSBsZXMgamV1eCBkZSBkb25uw6llcyDDoCB0cm9wIGhhdXRlIGNhcmRpbmFsaXTDqVxuICAgIGlmIChncm91cE9yZGVyLmxlbmd0aCA+IFRhYmxlQ29tcG9uZW50Lk1BWF9HUk9VUF9DT1VOVCkge1xuICAgICAgcmV0dXJuIFt7IFtHUk9VUF9IRUFERVJfTUFSS0VSXTogdHJ1ZSwgW1JPV19HUk9VUF9LRVldOiBHUk9VUF9LRVlfVE9PX01BTlksIFtST1dfR1JPVVBfQ09VTlRdOiBncm91cE9yZGVyLmxlbmd0aCwgW1JPV19HUk9VUF9QQUdFXTogMCwgW1JPV19HUk9VUF9QQUdFX0NPVU5UXTogMSB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZ3JvdXBQYWdlU2l6ZTtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgY29uc3Qgcm93SW5kZXhlcyA9IG5ldyBNYXA8VCwgbnVtYmVyPigpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93LCBpbmRleCkgPT4gcm93SW5kZXhlcy5zZXQocm93LCBpbmRleCkpO1xuXG4gICAgZ3JvdXBPcmRlci5mb3JFYWNoKChncm91cFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBncm91cFJvd3MgPSBncm91cE1hcC5nZXQoZ3JvdXBWYWx1ZSkhO1xuICAgICAgY29uc3QgdG90YWxDb3VudCA9IGdyb3VwUm93cy5sZW5ndGg7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHBhZ2VTaXplID09PSAwID8gMCA6IHRoaXMuX2dyb3VwQnkuZ2V0UGFnZShncm91cFZhbHVlKTtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHBhZ2VTaXplID09PSAwID8gMSA6IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0b3RhbENvdW50IC8gcGFnZVNpemUpKTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHRoaXMuaXNHcm91cENvbGxhcHNlZChncm91cFZhbHVlKTtcblxuICAgICAgcmVzdWx0LnB1c2goeyBbR1JPVVBfSEVBREVSX01BUktFUl06IHRydWUsIFtST1dfR1JPVVBfS0VZXTogZ3JvdXBWYWx1ZSwgW1JPV19HUk9VUF9DT1VOVF06IHRvdGFsQ291bnQsIFtST1dfR1JPVVBfUEFHRV06IGN1cnJlbnRQYWdlLCBbUk9XX0dST1VQX1BBR0VfQ09VTlRdOiBwYWdlQ291bnQgfSk7XG5cbiAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZVNpemUgPT09IDAgPyAwIDogY3VycmVudFBhZ2UgKiBwYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gcGFnZVNpemUgPT09IDAgPyB0b3RhbENvdW50IDogTWF0aC5taW4oc3RhcnQgKyBwYWdlU2l6ZSwgdG90YWxDb3VudCk7XG4gICAgICAgIGdyb3VwUm93cy5zbGljZShzdGFydCwgZW5kKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBpZHggPSByb3dJbmRleGVzLmdldChyb3cpID8/IDA7XG4gICAgICAgICAgY29uc3QgcHJvamVjdGVkOiBhbnkgPSB7IFtST1dfUkFXX0tFWV06IHJvdywgW1JPV19JTkRFWF9LRVldOiBpZHgsIFtST1dfR1JPVVBfS0VZXTogZ3JvdXBWYWx1ZSB9O1xuICAgICAgICAgIHRoaXMuYWN0aXZlRmllbGRzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICAgICAgcHJvamVjdGVkW2NvbC5rZXldID0gdGhpcy5yZXNvbHZlQ2VsbFZhbHVlKGNvbCwgcm93LCBpZHgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHByb2plY3RlZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBDb21wYXJhdGV1ciBkb250IGxlcyB2YWxldXJzIGRlIHRyaSBzb250IGNhbGN1bMOpZXMgdW5lIHNldWxlIGZvaXMgcGFyIGxpZ25lLiAqL1xuICBwcml2YXRlIF9idWlsZFNvcnRDb21wYXJhdG9yKHJvd3M6IFRbXSk6ICgoYTogVCwgYjogVCkgPT4gbnVtYmVyKSB8IG51bGwge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLl9hY3RpdmVTb3J0LmFjdGl2ZSAmJiB0aGlzLl9hY3RpdmVTb3J0LmRpcmVjdGlvblxuICAgICAgPyB0aGlzLl9hY3RpdmVTb3J0XG4gICAgICA6IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQgPz8geyBhY3RpdmU6ICcnLCBkaXJlY3Rpb246ICcnIGFzIGNvbnN0IH07XG4gICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2FjaGVkU29ydENvbXBhcmF0b3Iocm93cywgc29ydCk7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZENhY2hlZFNvcnRDb21wYXJhdG9yKFxuICAgIHJvd3M6IFRbXSxcbiAgICBzb3J0OiBUYWJsZVNvcnRTdGF0ZSxcbiAgKTogKChhOiBULCBiOiBUKSA9PiBudW1iZXIpIHwgbnVsbCB7XG4gICAgaWYgKCFzb3J0LmFjdGl2ZSB8fCAhc29ydC5kaXJlY3Rpb24pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHNvcnRLZXkgPSBzb3J0LmFjdGl2ZTtcbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9IHNvcnQuZGlyZWN0aW9uO1xuICAgIGNvbnN0IHNvcnRWYWx1ZUNhY2hlID0gbmV3IE1hcDxULCB1bmtub3duPigpO1xuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4gc29ydFZhbHVlQ2FjaGUuc2V0KHJvdywgdGhpcy5nZXRMYXp5QXdhcmVWYWx1ZShzb3J0S2V5LCByb3cpKSk7XG4gICAgcmV0dXJuIChsZWZ0OiBULCByaWdodDogVCk6IG51bWJlciA9PiB0aGlzLl9hcHBseVNvcnREaXJlY3Rpb24oXG4gICAgICB0aGlzLl9jb21wYXJlU29ydFZhbHVlcyhzb3J0VmFsdWVDYWNoZS5nZXQobGVmdCksIHNvcnRWYWx1ZUNhY2hlLmdldChyaWdodCkpLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NvbGxhdG9yID0gbmV3IEludGwuQ29sbGF0b3IoJ2ZyJywgeyBzZW5zaXRpdml0eTogJ2FjY2VudCcsIG51bWVyaWM6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSBfY29tcGFyZVNvcnRWYWx1ZXMobGVmdDogdW5rbm93biwgcmlnaHQ6IHVua25vd24pOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHJpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGxlZnQgPCByaWdodCkgcmV0dXJuIC0xO1xuICAgICAgaWYgKGxlZnQgPiByaWdodCkgcmV0dXJuIDE7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGxlZnQgaW5zdGFuY2VvZiBEYXRlICYmIHJpZ2h0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIE1hdGguc2lnbihsZWZ0LmdldFRpbWUoKSAtIHJpZ2h0LmdldFRpbWUoKSkgfHwgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gVGFibGVDb21wb25lbnQuX2NvbGxhdG9yLmNvbXBhcmUodGhpcy5fbm9ybWFsaXplU29ydFZhbHVlKGxlZnQpLCB0aGlzLl9ub3JtYWxpemVTb3J0VmFsdWUocmlnaHQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX25vcm1hbGl6ZVNvcnRWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5U29ydERpcmVjdGlvbihjb21wYXJpc29uOiBudW1iZXIsIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycpOiBudW1iZXIge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gY29tcGFyaXNvbiA6IC1jb21wYXJpc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIGxhIHZhbGV1ciB0ZWxsZSBxdSdlbGxlIGVzdCBhZmZpY2jDqWUgZGFucyBsYSBjZWxsdWxlLCBlbiBzdWl2YW50IGV4YWN0ZW1lbnRcbiAgICogbGUgbcOqbWUgY2hlbWluIHF1ZSByZXNvbHZlQ2VsbFZhbHVlIOKAlCB1dGlsaXPDqWUgcG91ciBsYSByZWNoZXJjaGUgcGxlaW4tdGV4dGUuXG4gICAqIE5lIHBhc3NlIHBhcyBwYXIgc29ydFZhbHVlICh2YWxldXIgYnJ1dGUgZGUgdHJpKSBjb250cmFpcmVtZW50IMOgIGdldExhenlBd2FyZVZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXREaXNwbGF5VmFsdWVGb3JTZWFyY2goY29sOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+LCByb3c6IFQpOiBhbnkge1xuICAgIGlmIChjb2wubGF6eSAmJiB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChjb2wua2V5KSAhPT0gJ2xvYWRlZCcpIHJldHVybiBudWxsO1xuICAgIGlmIChjb2wuc2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybiBjb2wuc2VhcmNoVmFsdWUocm93LCAwKTtcbiAgICB9XG4gICAgY29uc3QgcmF3VmFsdWUgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93LCAwKSA6IChyb3cgYXMgYW55KT8uW2NvbC5rZXldO1xuICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUocmF3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXk6IHN0cmluZywgcm93OiBUKTogYW55IHtcbiAgICBjb25zdCBjb2xEZWYgPSB0aGlzLl9jb2x1bW5NYXAuZ2V0KGNvbHVtbktleSk7XG4gICAgaWYgKGNvbERlZj8ubGF6eSAmJiB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChjb2x1bW5LZXkpICE9PSAnbG9hZGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnNvcnRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RvU29ydElucHV0KGNvbERlZi5zb3J0VmFsdWUocm93LCAwKSk7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdG9Tb3J0SW5wdXQoY29sRGVmLnZhbHVlKHJvdywgMCkpO1xuICAgIH1cbiAgICByZXR1cm4gKHJvdyBhcyBhbnkpW2NvbHVtbktleV07XG4gIH1cblxuICAvKiogTGVzIG5vbWJyZXMgZXQgbGVzIGRhdGVzIGdhcmRlbnQgbGV1ciB0eXBlIHBvdXIgdW4gdHJpIGNvcnJlY3QgOyBsZSByZXN0ZSBlc3Qgbm9ybWFsaXPDqSBlbiB0ZXh0ZS4gKi9cbiAgcHJpdmF0ZSBfdG9Tb3J0SW5wdXQodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZSA6IG5vcm1hbGl6ZUNlbGxWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogTGVzIHN0YXR1dHMgZGUgY2hhcmdlbWVudCBsYXp5IG5lIGRvaXZlbnQgamFtYWlzIGFwcGFyYcOudHJlIGRhbnMgdW4gZmljaGllciBleHBvcnTDqS4gKi9cbiAgcHJpdmF0ZSBfcmVzb2x2ZUV4cG9ydFZhbHVlKGNvbDogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiwgcm93OiBULCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZUNlbGxWYWx1ZShjb2wsIHJvdywgaW5kZXgpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gTEFaWV9MT0FESU5HX1ZBTFVFIHx8IHZhbHVlID09PSBMQVpZX0VSUk9SX1ZBTFVFID8gJycgOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNlbGxWYWx1ZShjb2w6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4sIHJvdzogVCwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKGNvbC5sYXp5KSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChjb2wua2V5KTtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdsb2FkaW5nJykgcmV0dXJuIExBWllfTE9BRElOR19WQUxVRTtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdlcnJvcicpIHJldHVybiBMQVpZX0VSUk9SX1ZBTFVFO1xuICAgICAgaWYgKCFzdGF0dXMpIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgdmFsdWVQcm92aWRlciA9IGNvbC52YWx1ZTtcbiAgICBjb25zdCByYXdWYWx1ZSA9IHZhbHVlUHJvdmlkZXIgPyB2YWx1ZVByb3ZpZGVyKHJvdywgaW5kZXgpIDogKHJvdyBhcyBhbnkpPy5bY29sLmtleV07XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShyYXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgxLCB0aGlzLnJlc29sdmVkQ29uZmlnLnBhZ2luYXRpb24/LnBhZ2VTaXplIHx8IHRoaXMucGFnZVNpemUgfHwgNSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVQYWdlU2l6ZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyB8fCBbNSwgMTAsIDIwXTtcbiAgICBjb25zdCB1bmlxdWUgPSBbLi4ubmV3IFNldChvcHRpb25zLmZpbHRlcigodmFsdWUpID0+IHZhbHVlID4gMCkpXTtcblxuICAgIGlmICghdW5pcXVlLmluY2x1ZGVzKHRoaXMucGFnZVNpemUpKSB7XG4gICAgICB1bmlxdWUucHVzaCh0aGlzLnBhZ2VTaXplKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcXVlLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVBhZ2VTaXplT3B0aW9uc0dyb3VwQnkoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9uc0dyb3VwQnkgfHwgdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgfHwgWzUsIDEwLCAyMF07XG4gICAgY29uc3QgdW5pcXVlID0gWy4uLm5ldyBTZXQob3B0aW9ucy5maWx0ZXIoKHYpID0+IHYgPiAwKSldO1xuICAgIGlmICh0aGlzLmdyb3VwUGFnZVNpemUgPiAwICYmICF1bmlxdWUuaW5jbHVkZXModGhpcy5ncm91cFBhZ2VTaXplKSkge1xuICAgICAgdW5pcXVlLnB1c2godGhpcy5ncm91cFBhZ2VTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuaXF1ZS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0R3JvdXBQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWc7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNmZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5IHx8IGNmZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIG9wdGlvbnNbMF07XG4gICAgcmV0dXJuIGNmZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSB8fCA1O1xuICB9XG5cbiAgcHJpdmF0ZSB1bmlxdWVDb2x1bW5zQnlLZXkoY29sdW1uczogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcmV0dXJuIGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChzZWVuLmhhcyhjb2x1bW4ua2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChjb2x1bW4ua2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hQYWdpbmF0b3IoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yKSByZXR1cm47XG5cbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSBudWxsO1xuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcblxuICAgIGlmICh0aGlzLl9wYWdpbmF0b3JTdWJzY3JpYmVkICE9PSB0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5fcGFnaW5hdG9yU3Vic2NyaWJlZCA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRvciEucGFnZVNpemU7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvciEucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IhLnBhZ2VTaXplIH0pO1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1JlbmRlciAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9wcm9qZWN0Q3VycmVudFBhZ2UoKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hTb3J0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zb3J0KSByZXR1cm47XG5cbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5zb3J0ID0gbnVsbCBhcyBhbnk7XG5cbiAgICBpZiAodGhpcy5fc29ydFN1YnNjcmliZWQgIT09IHRoaXMuc29ydCkge1xuICAgICAgdGhpcy5fc29ydFN1YnNjcmliZWQgPSB0aGlzLnNvcnQ7XG4gICAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVNvcnQgPSB7XG4gICAgICAgICAgYWN0aXZlOiB0aGlzLnNvcnQuYWN0aXZlLFxuICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5zb3J0LmRpcmVjdGlvbixcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoeyBhY3RpdmU6IHRoaXMuc29ydC5hY3RpdmUsIGRpcmVjdGlvbjogdGhpcy5zb3J0LmRpcmVjdGlvbiB9KTtcbiAgICAgICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemFibGVDb2x1bW48VD4oY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIGtleTogY29sdW1uLmtleSxcbiAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgaWNvbjogY29sdW1uLmljb24sXG4gICAgc29ydGFibGU6IGNvbHVtbi5zb3J0YWJsZSxcbiAgICByZW1vdmFibGU6IGNvbHVtbi5yZW1vdmFibGUsXG4gICAgb3B0aW9uYWw6IGNvbHVtbi5vcHRpb25hbCxcbiAgICB3aWR0aDogY29sdW1uLndpZHRoLFxuICAgIGdyb3VwYWJsZTogY29sdW1uLmdyb3VwYWJsZSxcbiAgICBzbGljZWFibGU6IGNvbHVtbi5zbGljZWFibGUsXG4gICAgbGF6eTogISFjb2x1bW4ubGF6eSxcbiAgfTtcbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwianF1ZXJ5LXRhYmxlLXdyYXBwZXJcIj5cbiAgPG91dHB1dCBjbGFzcz1cInZpc3VhbC1jb3B5LWZlZWRiYWNrXCIgKm5nSWY9XCJjb3B5RmVlZGJhY2tNZXNzYWdlXCIgYXJpYS1saXZlPVwicG9saXRlXCI+e3sgY29weUZlZWRiYWNrTWVzc2FnZSB9fTwvb3V0cHV0PlxuICA8aGVhZGVyIGNsYXNzPVwidGFibGUtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cbiAgICA8aDM+e3sgdGl0bGUgfX08L2gzPlxuICA8L2hlYWRlcj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1sYXlvdXRcIlxuICAgIFtjbGFzcy5uby1zbGljZV09XCIhX3Nob3dTbGljZVBhbmVsIHx8IF9zbGljZVBhbmVsQ29sbGFwc2VkXCJcbiAgPlxuICAgIDxzbGljZS1wYW5lbFxuICAgICAgW3N0eWxlLmRpc3BsYXldPVwiIV9zaG93U2xpY2VQYW5lbCB8fCBfc2xpY2VQYW5lbENvbGxhcHNlZCA/ICdub25lJyA6IG51bGxcIlxuICAgICAgW3NsaWNlQ29uZmlnc109XCJfc2xpY2VDb25maWdzXCJcbiAgICAgIFtjb2x1bW5zXT1cIl9zbGljZUNvbHVtbnNcIlxuICAgICAgW2RhdGFdPVwiX3NsaWNlRGF0YVwiXG4gICAgICBbbGF6eVN0YXR1c109XCJfbGF6eUNvbHVtblN0YXR1c1wiXG4gICAgICBbc2hvd1RvZ2dsZV09XCJfc2xpY2VTaG93VG9nZ2xlXCJcbiAgICAgIFtjb2xsYXBzZWRCeURlZmF1bHRdPVwiX3NsaWNlUGFuZWxDb2xsYXBzZWRcIlxuICAgICAgKGZpbHRlckNoYW5nZSk9XCJvblNsaWNlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGR5bmFtaWNTbGljZUtleXNDaGFuZ2UpPVwib25EeW5hbWljU2xpY2VLZXlzQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGNvbGxhcHNlZENoYW5nZSk9XCJvblNsaWNlUGFuZWxDb2xsYXBzZWRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvc2xpY2UtcGFuZWw+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtc2hlbGxcIiAjdGFibGVTaGVsbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10b29sYmFyXCIgKm5nSWY9XCJzaG93VG9vbGJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdG9vbGJhci1sZWZ0XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJzaG93U2xpY2VFeHBhbmRCdG5cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInNsaWNlLWV4cGFuZC1idG5cIlxuICAgICAgICAgICAgW3RpdGxlXT1cImkxOG4uZXhwYW5kRmlsdGVyVGl0bGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZFNsaWNlUGFuZWwoKVwiXG4gICAgICAgICAgPjxtYXQtaWNvbiBjbGFzcz1cInNsaWNlLWV4cGFuZC1tYXQtaWNvblwiPmZpbHRlcl9saXN0PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NlYXJjaEJhclwiIGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJzZWFyY2gtaWNvblwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjguNVwiIGN5PVwiOC41XCIgcj1cIjUuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAxM0wxNyAxN1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKClcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaTE4bi5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlYXJjaFF1ZXJ5XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VhcmNoLWNsZWFyLWJ0blwiIChjbGljayk9XCJzZWFyY2hRdWVyeSA9ICcnOyBvblNlYXJjaENoYW5nZSgpXCI+w5c8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VhcmNoLWNvdW50XCIgKm5nSWY9XCIhZWZmZWN0aXZlSXNMb2FkaW5nXCI+e3sgZmlsdGVyZWRSb3dDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY291bnQtbG9hZGVyXCIgKm5nSWY9XCJlZmZlY3RpdmVJc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dPcmdhbml6ZXJCdXR0b25cIiBjbGFzcz1cInRhYmxlLXRvb2xiYXItcmlnaHRcIj5cbiAgICAgICAgICA8dGFibGUtb3JnYW5pemVyLWJ1dHRvblxuICAgICAgICAgICAgW2NvbmZpZ109XCJvcmdhbml6ZXJDb25maWdcIlxuICAgICAgICAgICAgW3N0YXRlXT1cIm9yZ2FuaXplclN0YXRlXCJcbiAgICAgICAgICAgIFtoaWRlTWVudVZhbHVlc109XCJvcmdhbml6ZXJIaWRlTWVudVZhbHVlc1wiXG4gICAgICAgICAgICAodmlld0NoYW5nZSk9XCJvbk9yZ2FuaXplclZpZXdDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvdGFibGUtb3JnYW5pemVyLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHktd3JhcHBlclwiPlxuXG4gICAgICA8IS0tIEJhbm5pw6hyZSBtZXNzYWdlIHByw6lmw6lyZW5jZXMgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiX3ByZWZlcmVuY2VzTWVzc2FnZVwiIGNsYXNzPVwicHJlZmVyZW5jZXMtbWVzc2FnZVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJwcmVmZXJlbmNlcy1tZXNzYWdlLWljb25cIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBfcHJlZmVyZW5jZXNNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQm91dG9uIGRlIGNvbmZpcm1hdGlvbiBkdSBtb2RlIMOpZGl0aW9uIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIl9lZGl0TW9kZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImVkaXQtY29uZmlybS1idG5cIlxuICAgICAgICBbdGl0bGVdPVwiaTE4bi5wcmVmZXJlbmNlc0NvbmZpcm1FZGl0XCJcbiAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FZGl0TW9kZSgpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LXNjcm9sbFwiICN0YWJsZUJvZHlTY3JvbGw+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIG1hdFNvcnQgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCIgY2xhc3M9XCJqcXVlcnktdGFibGVcIlxuICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGFibGVNaW5XaWR0aFwiXG4gICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tSb3dGblwiXG4gICAgICAgICAgICAgW21hdFNvcnRBY3RpdmVdPVwiX21hdFNvcnRBY3RpdmVcIiBbbWF0U29ydERpcmVjdGlvbl09XCJfbWF0U29ydERpcmVjdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5rZXlcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFttYXQtc29ydC1oZWFkZXJdPVwiKCFfZWRpdE1vZGUgJiYgY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkgPyBjb2x1bW4ua2V5IDogJydcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9lZGl0TW9kZSB8fCBjb2x1bW4uc29ydGFibGUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRDb2x1bW5XaWR0aChjb2x1bW4ua2V5KVwiXG4gICAgICAgICAgICBbY2xhc3MuZHJhZy1lbmFibGVkXT1cImlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkIHx8IF9lZGl0TW9kZVwiXG4gICAgICAgICAgICBbY2xhc3MuZHJvcC10YXJnZXRdPVwiaXNIZWFkZXJEcm9wVGFyZ2V0KGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5lZGl0LW1vZGUtaGVhZGVyXT1cIl9lZGl0TW9kZVwiXG4gICAgICAgICAgICAoZHJhZ292ZXIpPVwib25IZWFkZXJEcmFnT3Zlcihjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcm9wKT1cIm9uSGVhZGVyRHJvcChjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZC1jZWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImNvbHVtbi5pY29uXCIgY2xhc3M9XCJoZWFkLWljb25cIiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj57eyBjb2x1bW4uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZC10ZXh0XCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj57eyBjb2x1bW4uaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc0NvbHVtbkRyYWdEcm9wRW5hYmxlZCB8fCBfZWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJhZy1oYW5kbGVcIlxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUsOpb3Jkb25uZXIgbGEgY29sb25uZSAnICsgY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkhlYWRlckRyYWdTdGFydChjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ2VuZCk9XCJvbkhlYWRlckRyYWdFbmQoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25IZWFkZXJLZXlEb3duKGNvbHVtbi5rZXksICRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gUG9pZ27DqWUgZGUgcmVzaXplICh2aXNpYmxlIHVuaXF1ZW1lbnQgZW4gbW9kZSDDqWRpdGlvbikgLS0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cIl9lZGl0TW9kZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25SZXNpemVTdGFydChjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRDb2x1bW5XaWR0aChjb2x1bW4ua2V5KVwiXG4gICAgICAgICAgICBbY2xhc3MuZWRpdC1tb2RlLWNlbGxdPVwiX2VkaXRNb2RlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIV9lZGl0TW9kZTsgZWxzZSBlZGl0TW9kZUNlbGxUcGxcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLmxhenkgPyBnZXRMYXp5UmVuZGVyVHlwZShyb3dbY29sdW1uLmtleV0pIDogJ3ZhbHVlJ1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbG9hZGluZydcIiBjbGFzcz1cImxhenktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxhenktZXJyb3ItYnRuXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmV0cnlMYXp5Q29sdW1ucygpXCIgW3RpdGxlXT1cImkxOG4ubGF6eUVycm9yVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1lcnJvci1pY29uXCI+4pqgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LWVycm9yLWxhYmVsXCI+e3sgaTE4bi5sYXp5UmV0cnkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENlbGxUZW1wbGF0ZShjb2x1bW4ua2V5KSBhcyBjdXN0b21UcGw7IGVsc2UgZGVmYXVsdENlbGxUcGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRwbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvd1tfUk9XX1JBV19LRVldLCBpbmRleDogcm93W19ST1dfSU5ERVhfS0VZXSwgdmFsdWU6IHJvd1tjb2x1bW4ua2V5XSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGxUcGw+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2VsbC10ZXh0XCIgW2NsYXNzLmNlbGwtZW1wdHldPVwiaXNDZWxsRW1wdHkocm93W2NvbHVtbi5rZXldKVwiIFt0aXRsZV09XCJhc1RpdGxlKHJvd1tjb2x1bW4ua2V5XSlcIj57eyBpc0NlbGxFbXB0eShyb3dbY29sdW1uLmtleV0pID8gaTE4bi5jZWxsRW1wdHkgOiByb3dbY29sdW1uLmtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0TW9kZUNlbGxUcGw+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2VsbC10ZXh0IGNlbGwtZWRpdC1tb2RlXCIgW3RpdGxlXT1cImFzVGl0bGUocm93W2NvbHVtbi5rZXldKVwiPnt7IHJvd1tjb2x1bW4ua2V5XSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJyZW5kZXJlZENvbHVtbnM7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgICAgIDx0clxuICAgICAgICAgIG1hdC1yb3dcbiAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogcmVuZGVyZWRDb2x1bW5zOyB3aGVuOiAhaXNHcm91cEhlYWRlclwiXG4gICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaGFzUm93Q2xpY2tIYW5kbGVyICYmICFfZWRpdE1vZGUgPyAwIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJoYXNSb3dDbGlja0hhbmRsZXIgJiYgIV9lZGl0TW9kZSA/IHJvd0FjdGlvbkxhYmVsKHJvdykgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWtleXNob3J0Y3V0c109XCJoYXNSb3dDbGlja0hhbmRsZXIgJiYgIV9lZGl0TW9kZSA/ICdFbnRlciBTcGFjZScgOiBudWxsXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhyb3cpXCJcbiAgICAgICAgICBbY2xhc3Mubm8tcG9pbnRlcl09XCIhaGFzUm93Q2xpY2tIYW5kbGVyIHx8IF9lZGl0TW9kZVwiXG4gICAgICAgICAgW2NsYXNzLmVkaXQtbW9kZS1yb3ddPVwiX2VkaXRNb2RlXCJcbiAgICAgICAgICAoY2xpY2spPVwiIV9lZGl0TW9kZSAmJiBvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiIV9lZGl0TW9kZSAmJiBvblJvd0NsaWNrKHJvdywgbnVsbClcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiFfZWRpdE1vZGUgJiYgb25Sb3dDbGljayhyb3csIG51bGwpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgID48L3RyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiX0dST1VQX1JPV19DT0xVTU5cIj5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2F0dHIuY29sc3Bhbl09XCJyZW5kZXJlZENvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJncm91cC1oZWFkZXItY2VsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWhlYWRlci1sYWJlbFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLWNoZXZyb25cIiBbY2xhc3MuY29sbGFwc2VkXT1cImlzR3JvdXBDb2xsYXBzZWQocm93W19ST1dfR1JPVVBfS0VZXSlcIiAqbmdJZj1cImlzTm9ybWFsR3JvdXBSb3cocm93KVwiPuKAujwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc05vcm1hbEdyb3VwUm93KHJvdylcIiBjbGFzcz1cImdyb3VwLWtleS1sYWJlbFwiPnt7IHJvd1tfUk9XX0dST1VQX0tFWV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNHcm91cFJvd0xvYWRpbmcocm93KVwiIGNsYXNzPVwibGF6eS1za2VsZXRvbiBncm91cC1sYXp5LWtleS1za2VsZXRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzR3JvdXBSb3dFcnJvcihyb3cpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibGF6eS1lcnJvci1idG5cIiAoY2xpY2spPVwicmV0cnlHcm91cEJ5Q29sdW1uKCRldmVudClcIiBbdGl0bGVdPVwiaTE4bi5sYXp5RXJyb3JUaXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1lcnJvci1pY29uXCI+4pqgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1lcnJvci1sYWJlbFwiPnt7IGkxOG4ubGF6eVJldHJ5IH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0dyb3VwUm93VG9vTWFueShyb3cpXCIgY2xhc3M9XCJncm91cC10b28tbWFueS1sYWJlbFwiPnt7IGkxOG4uZ3JvdXBUb29NYW55KHJvd1tfUk9XX0dST1VQX0NPVU5UXSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JvdXAtY291bnQtYmFkZ2VcIj57eyByb3dbX1JPV19HUk9VUF9DT1VOVF0gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1wYWdpbmF0aW9uXCIgKm5nSWY9XCIhaXNHcm91cENvbGxhcHNlZChyb3dbX1JPV19HUk9VUF9LRVldKSAmJiByb3dbX1JPV19HUk9VUF9QQUdFX0NPVU5UXSA+IDFcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cC1wYWdlLWJ0blwiIFtkaXNhYmxlZF09XCJyb3dbX1JPV19HUk9VUF9QQUdFXSA9PT0gMFwiIChjbGljayk9XCJncm91cFBhZ2VCYWNrKHJvd1tfUk9XX0dST1VQX0tFWV0pXCI+4oC5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1wYWdlLWluZm9cIj57eyByb3dbX1JPV19HUk9VUF9QQUdFXSArIDEgfX0gLyB7eyByb3dbX1JPV19HUk9VUF9QQUdFX0NPVU5UXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdyb3VwLXBhZ2UtYnRuXCIgW2Rpc2FibGVkXT1cInJvd1tfUk9XX0dST1VQX1BBR0VdID49IHJvd1tfUk9XX0dST1VQX1BBR0VfQ09VTlRdIC0gMVwiIChjbGljayk9XCJncm91cFBhZ2VGb3J3YXJkKHJvd1tfUk9XX0dST1VQX0tFWV0sIHJvd1tfUk9XX0dST1VQX0NPVU5UXSlcIj7igLo8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFtfR1JPVVBfUk9XX0NPTFVNTl07IHdoZW46IGlzR3JvdXBIZWFkZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJncm91cC1oZWFkZXItcm93XCJcbiAgICAgICAgICAgIFtjbGFzcy5ncm91cC1oZWFkZXItbG9hZGluZ109XCJpc0dyb3VwUm93TG9hZGluZyhyb3cpXCJcbiAgICAgICAgICAgIFtjbGFzcy5ncm91cC1oZWFkZXItZXJyb3JdPVwiaXNHcm91cFJvd0Vycm9yKHJvdylcIlxuICAgICAgICAgICAgW2NsYXNzLmdyb3VwLWhlYWRlci10b28tbWFueV09XCJpc0dyb3VwUm93VG9vTWFueShyb3cpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZ3JvdXAta2V5XT1cInJvd1tfUk9XX0dST1VQX0tFWV1cIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlzTm9ybWFsR3JvdXBSb3cocm93KSA/IDAgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzTm9ybWFsR3JvdXBSb3cocm93KSA/ICFpc0dyb3VwQ29sbGFwc2VkKHJvd1tfUk9XX0dST1VQX0tFWV0pIDogbnVsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBIZWFkZXJDbGljayhyb3cpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkdyb3VwSGVhZGVyQ2xpY2socm93KVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25Hcm91cEhlYWRlckNsaWNrKHJvdyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+PC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwibWF0LW1kYy1yb3cgbm8tZGF0YS1yb3dcIiAqbWF0Tm9EYXRhUm93PlxuICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1tZGMtY2VsbCBuby1kYXRhLWNlbGxcIiBbYXR0ci5jb2xzcGFuXT1cInJlbmRlcmVkQ29sdW1ucy5sZW5ndGhcIj48L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PjwhLS0gL3RhYmxlLWJvZHktc2Nyb2xsIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHktb3ZlcmxheVwiICpuZ0lmPVwiZWZmZWN0aXZlSXNMb2FkaW5nIHx8IGlzRW1wdHlcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS1ib2R5LW92ZXJsYXktdGV4dFwiPnt7IGVmZmVjdGl2ZUlzTG9hZGluZyA/IGxvYWRpbmdTdGF0ZUxhYmVsIDogZW1wdHlTdGF0ZUxhYmVsIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj48IS0tIC90YWJsZS1ib2R5LXdyYXBwZXIgLS0+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tYmFyXCIgW2NsYXNzLmlzLWxvYWRpbmddPVwiZWZmZWN0aXZlSXNMb2FkaW5nXCIgKm5nSWY9XCJzaG93UGFnaW5hdGlvblwiPlxuICAgICAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgICAgIFtsZW5ndGhdPVwidG90YWxSb3dzXCJcbiAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwicmVzb2x2ZWRQYWdpbmF0aW9uU2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIlxuICAgICAgICA+PC9tYXQtcGFnaW5hdG9yPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdG9yLXJhbmdlLWxvYWRlclwiIFxuICAgICAgICAgICAgIFtjbGFzcy5wYWdpbmF0b3ItcmFuZ2UtbG9hZGVyLS1uby1maXJzdC1sYXN0XT1cIiFyZXNvbHZlZFBhZ2luYXRpb25TaG93Rmlyc3RMYXN0QnV0dG9uc1wiXG4gICAgICAgICAgICAgKm5nSWY9XCJlZmZlY3RpdmVJc0xvYWRpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtYm90dG9tLWJhclwiICpuZ0lmPVwiYWN0aXZlR3JvdXBCeUtleVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtYm90dG9tLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtYm90dG9tLWJhci1sZWZ0XCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdyb3VwLXJlc2V0LWJ0blwiIChjbGljayk9XCJvbkdyb3VwQnlDaGFuZ2UobnVsbClcIj5cbiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJncm91cC1yZXNldC1pY29uXCI+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDhhNSA1IDAgMSAwIDUtNSA1IDUgMCAwIDAtMy41NCAxLjQ2TDMgM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgM3YyLjVINS41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAge3sgaTE4bi5ncm91cFJlbW92ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtYmFyLXNlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLXNvcnQtY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1zb3J0LWxhYmVsXCI+e3sgaTE4bi5ncm91cFNvcnRMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cC1zb3J0LWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwiZ3JvdXBTb3J0T3JkZXIgPT09ICdhc2MnXCIgKGNsaWNrKT1cIm9uR3JvdXBTb3J0VG9nZ2xlKCdhc2MnKVwiIFt0aXRsZV09XCJpMThuLmdyb3VwU29ydEFzY1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd191cHdhcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cC1zb3J0LWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwiZ3JvdXBTb3J0T3JkZXIgPT09ICdkZXNjJ1wiIChjbGljayk9XCJvbkdyb3VwU29ydFRvZ2dsZSgnZGVzYycpXCIgW3RpdGxlXT1cImkxOG4uZ3JvdXBTb3J0RGVzY1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtcGFnaW5hdG9yLXBhZ2Utc2l6ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbFwiPnt7IGkxOG4uZ3JvdXBSb3dzUGVyR3JvdXAgfX08L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBjbGFzcz1cIm1hdC1tZGMtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdyb3VwUGFnZVNpemVcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uR3JvdXBQYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwibWF0LW1kYy1wYWdpbmF0b3Itc2VsZWN0LXBhZ2Utc2l6ZSBncm91cC1wYWdlLXNpemUtcGFuZWxcIlxuICAgICAgICAgICAgICAgIFtwYW5lbFdpZHRoXT1cIidhdXRvJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPnt7IGdyb3VwUGFnZVNpemUgPT09IDAgPyBpMThuLmdyb3VwU2hvd0FsbCA6IGdyb3VwUGFnZVNpemUgfX08L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIHBhZ2VTaXplT3B0aW9uc0dyb3VwQnlcIiBbdmFsdWVdPVwib3B0XCI+e3sgb3B0IH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIwXCI+e3sgaTE4bi5ncm91cFNob3dBbGwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
2000
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBbUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUF3QixNQUFNLEVBQUUsU0FBUyxFQUE4QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL1MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtC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c0JBQXJDLFNBQVM7dUJBQUMsWUFBWTtnQkFDUyxhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDUSxTQUFTO3NCQUE5QyxlQUFlO3VCQUFDLG1CQUFtQjtnQkFnZHBDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQywyQkFBMkI7O0FBd2tEM0MsU0FBUyxrQkFBa0IsQ0FBSSxNQUE4QjtJQUMzRCxPQUFPO1FBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1FBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0tBQ3BCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgaXNEZXZNb2RlLCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBNYXRQYWdpbmF0b3JJbnRsLCBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBkZWZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uUHJvdmlkZXIsIFRhYmxlRXhwb3J0Q29uZmlnLCBUYWJsZVByZWZlcmVuY2VzQ29uZmlnLCBUYWJsZVByb3ZpZGVyLCBUYWJsZVZpZXdDb25maWcgfSBmcm9tICcuLi9qcXVlcnktdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgSnF0STE4biwgSlFUX0kxOE4sIEpRVF9JMThOX0RFRkFVTFRTIH0gZnJvbSAnLi4vanF0LWkxOG4udG9rZW4nO1xuaW1wb3J0IHsgSnF0Q2VsbERlZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZS9qcXQtY2VsbC1kZWYuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnLCBTbGljZVBhbmVsQ29tcG9uZW50LCBPcmdhbml6ZXJGYWNhZGUsIEdyb3VwQnlNYW5hZ2VyLCBPcmdhbml6ZXJDb25maWcsIE9yZ2FuaXplckJ1dHRvbkV2ZW50LCBPcmdhbml6ZXJTdGF0ZSB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXInO1xuaW1wb3J0IHsgZ2V0RnJlbmNoUGFnaW5hdG9ySW50bCwgaHVtYW5pemVLZXksIG5vcm1hbGl6ZUNlbGxWYWx1ZSB9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuaW1wb3J0IHsgVGFibGVQcmVmZXJlbmNlc01hbmFnZXIgfSBmcm9tICcuL3RhYmxlLXByZWZlcmVuY2VzLm1hbmFnZXInO1xuaW1wb3J0IHsgRXhwb3J0TWFuYWdlciB9IGZyb20gJy4vZXhwb3J0Lm1hbmFnZXInO1xuaW1wb3J0IHtcbiAgR1JPVVBfUk9XX0NPTFVNTiwgR1JPVVBfSEVBREVSX01BUktFUixcbiAgR1JPVVBfS0VZX0xBWllfTE9BRElORywgR1JPVVBfS0VZX0xBWllfRVJST1IsIEdST1VQX0tFWV9UT09fTUFOWSxcbiAgUk9XX1JBV19LRVksIFJPV19JTkRFWF9LRVksXG4gIFJPV19HUk9VUF9LRVksIFJPV19HUk9VUF9DT1VOVCwgUk9XX0dST1VQX1BBR0UsIFJPV19HUk9VUF9QQUdFX0NPVU5ULFxuICBMQVpZX0xPQURJTkdfVkFMVUUsIExBWllfRVJST1JfVkFMVUUsXG59IGZyb20gJy4vdGFibGUuY29uc3RhbnRzJztcbmltcG9ydCB7IE9yZ2FuaXplckJ1dHRvbldyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL29yZ2FuaXplci1idXR0b24vb3JnYW5pemVyLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVTZXJpYWxpemFibGUsIGNvbnRhaW5zRnVuY3Rpb24sIEZ1bGxzY3JlZW5NYW5hZ2VyLCBWaXN1YWxDb3B5RmVlZGJhY2tDb25maWcsIFZpc3VhbFNuYXBzaG90LCBWaXN1YWxTbmFwc2hvdEFwcGx5UmVzdWx0LCBWaXN1YWxTbmFwc2hvdERyYWZ0LCBWaXN1YWxTbmFwc2hvdFN0b3JhZ2UgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbi8qKiBDYWNoZSBpbnRlcm5lIGR1IGdyb3VwZW1lbnQg4oCUIGludmFsaWTDqSBkw6hzIHF1ZSBsZXMgZG9ubsOpZXMsIGxhIGNsw6kgb3UgbGVzIHBhcmFtw6h0cmVzIGRlIHRyaSBjaGFuZ2VudC4gKi9cbmludGVyZmFjZSBHcm91cEJ5Q2FjaGU8VD4ge1xuICByb3dzOiBUW107XG4gIGtleTogc3RyaW5nO1xuICBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnO1xuICBzb3J0QWN0aXZlOiBzdHJpbmc7XG4gIHNvcnREaXI6IHN0cmluZztcbiAgb3JkZXI6IHN0cmluZ1tdO1xuICBtYXA6IE1hcDxzdHJpbmcsIFRbXT47XG59XG5cbmludGVyZmFjZSBUYWJsZVNvcnRTdGF0ZSB7XG4gIGFjdGl2ZTogc3RyaW5nO1xuICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJyc7XG59XG5cbi8qKiBPcHRpb25zIGRlIGwnT3JnYW5pemVyIGTDqWR1aXRlcyBkZSBUYWJsZVZpZXdDb25maWcuICovXG5pbnRlcmZhY2UgT3JnYW5pemVyVmlld09wdGlvbnMge1xuICBlbmFibGVkPzogYm9vbGVhbjtcbiAgZW5hYmxlRmllbGRSZW1vdmFsPzogYm9vbGVhbjtcbiAgZW5hYmxlRmllbGREcmFnRHJvcD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2pxdWVyeS10YWJsZScsXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0VGFibGVNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0UGFnaW5hdG9yTW9kdWxlLCBNYXRTb3J0TW9kdWxlLCBNYXRNZW51TW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUsIFNsaWNlUGFuZWxDb21wb25lbnQsIE9yZ2FuaXplckJ1dHRvbldyYXBwZXJDb21wb25lbnQgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0UGFnaW5hdG9ySW50bCwgdXNlRmFjdG9yeTogZ2V0RnJlbmNoUGFnaW5hdG9ySW50bCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudmlzdWFsLWZ1bGxzY3JlZW4nKSBfaXNGdWxsc2NyZWVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZz86IFRhYmxlUHJvdmlkZXI8VD47XG5cbiAgQElucHV0KCkgZGF0YVNvdXJjZT86IFRbXSB8IHsgZGF0YTogVFtdIH07XG4gIEBJbnB1dCgpIGRhdGE/OiBUW107XG4gIEBJbnB1dCgpIGRpc3BsYXllZENvbHVtbnM/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29sdW1uc0NvbmZpZz86IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXTtcblxuICAvKipcbiAgICogTW9kZSBIVE1MIDogYWN0aXZlIGV0IGNvbmZpZ3VyZSBsZSBwYW5uZWF1IFZpZXcgaW5kw6lwZW5kYW1tZW50IGR1IGBbY29uZmlnXWAuXG4gICAqIFByZW5kIGxlIGRlc3N1cyBzdXIgYGNvbmZpZy52aWV3YCBzaSBkw6lmaW5pLlxuICAgKiBFeGVtcGxlIDogYDxqcXVlcnktdGFibGUgW3ZpZXddPVwieyBlbmFibGVkOiB0cnVlIH1cIj5gXG4gICAqL1xuICBASW5wdXQoKSB2aWV3PzogVGFibGVWaWV3Q29uZmlnO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkxhYmVscz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIEBJbnB1dCgpIGlzTG9hZGluZyA9IGZhbHNlO1xuICAvKipcbiAgICogw4AgcGFzc2VyIMOgIGB0cnVlYCBxdWFuZCBsYSByZXF1w6p0ZSByZWxhbmPDqWUgYXByw6hzIGBsYXp5Q29sdW1uc1JlcXVlc3RlZGAgw6ljaG91ZSA6IGxlcyBjb2xvbm5lcyBlbiBhdHRlbnRlIGFmZmljaGVudCB1biBib3V0b25cbiAgICogwqsgUsOpZXNzYXllciDCuy4gUmVwYXNzZXIgw6AgYGZhbHNlYCBhdSBub3V2ZWwgZXNzYWkuXG4gICAqL1xuICBASW5wdXQoKSBsYXp5RXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgY29weUZlZWRiYWNrOiBWaXN1YWxDb3B5RmVlZGJhY2tDb25maWcgPSB7fTtcblxuICAvKiogUGFyYW3DqHRyZSBkZSBjb250csO0bGUgcG91ciByw6lpbml0aWFsaXNlciBiYXJyZSBkZSByZWNoZXJjaGUuICovXG4gIEBJbnB1dCgpXG4gIHNldCBjbGVhclNlYXJjaElucHV0KHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgICAgdGhpcy5vblNlYXJjaENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBhZGRSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5BZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbHVtblJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjYXRlZ29yeVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSByb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvKiogw4ltaXMgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgdHJpICh5IGNvbXByaXMgbGUgdHJpIGluaXRpYWwpLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc29ydENoYW5nZSAgICA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0U3RhdGU+KCk7XG4gIC8qKiDDiW1pcyDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBwYWdlIG91IGRlIHRhaWxsZSBkZSBwYWdlLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZUNoYW5nZSAgICA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PigpO1xuICAvKiogw4ltaXMgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgbGEgcmVjaGVyY2hlIHRleHRlLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VhcmNoQ2hhbmdlICA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogw4ltaXMgcXVhbmQgbGUgR3JvdXAgYnkgY2hhbmdlIChjbMOpIGRlIGNvbG9ubmUsIG91IGBudWxsYCBzaSBkw6lzYWN0aXbDqSkuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBncm91cEJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudWxsPigpO1xuICAvKiogw4ltaXMgcXVhbmQgbGEgbGlzdGUgZGVzIGNvbG9ubmVzIHZpc2libGVzIGNoYW5nZSAoY2zDqXMgZGFucyBs4oCZb3JkcmUgZOKAmWFmZmljaGFnZSkuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjb2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc3VhbENvcGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8VmlzdWFsU25hcHNob3Q+KCk7XG4gIC8qKlxuICAgKiBDbMOpcyBkZSB0b3V0ZXMgbGVzIGNvbG9ubmVzIGBsYXp5YCBkZW1hbmTDqWVzIGp1c3F1J2ljaSAoY3VtdWwpLCDDqW1pc2VzIHF1YW5kIGwndW5lIGQnZWxsZXMgZXN0IGFjdGl2w6llIHBvdXIgbGEgcHJlbWnDqHJlIGZvaXMuXG4gICAqIEwnYXBwbGljYXRpb24gcmVsYW5jZSBzYSByZXF1w6p0ZSBjb21wbMOodGUgZW4gbGVzIGluY2x1YW50IHB1aXMgcmVwYXNzZSBsZXMgbm91dmVsbGVzIGBkYXRhYC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBsYXp5Q29sdW1uc1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpXG4gIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hdHRhY2hQYWdpbmF0b3IoKTtcbiAgICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3BhZ2luYXRvcjsgfVxuICBwcml2YXRlIF9wYWdpbmF0b3I/OiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydD86IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keVNjcm9sbCcpIHRhYmxlQm9keVNjcm9sbFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0YWJsZVNoZWxsJykgdGFibGVTaGVsbFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFNsaWNlUGFuZWxDb21wb25lbnQpIHNsaWNlUGFuZWxSZWY/OiBTbGljZVBhbmVsQ29tcG9uZW50PFQ+O1xuICBAQ29udGVudENoaWxkcmVuKEpxdENlbGxEZWZEaXJlY3RpdmUpIF9jZWxsRGVmcyE6IFF1ZXJ5TGlzdDxKcXRDZWxsRGVmRGlyZWN0aXZlPjtcbiAgLyoqIE1hcCBjbMOp4oaSVGVtcGxhdGVSZWYgcHLDqS1jYWxjdWzDqWUgZGVwdWlzIF9jZWxsRGVmcy4gTWlzZSDDoCBqb3VyIGRhbnMgbmdBZnRlckNvbnRlbnRJbml0IGV0IHN1ciBfY2VsbERlZnMuY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfY2VsbERlZk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogYW55OyBpbmRleDogbnVtYmVyOyB2YWx1ZTogYW55IH0+PigpO1xuXG4gIHJlbmRlcmVkQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgdGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KFtdKTtcblxuICAvKiogQ29uc3RhbnRlIGV4cG9zw6llIGF1IHRlbXBsYXRlIHBvdXIgbGUgbWF0Q29sdW1uRGVmIGRlIGxhIGxpZ25lIGRlIGdyb3VwZS4gKi9cbiAgcmVhZG9ubHkgX0dST1VQX1JPV19DT0xVTU4gPSBHUk9VUF9ST1dfQ09MVU1OO1xuICAvKiogQ2zDqXMgZCdhY2PDqHMgYXV4IHByb3ByacOpdMOpcyBkZXMgbGlnbmVzIHByb2pldMOpZXMg4oCUIGV4cG9zw6llcyBwb3VyIGxlIHRlbXBsYXRlLiAqL1xuICByZWFkb25seSBfUk9XX1JBV19LRVkgPSBST1dfUkFXX0tFWTtcbiAgcmVhZG9ubHkgX1JPV19JTkRFWF9LRVkgPSBST1dfSU5ERVhfS0VZO1xuICByZWFkb25seSBfUk9XX0dST1VQX0tFWSA9IFJPV19HUk9VUF9LRVk7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfQ09VTlQgPSBST1dfR1JPVVBfQ09VTlQ7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfUEFHRSA9IFJPV19HUk9VUF9QQUdFO1xuICByZWFkb25seSBfUk9XX0dST1VQX1BBR0VfQ09VTlQgPSBST1dfR1JPVVBfUEFHRV9DT1VOVDtcblxuICAvKiogRmFjYWRlIFZpZXcgOiDDqXRhdCBldCBhY3Rpb25zIGNlbnRyYWxpc8OpcyAoQ2hhbXBzIC8gR3JvdXAgYnkgLyBTbGljZSBieSkgKi9cbiAgcmVhZG9ubHkgX29yZ2FuaXplciA9IG5ldyBPcmdhbml6ZXJGYWNhZGU8VGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcblxuICAvKipcbiAgICogU25hcHNob3Qgc3RhYmxlIHN5bmNocm9uaXPDqSBkZXB1aXMgX29yZ2FuaXplci5maWVsZHMuYWN0aXZlRmllbGRzIGRhbnMgcmVmcmVzaFZpZXdNb2RlbCgpLlxuICAgKiBQcm9wcmnDqXTDqSAobm9uIGdldHRlcikgcG91ciBxdSdBbmd1bGFyIHB1aXNzZSBsYSBzdWl2cmUgc2FucyBORzAxMDAuXG4gICAqL1xuICBhY3RpdmVGaWVsZHM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSA9IFtdO1xuXG4gIGFjdGl2ZVNsaWNlRmlsdGVyOiAocm93OiBUKSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZTtcblxuICAvLyBQcm9wcmnDqXTDqXMgc3RhYmxlcyBwb3VyIGxlcyBiaW5kaW5ncyBkdSB0ZW1wbGF0ZSAoY29udHJlIGVycmV1ciBORzAxMDApXG4gIF9zbGljZUNvbmZpZ3M6IGFueVtdID0gW107XG4gIF9zbGljZUNvbHVtbnM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSA9IFtdO1xuICBfc2xpY2VEYXRhOiBUW10gPSBbXTtcbiAgX3NsaWNlU2hvd1RvZ2dsZSA9IHRydWU7XG4gIC8qKiBTbmFwc2hvdCBzdGFibGUgZGUgbGEgdmlzaWJpbGl0w6kgZHUgcGFubmVhdSBzbGljZSDigJQgamFtYWlzIGNhbGN1bMOpIGRlcHVpcyBAVmlld0NoaWxkICovXG4gIF9zaG93U2xpY2VQYW5lbCA9IGZhbHNlO1xuICAvKiogU25hcHNob3Qgc3RhYmxlIGRlIGwnw6l0YXQgY29sbGFwc2VkIGR1IHBhbm5lYXUgc2xpY2UsIG1pcyDDoCBqb3VyIHZpYSAoY29sbGFwc2VkQ2hhbmdlKSAqL1xuICBfc2xpY2VQYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9pbml0aWFsU2xpY2VQYW5lbENvbGxhcHNlZEFwcGxpZWQgPSBmYWxzZTtcblxuICAvLyBEw6lsw6lndcOpcyB2ZXJzIF92aWV3IChjb25zZXJ2w6lzIHBvdXIgY29tcGF0aWJpbGl0w6kgdGVtcGxhdGUgc2FucyByZWZhY3RvcmluZyBIVE1MKVxuICBnZXQgX3N0YXRpY1NsaWNlc0Zvck1lbnUoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZyB9PiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc3RhdGljU2xpY2VzRm9yTWVudTsgfVxuICBnZXQgX2FjdGl2ZUR5bmFtaWNTbGljZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHM7IH1cbiAgZ2V0IF9hdmFpbGFibGVDb2x1bW5zRm9yRHluYW1pY1NsaWNlKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hdmFpbGFibGVGb3JEeW5hbWljOyB9XG4gIGdldCBfYWxsRHluYW1pY1NsaWNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYWxsRHluYW1pY0ZpZWxkczsgfVxuICBnZXQgX2FjdGl2ZVNsaWNlQnlMYWJlbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYWN0aXZlTGFiZWw7IH1cbiAgX3NsaWNlQnlNZW51SXRlbXM6IEFycmF5PHsgaXNTdGF0aWM6IGJvb2xlYW47IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nOyBjb2w/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+IH0+ID0gW107XG5cbiAgc2VhcmNoUXVlcnkgPSAnJztcbiAgZ2V0IGFjdGl2ZUdyb3VwQnlLZXkoKTogc3RyaW5nIHwgbnVsbCB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXk7IH1cbiAgX21hdFNvcnRBY3RpdmUgPSAnJztcbiAgX21hdFNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJycgPSAnJztcbiAgcHJpdmF0ZSBfYWN0aXZlU29ydDogVGFibGVTb3J0U3RhdGUgPSB7IGFjdGl2ZTogJycsIGRpcmVjdGlvbjogJycgfTtcbiAgcHJpdmF0ZSBfc29ydFN1YnNjcmliZWQ6IE1hdFNvcnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF90b3RhbEZpbHRlcmVkQ291bnQgPSAwO1xuXG4gIC8qKiBHZXN0aW9ubmFpcmUgZHUgbW9kZSBHcm91cCBCeSAow6l0YXQgY29sbGFwc2VkLCBwYWdpbmF0aW9uLCB0cmkgZGVzIGdyb3VwZXMpLiAqL1xuICByZWFkb25seSBfZ3JvdXBCeSA9IG5ldyBHcm91cEJ5TWFuYWdlcihcbiAgICAoKSA9PiB7IHRoaXMuX3Byb2plY3RDdXJyZW50UGFnZSgpOyB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7IH0sXG4gICAgKCkgPT4gdGhpcy5yZWZyZXNoVmlld01vZGVsKCksXG4gICk7XG5cbiAgLyoqIETDqWzDqWd1w6lzIHZlcnMgR3JvdXBCeU1hbmFnZXIgcG91ciBsYSBjb21wYXRpYmlsaXTDqSBkZXMgdGVtcGxhdGVzLiAqL1xuICBnZXQgZ3JvdXBQYWdlU2l6ZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VTaXplOyB9XG4gIHNldCBncm91cFBhZ2VTaXplKHY6IG51bWJlcikgeyB0aGlzLl9ncm91cEJ5Lmdyb3VwUGFnZVNpemUgPSB2OyB9XG4gIGdldCBncm91cFNvcnRPcmRlcigpOiAnYXNjJyB8ICdkZXNjJyB7IHJldHVybiB0aGlzLl9ncm91cEJ5Lmdyb3VwU29ydE9yZGVyOyB9XG4gIHNldCBncm91cFNvcnRPcmRlcih2OiAnYXNjJyB8ICdkZXNjJykgeyB0aGlzLl9ncm91cEJ5Lmdyb3VwU29ydE9yZGVyID0gdjsgfVxuXG4gIC8qKlxuICAgKiBTdGF0dXQgZGVzIGNvbG9ubmVzIGBsYXp5YCBkw6lqw6AgZGVtYW5kw6llcyAoYWJzZW50ZSA9IHBhcyBlbmNvcmUgZGVtYW5kw6llKS5cbiAgICogYGxvYWRpbmdgIGR1cmUganVzcXUnw6AgbGEgcsOpY2VwdGlvbiBkZSBub3V2ZWxsZXMgYGRhdGFgIDsgbGEgcsOpZsOpcmVuY2UgY2hhbmdlIMOgIGNoYXF1ZSBtaXNlIMOgIGpvdXIgKHBhbm5lYXUgZGUgc2xpY2VzKS5cbiAgICovXG4gIF9sYXp5Q29sdW1uU3RhdHVzID0gbmV3IE1hcDxzdHJpbmcsICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2Vycm9yJz4oKTtcbiAgcHJpdmF0ZSBfbGF6eUZsdXNoUXVldWVkID0gZmFsc2U7XG4gIC8qKiBMaWduZXMgcmV0b3VybsOpZXMgcGFyIGBjb25maWcubGF6eUxvYWRlcmAgOiBlbGxlcyByZW1wbGFjZW50IGBkYXRhYCBqdXNxdSdhdSBwcm9jaGFpbiBgZGF0YWAuICovXG4gIHByaXZhdGUgX2xvYWRlclJvd3M6IFRbXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sb2FkZXJTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2xhenlXYXJuZWQgPSBmYWxzZTtcbiAgLyoqIENvbG9ubmVzIGRlIGxhIGRlcm5pw6hyZSBjb25maWcgcsOpc29sdWUgOiDDqXZpdGUgZGUgcmVjb25zdHJ1aXJlIGxlIHRhYmxlYXUgKGV0IGQnYWdpdGVyIGxlIHBhbm5lYXUgZGUgc2xpY2VzKSDDoCBjaGFxdWUgcmFmcmHDrmNoaXNzZW1lbnQuICovXG4gIHByaXZhdGUgX2NvbHVtbnNTb3VyY2U/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W107XG4gIHByaXZhdGUgX2NvbHVtbnNOb3JtYWxpemVkPzogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25hbExhenlDb2x1bW5zID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+PigpO1xuICBwcml2YXRlIF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIF9lbCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG4gIHByaXZhdGUgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIF9wYWdpbmF0b3JJbnRsID0gaW5qZWN0KE1hdFBhZ2luYXRvckludGwpO1xuICBwcml2YXRlIF9pMThuUmF3ID0gaW5qZWN0KEpRVF9JMThOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF90YWJsZVNoZWxsUmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnVsbEl0ZW1zUGVyUGFnZUxhYmVsID0gdGhpcy5fcGFnaW5hdG9ySW50bC5pdGVtc1BlclBhZ2VMYWJlbDtcbiAgY29weUZlZWRiYWNrTWVzc2FnZSA9ICcnO1xuICBwcml2YXRlIF9jb3B5RmVlZGJhY2tUaW1lcj86IG51bWJlcjtcblxuICAvKiogTGFiZWxzIGRlIGzigJlpbnRlcmZhY2UuIEZ1c2lvbm7DqXMgZGVwdWlzIEpRVF9JMThOX0RFRkFVTFRTIGV0IGxlIHRva2VuIEpRVF9JMThOIGluamVjdMOpLiAqL1xuICByZWFkb25seSBpMThuOiBKcXRJMThuID0gdGhpcy5faTE4blJhd1xuICAgID8geyAuLi5KUVRfSTE4Tl9ERUZBVUxUUywgLi4udGhpcy5faTE4blJhdyB9XG4gICAgOiB7IC4uLkpRVF9JMThOX0RFRkFVTFRTIH07XG5cbiAgaXNHcm91cEhlYWRlciA9IChfOiBudW1iZXIsIHJvdzogYW55KTogYm9vbGVhbiA9PiByb3dbR1JPVVBfSEVBREVSX01BUktFUl0gPT09IHRydWU7XG5cbiAgLyoqIFJldG91cm5lIHRydWUgc2kgbGEgbGlnbmUgZGUgZ3JvdXBlIGVzdCB1bmUgbGlnbmUgbm9ybWFsZSAobmkgbGF6eSwgbmkgdG9vLW1hbnkpLiAqL1xuICBpc05vcm1hbEdyb3VwUm93KHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gcm93W1JPV19HUk9VUF9LRVldO1xuICAgIHJldHVybiBrZXkgIT09IEdST1VQX0tFWV9MQVpZX0xPQURJTkcgJiYga2V5ICE9PSBHUk9VUF9LRVlfTEFaWV9FUlJPUiAmJiBrZXkgIT09IEdST1VQX0tFWV9UT09fTUFOWTtcbiAgfVxuICBpc0dyb3VwUm93TG9hZGluZyhyb3c6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldID09PSBHUk9VUF9LRVlfTEFaWV9MT0FESU5HOyB9XG4gIGlzR3JvdXBSb3dFcnJvcihyb3c6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldID09PSBHUk9VUF9LRVlfTEFaWV9FUlJPUjsgfVxuICBpc0dyb3VwUm93VG9vTWFueShyb3c6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldID09PSBHUk9VUF9LRVlfVE9PX01BTlk7IH1cblxuICByZXRyeUdyb3VwQnlDb2x1bW4oZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnJldHJ5TGF6eUNvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKiBHw6hyZSBsZSBjbGljIHN1ciB1bmUgbGlnbmUgZCdlbi10w6p0ZSBkZSBncm91cGUgKG5vLW9wIHBvdXIgbGVzIMOpdGF0cyBzcMOpY2lhdXgpLiAqL1xuICBvbkdyb3VwSGVhZGVyQ2xpY2socm93OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNOb3JtYWxHcm91cFJvdyhyb3cpKSByZXR1cm47XG4gICAgdGhpcy50b2dnbGVHcm91cENvbGxhcHNlKHJvd1tST1dfR1JPVVBfS0VZXSk7XG4gIH1cblxuICAvKiogR2VzdGlvbm5haXJlIGV4cG9ydCBDU1YuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9ydCA9IG5ldyBFeHBvcnRNYW5hZ2VyPFQ+KFxuICAgICgpID0+IHRoaXMuX2FsbEZpbHRlcmVkUm93cyxcbiAgICAoKSA9PiB0aGlzLmFjdGl2ZUZpZWxkcyxcbiAgICAoKSA9PiB0aGlzLnJlc29sdmVkQ29uZmlnLmV4cG9ydCxcbiAgICAoY29sLCByb3csIGlkeCkgPT4gdGhpcy5fcmVzb2x2ZUV4cG9ydFZhbHVlKGNvbCwgcm93LCBpZHgpLFxuICApO1xuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGVcblxuICBwYWdlU2l6ZSA9IDU7XG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDIwXTtcbiAgcGFnZVNpemVPcHRpb25zR3JvdXBCeTogbnVtYmVyW10gPSBbNSwgMTAsIDIwXTtcbiAgLyoqIFRhaWxsZSBkZSBwYWdlIGNob2lzaWUgcGFyIGwndXRpbGlzYXRldXIgb3UgcmVzdGF1csOpZSBkZXMgcHLDqWbDqXJlbmNlcyA7IHByaW9yaXRhaXJlIHN1ciBsYSBjb25maWcgdGFudCBxdWUgbGUgcGFnaW5hdG9yIGVzdCBhYnNlbnQgKG1vZGUgR3JvdXAgYnkpLiAqL1xuICBwcml2YXRlIF91c2VyUGFnZVNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGRyYWdnZWRDb2x1bW5LZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBkcmFnT3ZlckNvbHVtbktleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8g4pSA4pSAIE1vZGUgw6lkaXRpb24gKFByw6lmw6lyZW5jZXMpXG4gIC8qKiBWcmFpIHF1YW5kIGxlIG1vZGUgw6lkaXRpb24gZXN0IGFjdGlmIChyZXNpemUgKyBkcmFnIGNvbG9ubmVzLCBpbnRlcmFjdGlvbnMgZMOpc2FjdGl2w6llcykuICovXG4gIF9lZGl0TW9kZSA9IGZhbHNlO1xuICAvKiogTGFyZ2V1cnMgZGUgY29sb25uZXMgcGVyc29ubmFsaXPDqWVzIHBhciBsJ3V0aWxpc2F0ZXVyIChjbMOpIOKGkiBweCkuICovXG4gIF9jb2x1bW5XaWR0aHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgLyoqIE1lc3NhZ2UgZGUgZmVlZGJhY2sgYXByw6hzIHNhdmUvY2xlYXIuIGBudWxsYCA9IHBhcyBkZSBtZXNzYWdlLiAqL1xuICBfcHJlZmVyZW5jZXNNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIFZyYWkgc2kgdW5lIGNvbmZpZ3VyYXRpb24gZXN0IHNhdXZlZ2FyZMOpZSBwb3VyIGNlIHRhYmxlYXUuICovXG4gIF9oYXNTYXZlZENvbmZpZyA9IGZhbHNlO1xuICBwcml2YXRlIF9wcmVmZXJlbmNlc01hbmFnZXI6IFRhYmxlUHJlZmVyZW5jZXNNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiB0cnVlIHVuZSBmb2lzIHF1ZSBsZSBncm91cC1ieSBwYXIgZMOpZmF1dCBhIMOpdMOpIGluaXRpYWxpc8OpICjDqXZpdGUgZGUgcmVjb25maWd1cmVyIEdyb3VwQnlNYW5hZ2VyIMOgIGNoYXF1ZSBjaGFuZ2VtZW50IGRlIGRvbm7DqWVzKS4gKi9cbiAgcHJpdmF0ZSBfZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jlc2l6ZVN0YXRlOiB7IGtleTogc3RyaW5nOyBzdGFydFg6IG51bWJlcjsgc3RhcnRXaWR0aDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgLyoqIER5bmFtaWMgc2xpY2Uga2V5cyDDoCByZXN0YXVyZXIgYXByw6hzIG5nQWZ0ZXJWaWV3SW5pdCAoc2xpY2VQYW5lbFJlZiBwYXMgZW5jb3JlIGRpc3BvKS4gKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ0R5bmFtaWNTbGljZUtleXM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBGaWx0cmVzIGRlIHNsaWNlIMOgIHJlc3RhdXJlciBhcHLDqHMgbmdBZnRlclZpZXdJbml0IChzbGljZVBhbmVsUmVmIHBhcyBlbmNvcmUgZGlzcG8pLiAqL1xuICBwcml2YXRlIF9wZW5kaW5nU2xpY2VGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlc29sdmVkQ29uZmlnOiBUYWJsZVByb3ZpZGVyPFQ+ID0geyBjb2x1bW5zOiBbXSB9O1xuICBwcml2YXRlIF9jb2x1bW5NYXA6IE1hcDxzdHJpbmcsIFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIF9yZXNvbHZlZERhdGE6IFRbXSA9IFtdO1xuICBwcml2YXRlIF9wcmVzZXJ2ZVBhZ2VJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2xhc3RDb25maWdDbGVhclNlYXJjaElucHV0OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfaW5pdGlhbFNlYXJjaFF1ZXJ5QXBwbGllZCA9IGZhbHNlO1xuICBwcml2YXRlIF9sYXN0SW5pdGlhbFNlYXJjaFF1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gU2V1aWwgYXUtZGVsw6AgZHVxdWVsIGxlIHJlbmR1IGdyb3Vww6kgZXN0IGJsb3F1w6kgcG91ciBwcm90w6lnZXIgbGUgbmF2aWdhdGV1clxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfR1JPVVBfQ09VTlQgPSA1MDA7XG5cbiAgLy8g4pSA4pSAIE9wdGltaXNhdGlvbiBwZXJmb3JtYW5jZVxuICBwcml2YXRlIF9hbGxGaWx0ZXJlZFJvd3M6IFRbXSA9IFtdO1xuICBwcml2YXRlIF9wYWdpbmF0b3JTdWJzY3JpYmVkOiBNYXRQYWdpbmF0b3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogQ2FjaGUgZ3JvdXBCeSDigJQgaW52YWxpZMOpIGTDqHMgcXVlIHJvd3Mva2V5L3RyaSBjaGFuZ2VudC4gKi9cbiAgcHJpdmF0ZSBfZ3JvdXBDYWNoZTogR3JvdXBCeUNhY2hlPFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3BlbmRpbmdSZW5kZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmVycmVkVGltZXJzID0gbmV3IFNldDxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4oKTtcbiAgcHJpdmF0ZSBfaGVhZGVyTWVhc3VyZUZyYW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfc3RhdGljU2xpY2VIaWRkZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2NvbmZpZ0hpZGRlbktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXG4gIC8qKiBDbMOpcyBkZXMgY29sb25uZXMgdmlzaWJsZXMgZHUgZGVybmllciDDqW1pc3Npb24gY29sdW1uc0NoYW5nZSAocG91ciDDqXZpdGVyIGxlcyDDqW1pc3Npb25zIGR1cGxpcXVlbWVudCkuICovXG4gIHByaXZhdGUgX3ByZXZDb2x1bW5LZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgZW1pdENvbHVtbnNDaGFuZ2VJZk5lZWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0S2V5cyA9IFsuLi50aGlzLnJlbmRlcmVkQ29sdW1uc107XG4gICAgaWYgKG5leHRLZXlzLmxlbmd0aCA9PT0gdGhpcy5fcHJldkNvbHVtbktleXMubGVuZ3RoXG4gICAgICAmJiBuZXh0S2V5cy5ldmVyeSgoa2V5LCBpbmRleCkgPT4ga2V5ID09PSB0aGlzLl9wcmV2Q29sdW1uS2V5c1tpbmRleF0pKSByZXR1cm47XG4gICAgdGhpcy5fcHJldkNvbHVtbktleXMgPSBuZXh0S2V5cztcbiAgICB0aGlzLmNvbHVtbnNDaGFuZ2UuZW1pdChuZXh0S2V5cyk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YUNoYW5nZWQgPSAhIShjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snZGF0YVNvdXJjZSddKTtcbiAgICBpZiAoZGF0YUNoYW5nZWQpIHRoaXMuX29uTmV3RGF0YSgpO1xuICAgIGlmIChjaGFuZ2VzWydsYXp5RXJyb3InXSkgdGhpcy5fYXBwbHlMYXp5RXJyb3IoKTtcbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdTZWFyY2hSZXNldCgpO1xuICAgICAgdGhpcy5hcHBseUluaXRpYWxTZWFyY2hRdWVyeShjaGFuZ2VzWydjb25maWcnXS5maXJzdENoYW5nZSk7XG4gICAgICB0aGlzLl9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk7IC8vIGxlcyBjb2xvbm5lcyBvbnQgcHUgY2hhbmdlclxuICAgIH1cbiAgICBpZiAoZGF0YUNoYW5nZWQgJiYgdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5zaXplICYmIHRoaXMuX3Jlc29sdmVkRGF0YS5sZW5ndGgpIHRoaXMuX3J1bkxhenlMb2FkZXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWJ1aWxkQ2VsbERlZk1hcCgpO1xuICAgIHRoaXMuX2NlbGxEZWZzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVidWlsZENlbGxEZWZNYXAoKTtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGFjaFBhZ2luYXRvcigpO1xuICAgIHRoaXMuYXR0YWNoU29ydCgpO1xuICAgIHRoaXMuX21lYXN1cmVIZWFkZXJIZWlnaHQoKTtcbiAgICB0aGlzLl9vYnNlcnZlVGFibGVTaGVsbFdpZHRoKCk7XG4gICAgdGhpcy5fYXBwbHlQZW5kaW5nRHluYW1pY1NsaWNlS2V5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZVRhYmxlU2hlbGxXaWR0aCgpOiB2b2lkIHtcbiAgICBjb25zdCB0YWJsZVNoZWxsID0gdGhpcy50YWJsZVNoZWxsUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghdGFibGVTaGVsbCB8fCB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICB0aGlzLl90YWJsZVNoZWxsUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKFtlbnRyeV0pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBhY3QgPSBlbnRyeS5jb250ZW50UmVjdC53aWR0aCA8IDY2MDtcbiAgICAgIGNvbnN0IGxhYmVsID0gY29tcGFjdCA/ICdQYXIgcGFnZSA6JyA6IHRoaXMuX2Z1bGxJdGVtc1BlclBhZ2VMYWJlbDtcbiAgICAgIGlmICh0aGlzLl9wYWdpbmF0b3JJbnRsLml0ZW1zUGVyUGFnZUxhYmVsID09PSBsYWJlbCkgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdG9ySW50bC5pdGVtc1BlclBhZ2VMYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLl9wYWdpbmF0b3JJbnRsLmNoYW5nZXMubmV4dCgpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLl90YWJsZVNoZWxsUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0YWJsZVNoZWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UGVuZGluZ0R5bmFtaWNTbGljZUtleXMoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzUGVuZGluZ0R5bmFtaWMgPSAhIXRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzO1xuICAgIGNvbnN0IGhhc1BlbmRpbmdGaWx0ZXJzID0gISF0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzO1xuICAgIGlmICghaGFzUGVuZGluZ0R5bmFtaWMgJiYgIWhhc1BlbmRpbmdGaWx0ZXJzKSByZXR1cm47XG5cbiAgICBjb25zdCBhbGxDb2xzID0gdGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdO1xuICAgIGNvbnN0IGtleXMgPSBoYXNQZW5kaW5nRHluYW1pYyA/IFsuLi50aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cyFdIDogW107XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPyB7IC4uLnRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgfSA6IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPSBudWxsO1xuXG4gICAgdGhpcy5fc2NoZWR1bGVEZWZlcnJlZCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVzb2x2ZWREYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoZmlsdGVycykgdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycyA9IGZpbHRlcnM7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gWy4uLmtleXNdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgY29sID0gYWxsQ29scy5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICAgIGlmIChjb2wpIHRoaXMuYWRkRHluYW1pY1NsaWNlKGNvbCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChmaWx0ZXJzICYmIHRoaXMuc2xpY2VQYW5lbFJlZikge1xuICAgICAgICB0aGlzLnNsaWNlUGFuZWxSZWYucmVzdG9yZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RhYmxlU2hlbGxSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIGlmICh0aGlzLl9jb3B5RmVlZGJhY2tUaW1lciAhPT0gdW5kZWZpbmVkKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyKTtcbiAgICBpZiAodGhpcy5fcGVuZGluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3BlbmRpbmdSZW5kZXIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lcik7XG4gICAgfVxuICAgIHRoaXMuX2RlZmVycmVkVGltZXJzLmZvckVhY2godGltZXIgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKSk7XG4gICAgdGhpcy5fZGVmZXJyZWRUaW1lcnMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5faGVhZGVyTWVhc3VyZUZyYW1lICE9PSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9oZWFkZXJNZWFzdXJlRnJhbWUpO1xuICAgIC8vIE5ldHRvaWUgdW4gw6l2ZW50dWVsIHJlc2l6ZSBlbiBjb3VycyAobGlzdGVuZXJzIHdpbmRvdyBub24gcmV0aXLDqXMpXG4gICAgdGhpcy5fcmVzaXplU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX29yZ2FuaXplci5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIF9tZWFzdXJlSGVhZGVySGVpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1lYXN1cmUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZGVzdHJveWVkKSByZXR1cm47XG4gICAgICBjb25zdCBoZWFkZXJSb3cgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RyLm1hdC1tZGMtaGVhZGVyLXJvdycpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGhlYWRlclJvdykge1xuICAgICAgICBjb25zdCBoID0gaGVhZGVyUm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgaWYgKGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY3R1YWwtaGVhZGVyLWhlaWdodCcsIGggKyAncHgnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEhlYWRlciBwYXMgZW5jb3JlIHJlbmR1IChleDogbGF6eSBBbmd1bGFyIE1hdGVyaWFsKSwgb24gcsOpZXNzYWllIGFwcsOocyBsZSBwcm9jaGFpbiBmcmFtZVxuICAgICAgdGhpcy5fc2NoZWR1bGVIZWFkZXJNZWFzdXJlKG1lYXN1cmUpO1xuICAgIH07XG4gICAgdGhpcy5fc2NoZWR1bGVIZWFkZXJNZWFzdXJlKG1lYXN1cmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2NoZWR1bGVIZWFkZXJNZWFzdXJlKG1lYXN1cmU6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5faGVhZGVyTWVhc3VyZUZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5faGVhZGVyTWVhc3VyZUZyYW1lID0gbnVsbDtcbiAgICAgICAgbWVhc3VyZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zY2hlZHVsZURlZmVycmVkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2RlZmVycmVkVGltZXJzLmRlbGV0ZSh0aW1lcik7XG4gICAgICBpZiAoIXRoaXMuX2Rlc3Ryb3llZCkgY2FsbGJhY2soKTtcbiAgICB9LCAwKTtcbiAgICB0aGlzLl9kZWZlcnJlZFRpbWVycy5hZGQodGltZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3JnYW5pemVyQ29uZmlnQ2FjaGU6IE9yZ2FuaXplckNvbmZpZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk6IHZvaWQgeyB0aGlzLl9vcmdhbml6ZXJDb25maWdDYWNoZSA9IG51bGw7IH1cbiAgZ2V0IG9yZ2FuaXplckNvbmZpZygpOiBPcmdhbml6ZXJDb25maWcge1xuICAgIGlmICh0aGlzLl9vcmdhbml6ZXJDb25maWdDYWNoZSkgcmV0dXJuIHRoaXMuX29yZ2FuaXplckNvbmZpZ0NhY2hlO1xuICAgIGNvbnN0IGFsbENvbHMgPSBbLi4udGhpcy5fb3JnYW5pemVyLm1lbnVCYXNlRmllbGRzLCAuLi50aGlzLl9vcmdhbml6ZXIubWVudU9wdGlvbmFsRmllbGRzXTtcbiAgICBjb25zdCBvcmdhbml6ZXJPcHRpb25zID0gdGhpcy5yZXNvbHZlZENvbmZpZy5vcmdhbml6ZXI7XG4gICAgdGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGUgPSB7XG4gICAgICBmaWVsZHM6IHRoaXMuX29yZ2FuaXplci5zaG93RmllbGRzID8gYWxsQ29scy5tYXAoYyA9PiAoe1xuICAgICAgICBpZDogYy5rZXksXG4gICAgICAgIGxhYmVsOiB0aGlzLmNvbExhYmVsKGMpLFxuICAgICAgICBpY29uOiBjLmljb24sXG4gICAgICAgIHN0YXRlOiAncmVhZHknIGFzIGNvbnN0LFxuICAgICAgfSkpIDogdW5kZWZpbmVkLFxuICAgICAgZ3JvdXBzOiB0aGlzLl9vcmdhbml6ZXIuc2hvd0dyb3VwQnlTZWN0aW9uID8gdGhpcy5fb3JnYW5pemVyLmdyb3VwQnlGaWVsZHMubWFwKGMgPT4gKHtcbiAgICAgICAgaWQ6IGMua2V5LFxuICAgICAgICBsYWJlbDogdGhpcy5jb2xMYWJlbChjKSxcbiAgICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgfSkpIDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VzOiB0aGlzLl9vcmdhbml6ZXIuc2hvd1NsaWNlQnlTZWN0aW9uID8gdGhpcy5fc2xpY2VCeU1lbnVJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICBpZDogaXRlbS5rZXksXG4gICAgICAgIGxhYmVsOiBpdGVtLnRpdGxlLFxuICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICB9KSkgOiB1bmRlZmluZWQsXG4gICAgICBidXR0b25MYWJlbDogb3JnYW5pemVyT3B0aW9ucz8uYnV0dG9uTGFiZWwsXG4gICAgICBidXR0b25JY29uOiBvcmdhbml6ZXJPcHRpb25zPy5idXR0b25JY29uLFxuICAgICAgc2hvd0J1dHRvbkljb246IG9yZ2FuaXplck9wdGlvbnM/LnNob3dCdXR0b25JY29uLFxuICAgICAgc2hvd0V4cG9ydDogdGhpcy5zaG93RXhwb3J0QnV0dG9uLFxuICAgICAgb25FeHBvcnQ6ICgpID0+IHRoaXMub25FeHBvcnQoKSxcbiAgICAgIHNob3dQcmVmZXJlbmNlczogdGhpcy5zaG93UHJlZmVyZW5jZXNNZW51LFxuICAgICAgaGFzU2F2ZWRQcmVmZXJlbmNlczogdGhpcy5oYXNTYXZlZFByZWZlcmVuY2VzLFxuICAgICAgb25QcmVmZXJlbmNlc0VkaXQ6ICgpID0+IHRoaXMuZW50ZXJFZGl0TW9kZSgpLFxuICAgICAgb25QcmVmZXJlbmNlc1NhdmU6ICgpID0+IHRoaXMuc2F2ZVByZWZlcmVuY2VzKCksXG4gICAgICBvblByZWZlcmVuY2VzQ2xlYXI6ICgpID0+IHRoaXMuY2xlYXJQcmVmZXJlbmNlcygpLFxuICAgICAgc2hvd0FjdGlvbnM6IHRoaXMucmVzb2x2ZWRDb25maWcuc2hvd0FjdGlvbnMgPT09IHRydWUsXG4gICAgICBvbkNvcHlWaXN1YWw6IHRoaXMucmVzb2x2ZWRDb25maWcub25Db3B5VmlzdWFsID8/ICgoKSA9PiB0aGlzLmNvcHlWaXN1YWxTbmFwc2hvdCgpKSxcbiAgICAgIG9uVG9nZ2xlRnVsbHNjcmVlbjogdGhpcy5yZXNvbHZlZENvbmZpZy5vblRvZ2dsZUZ1bGxzY3JlZW4gPz8gKHRoaXMuZnVsbHNjcmVlblN1cHBvcnRlZCA/ICgpID0+IHRoaXMudG9nZ2xlRnVsbHNjcmVlbigpIDogdW5kZWZpbmVkKSxcbiAgICAgIGlzRnVsbHNjcmVlbjogdGhpcy5faXNGdWxsc2NyZWVuLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplckNvbmZpZ0NhY2hlO1xuICB9XG5cbiAgZ2V0IG9yZ2FuaXplckhpZGVNZW51VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLm9yZ2FuaXplcj8uaGlkZU1lbnVWYWx1ZXMgPT09IHRydWU7XG4gIH1cblxuICBnZXQgb3JnYW5pemVyU3RhdGUoKTogT3JnYW5pemVyU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlRmllbGRzOiB0aGlzLnZpc2libGVDb2x1bW5zLm1hcChjID0+IGMua2V5KSxcbiAgICAgIHNlbGVjdGVkR3JvdXBCeTogdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID8/IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkU2xpY2VzOiB0aGlzLl9zbGljZUJ5TWVudUl0ZW1zXG4gICAgICAgIC5maWx0ZXIoaSA9PiB0aGlzLmlzU2xpY2VNZW51SXRlbUFjdGl2ZShpKSlcbiAgICAgICAgLm1hcChpID0+IGkua2V5KSxcbiAgICB9O1xuICB9XG5cbiAgb25Pcmdhbml6ZXJWaWV3Q2hhbmdlKGV2ZW50OiBPcmdhbml6ZXJCdXR0b25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC50eXBlID09PSAnZmllbGRUb2dnbGVkJykge1xuICAgICAgY29uc3QgYWxsQ29scyA9IFsuLi50aGlzLl9vcmdhbml6ZXIubWVudUJhc2VGaWVsZHMsIC4uLnRoaXMuX29yZ2FuaXplci5tZW51T3B0aW9uYWxGaWVsZHNdO1xuICAgICAgY29uc3QgbmV3VmlzaWJsZSA9IG5ldyBTZXQoZXZlbnQuc3RhdGUudmlzaWJsZUZpZWxkcyA/PyBbXSk7XG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiBhbGxDb2xzKSB7XG4gICAgICAgIGNvbnN0IGlzTm93VmlzaWJsZSA9IG5ld1Zpc2libGUuaGFzKGNvbC5rZXkpO1xuICAgICAgICBpZiAodGhpcy5pc0NvbHVtblZpc2libGUoY29sLmtleSkgIT09IGlzTm93VmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMub25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKGNvbCwgaXNOb3dWaXNpYmxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ2dyb3VwQnlTZWxlY3RlZCcpIHtcbiAgICAgIGNvbnN0IG5ld0tleSA9IGV2ZW50LnN0YXRlLnNlbGVjdGVkR3JvdXBCeSA/PyBudWxsO1xuICAgICAgdGhpcy5vbkdyb3VwQnlDaGFuZ2UobmV3S2V5ID09PSB0aGlzLmFjdGl2ZUdyb3VwQnlLZXkgPyBudWxsIDogbmV3S2V5KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdzbGljZVNlbGVjdGVkJykge1xuICAgICAgY29uc3QgcHJldlNsaWNlcyA9IG5ldyBTZXQodGhpcy5vcmdhbml6ZXJTdGF0ZS5zZWxlY3RlZFNsaWNlcyA/PyBbXSk7XG4gICAgICBjb25zdCBuZXh0U2xpY2VzID0gbmV3IFNldChldmVudC5zdGF0ZS5zZWxlY3RlZFNsaWNlcyA/PyBbXSk7XG4gICAgICBjb25zdCBjbGlja2VkSWQgPSBbLi4ucHJldlNsaWNlc10uZmluZChpZCA9PiAhbmV4dFNsaWNlcy5oYXMoaWQpKVxuICAgICAgICA/PyBbLi4ubmV4dFNsaWNlc10uZmluZChpZCA9PiAhcHJldlNsaWNlcy5oYXMoaWQpKTtcbiAgICAgIGlmIChjbGlja2VkSWQpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NsaWNlQnlNZW51SXRlbXMuZmluZChpID0+IGkua2V5ID09PSBjbGlja2VkSWQpO1xuICAgICAgICBpZiAoaXRlbSkgdGhpcy5vblNsaWNlTWVudUl0ZW1DbGljayhpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcudGl0bGUgPz8gJyc7XG4gIH1cblxuICBnZXQgc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZWRDb25maWcudGl0bGU7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWVsZHM7XG4gIH1cblxuICBnZXQgc2hvd1NlYXJjaEJhcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcuc2VhcmNoPy5lbmFibGVkID09PSB0cnVlOyB9XG4gIGdldCBzaG93Vmlld0J1dHRvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5lbmFibGVkIHx8IHRoaXMuc2hvd0V4cG9ydEJ1dHRvbiB8fCB0aGlzLnNob3dQcmVmZXJlbmNlc01lbnU7IH1cbiAgZ2V0IHNob3dPcmdhbml6ZXJCdXR0b24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZW5hYmxlZCB8fCB0aGlzLnNob3dFeHBvcnRCdXR0b24gfHwgdGhpcy5zaG93UHJlZmVyZW5jZXNNZW51OyB9XG4gIGdldCBzaG93U2xpY2VFeHBhbmRCdG4oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zaG93U2xpY2VQYW5lbCAmJiB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkICYmIHRoaXMuX3NsaWNlU2hvd1RvZ2dsZTsgfVxuICBnZXQgc2hvd0V4cG9ydEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5leHBvcnQ/LmVuYWJsZWQgPT09IHRydWU7XG4gIH1cbiAgZ2V0IHNob3dQcmVmZXJlbmNlc01lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcucHJlZmVyZW5jZXM/LmVuYWJsZWQgPT09IHRydWU7XG4gIH1cblxuICBnZXQgaXNEZWZhdWx0R3JvdXBCeUFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlR3JvdXBCeUtleSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUdyb3VwQnlLZXkgPT09IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdEdyb3VwQnk7XG4gIH1cblxuICBnZXQgaGFzU2F2ZWRQcmVmZXJlbmNlcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2hhc1NhdmVkQ29uZmlnOyB9XG5cbiAgZ2V0IHNob3dUb29sYmFyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zaG93U2VhcmNoQmFyIHx8IHRoaXMuc2hvd1ZpZXdCdXR0b24gfHwgdGhpcy5zaG93U2xpY2VFeHBhbmRCdG47IH1cbiAgZ2V0IGZ1bGxzY3JlZW5TdXBwb3J0ZWQoKTogYm9vbGVhbiB7IHJldHVybiBGdWxsc2NyZWVuTWFuYWdlci5pc1N1cHBvcnRlZCh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTsgfVxuXG4gIGFzeW5jIHRvZ2dsZUZ1bGxzY3JlZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IEZ1bGxzY3JlZW5NYW5hZ2VyLnRvZ2dsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuX2lzRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIENyw6llIHVuIHNuYXBzaG90IGF1dG9ub21lIGV0IGxlIHBsYWNlIGRhbnMgbGUgc3RvY2thZ2UgcGFydGFnw6kuICovXG4gIGNvcHlWaXN1YWxTbmFwc2hvdChsYWJlbD86IHN0cmluZyk6IFZpc3VhbFNuYXBzaG90IHwgbnVsbCB7XG4gICAgY29uc3Qgc25hcHNob3RMYWJlbCA9IGxhYmVsID8/ICh0aGlzLnRpdGxlIHx8ICdUYWJsZWF1Jyk7XG4gICAgaWYgKCFzbmFwc2hvdExhYmVsPy50cmltKCkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IFZpc3VhbFNuYXBzaG90U3RvcmFnZSgpLmNyZWF0ZSh0aGlzLmNyZWF0ZVZpc3VhbFNuYXBzaG90KHNuYXBzaG90TGFiZWwudHJpbSgpKSk7XG4gICAgdGhpcy52aXN1YWxDb3BpZWQuZW1pdChzbmFwc2hvdCk7XG4gICAgdGhpcy5zaG93Q29weUZlZWRiYWNrKCk7XG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93Q29weUZlZWRiYWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvcHlGZWVkYmFjay5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIHRoaXMuY29weUZlZWRiYWNrTWVzc2FnZSA9IHRoaXMuY29weUZlZWRiYWNrLm1lc3NhZ2UgfHwgJ0NvcGnDqSc7XG4gICAgaWYgKHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyICE9PSB1bmRlZmluZWQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fY29weUZlZWRiYWNrVGltZXIpO1xuICAgIHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb3B5RmVlZGJhY2tNZXNzYWdlID0gJycsIHRoaXMuY29weUZlZWRiYWNrLmR1cmF0aW9uTXMgPz8gMjIwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpmdWxsc2NyZWVuY2hhbmdlJylcbiAgb25GdWxsc2NyZWVuQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzRnVsbHNjcmVlbiA9IEZ1bGxzY3JlZW5NYW5hZ2VyLmlzQWN0aXZlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuX2ludmFsaWRhdGVPcmdhbml6ZXJDb25maWcoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBleHBhbmRTbGljZVBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8udG9nZ2xlUGFuZWwoKTtcbiAgfVxuICBnZXQgc2hvd0ZpZWxkcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zaG93RmllbGRzOyB9XG4gIGdldCBzaG93R3JvdXBCeVNlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2hvd0dyb3VwQnlTZWN0aW9uOyB9XG5cbiAgZ2V0IGZpbHRlcmVkUm93Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID8gdGhpcy5fdG90YWxGaWx0ZXJlZENvdW50IDogdGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBhY3RpdmVHcm91cEJ5TGFiZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5hY3RpdmVHcm91cEJ5TGFiZWw7IH1cblxuICBnZXQgdG90YWxDb2x1bW5Db3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnRvdGFsRmllbGRDb3VudDsgfVxuXG4gIGdldCBhY3RpdmVTbGljZUJ5TGFiZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUxhYmVsOyB9XG5cbiAgZ2V0IGFjdGl2ZUR5bmFtaWNTbGljZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHM7IH1cblxuICByZW1vdmVEeW5hbWljU2xpY2VCeUtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8ucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoa2V5KTtcbiAgfVxuXG4gIGdldCBncm91cEJ5Q29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmdyb3VwQnlGaWVsZHM7IH1cblxuICBjb2xMYWJlbChjb2w6IHsga2V5OiBzdHJpbmc7IGhlYWRlcj86IHN0cmluZyB9KTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5maWVsZExhYmVsKGNvbCk7IH1cblxuICAvKiogVHJhZHVpdCBsZXMgb3B0aW9ucyBkZSBsYSB2dWUgdGFibGUgdmVycyBjZWxsZXMgZGUgbCdPcmdhbml6ZXIuICovXG4gIHByaXZhdGUgX29yZ2FuaXplclZpZXdDb25maWcoKTogT3JnYW5pemVyVmlld09wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnZpZXc7XG4gICAgaWYgKCF2aWV3KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBlbmFibGVkOiB2aWV3LmVuYWJsZWQsXG4gICAgICBlbmFibGVGaWVsZFJlbW92YWw6IHZpZXcuZW5hYmxlQ29sdW1uUmVtb3ZhbCxcbiAgICAgIGVuYWJsZUZpZWxkRHJhZ0Ryb3A6IHZpZXcuZW5hYmxlQ29sdW1uRHJhZ0Ryb3AsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBOZSBjaGFuZ2UgbGEgcsOpZsOpcmVuY2UgcXVlIHNpIGxlIGNvbnRlbnUgY2hhbmdlIDogbGUgcGFubmVhdSByZWNhbGN1bGUgdG91dCDDoCBjaGFxdWUgbm91dmVsbGUgcsOpZsOpcmVuY2UuICovXG4gIHByaXZhdGUgX3NldFNsaWNlQ29uZmlncyhuZXh0OiBTbGljZUNvbmZpZzxUPltdKTogdm9pZCB7XG4gICAgY29uc3Qgc2FtZSA9IG5leHQubGVuZ3RoID09PSB0aGlzLl9zbGljZUNvbmZpZ3MubGVuZ3RoICYmIG5leHQuZXZlcnkoKHNsaWNlLCBpKSA9PiBzbGljZSA9PT0gdGhpcy5fc2xpY2VDb25maWdzW2ldKTtcbiAgICBpZiAoIXNhbWUpIHRoaXMuX3NsaWNlQ29uZmlncyA9IG5leHQ7XG4gIH1cblxuICBvblNlYXJjaENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9ydW5TZWFyY2goKTtcbiAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHRoaXMuc2VhcmNoUXVlcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcnVuU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLl9zY2hlZHVsZVJlbmRlcigpO1xuICAgIHRoaXMucGFnaW5hdG9yPy5maXJzdFBhZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0R3JvdXBCeUFuZEVtaXQoa2V5OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNLZXkgPSB0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXkgPz8gbnVsbDtcbiAgICB0aGlzLl9vcmdhbml6ZXIuc2V0R3JvdXBCeShrZXkpO1xuICAgIGNvbnN0IG5leHRLZXkgPSB0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXkgPz8gbnVsbDtcbiAgICBpZiAocHJldmlvdXNLZXkgIT09IG5leHRLZXkpIHRoaXMuZ3JvdXBCeUNoYW5nZS5lbWl0KG5leHRLZXkpO1xuICB9XG5cbiAgb25Hcm91cEJ5Q2hhbmdlKGtleTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2V0R3JvdXBCeUFuZEVtaXQoa2V5KTtcbiAgICB0aGlzLl9ncm91cEJ5LnNldERlZmF1bHRDb2xsYXBzZWQoa2V5ICE9PSBudWxsKTtcbiAgICB0aGlzLl9ncm91cEJ5LnJlc2V0KCk7XG4gICAgdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VTaXplID0gdGhpcy5yZXNvbHZlRGVmYXVsdEdyb3VwUGFnZVNpemUoKTtcbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICB0aGlzLnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLl9zY2hlZHVsZURlZmVycmVkKCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJsZUJvZHlTY3JvbGxSZWY/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBvbkdyb3VwUGFnZVNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS5vbkdyb3VwUGFnZVNpemVDaGFuZ2UoTnVtYmVyKHNpemUpKTtcbiAgfVxuXG4gIG9uR3JvdXBTb3J0VG9nZ2xlKGRpcjogJ2FzYycgfCAnZGVzYycpOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cEJ5Lm9uR3JvdXBTb3J0VG9nZ2xlKGRpciwgKGtleSkgPT4ge1xuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuX3NjaGVkdWxlRGVmZXJyZWQoKCkgPT4gdGhpcy5zY3JvbGxUb0dyb3VwSGVhZGVyKGtleSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldExhenlDb2x1bW5TdGF0dXMoa2V5OiBzdHJpbmcpOiAnaWRsZScgfCAnbG9hZGluZycgfCAnbG9hZGVkJyB8ICdlcnJvcicge1xuICAgIHJldHVybiB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChrZXkpID8/ICdpZGxlJztcbiAgfVxuXG4gIGdldExhenlSZW5kZXJUeXBlKHJvd1ZhbHVlOiBhbnkpOiAnbG9hZGluZycgfCAnZXJyb3InIHwgJ3ZhbHVlJyB7XG4gICAgaWYgKHJvd1ZhbHVlID09PSBMQVpZX0xPQURJTkdfVkFMVUUpIHJldHVybiAnbG9hZGluZyc7XG4gICAgaWYgKHJvd1ZhbHVlID09PSBMQVpZX0VSUk9SX1ZBTFVFKSByZXR1cm4gJ2Vycm9yJztcbiAgICByZXR1cm4gJ3ZhbHVlJztcbiAgfVxuXG4gIC8qKiBSZWxhbmNlIGxhIGRlbWFuZGUgZGVzIGNvbG9ubmVzIGVuIGVycmV1ciA6IGxlIGNoYXJnZXVyIGVzdCByYXBwZWzDqSwgb3UgbCdhcHBsaWNhdGlvbiByZWZhaXQgc2EgcmVxdcOqdGUgY29tcGzDqHRlLiAqL1xuICByZXRyeUxhenlDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGZhaWxlZCA9IFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzXS5maWx0ZXIoKFssIHN0YXR1c10pID0+IHN0YXR1cyA9PT0gJ2Vycm9yJykubWFwKChba2V5XSkgPT4ga2V5KTtcbiAgICBpZiAoIWZhaWxlZC5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLl9zZXRMYXp5U3RhdHVzKGZhaWxlZCwgJ2xvYWRpbmcnKTtcbiAgICB0aGlzLmxhenlDb2x1bW5zUmVxdWVzdGVkLmVtaXQoWy4uLnRoaXMuX2xhenlDb2x1bW5TdGF0dXMua2V5cygpXSk7XG4gICAgdGhpcy5fcnVuTGF6eUxvYWRlcigpO1xuICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gIH1cblxuICAvKiogQ29sb25uZXMgbGF6eSBkb250IGxhIHZhbGV1ciBlc3QgbsOpY2Vzc2FpcmUgOiBhZmZpY2jDqWVzLCB1dGlsaXPDqWVzIGVuIEdyb3VwIGJ5IG91IGVuIFNsaWNlIGJ5IGR5bmFtaXF1ZS4gKi9cbiAgcHJpdmF0ZSBfdXNlZExhenlDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgY29uc3QgdXNlZCA9IG5ldyBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+PigpO1xuICAgIGNvbnN0IGFkZCA9IChjb2x1bW4/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KSA9PiB7IGlmIChjb2x1bW4/LmxhenkpIHVzZWQuc2V0KGNvbHVtbi5rZXksIGNvbHVtbik7IH07XG4gICAgdGhpcy5hY3RpdmVGaWVsZHMuZm9yRWFjaChhZGQpO1xuICAgIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMuZm9yRWFjaChhZGQpO1xuICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5hY3RpdmVHcm91cEJ5S2V5O1xuICAgIGlmIChncm91cEtleSkgYWRkKHRoaXMuX2NvbHVtbk1hcC5nZXQoZ3JvdXBLZXkpKTtcbiAgICByZXR1cm4gWy4uLnVzZWQudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZWwgcXVlIHNvaXQgbGUgY2hlbWluIGQnYWN0aXZhdGlvbiAoT3JnYW5pemVyLCBHcm91cCBieSwgU2xpY2UgYnksIHByw6lmw6lyZW5jZXMuLi4pLCBsZXMgY29sb25uZXMgbGF6eSB1dGlsaXPDqWVzIGV0IHBhcyBlbmNvcmVcbiAgICogZGVtYW5kw6llcyBzb250IHLDqWNsYW3DqWVzIGVuIHVuIHNldWwgw6l2w6luZW1lbnQuIEhvcnMgY3ljbGUgZGUgZMOpdGVjdGlvbiwgZXQgc2V1bGVtZW50IHVuZSBmb2lzIGRlcyBsaWduZXMgYWZmaWNow6llcyA6XG4gICAqIGxhIHByZW1pw6hyZSByw6lwb25zZSBkZSBsJ2FwcGxpY2F0aW9uIG5lIGRvaXQgcGFzIMOqdHJlIHByaXNlIHBvdXIgY2VsbGUgcXVpIGNvbnRpZW50IGxlcyBjb2xvbm5lcy5cbiAgICovXG4gIHByaXZhdGUgX3JlcXVlc3RMYXp5Q29sdW1ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbGF6eUZsdXNoUXVldWVkKSByZXR1cm47XG4gICAgdGhpcy5fbGF6eUZsdXNoUXVldWVkID0gdHJ1ZTtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICB0aGlzLl9sYXp5Rmx1c2hRdWV1ZWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLl9kZXN0cm95ZWQgfHwgIXRoaXMuX3Jlc29sdmVkRGF0YS5sZW5ndGgpIHJldHVybjtcbiAgICAgIGNvbnN0IGlkbGUgPSB0aGlzLl91c2VkTGF6eUNvbHVtbnMoKS5maWx0ZXIoYyA9PiAhdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5oYXMoYy5rZXkpKTtcbiAgICAgIGlmICghaWRsZS5sZW5ndGgpIHJldHVybjtcbiAgICAgIHRoaXMuX3dhcm5JZk5vTGF6eVNvdXJjZShpZGxlKTtcbiAgICAgIHRoaXMuX3NldExhenlTdGF0dXMoaWRsZS5tYXAoYyA9PiBjLmtleSksICdsb2FkaW5nJyk7XG4gICAgICB0aGlzLmxhenlDb2x1bW5zUmVxdWVzdGVkLmVtaXQoWy4uLnRoaXMuX2xhenlDb2x1bW5TdGF0dXMua2V5cygpXSk7XG4gICAgICB0aGlzLl9ydW5MYXp5TG9hZGVyKCk7XG4gICAgICB0aGlzLl9zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEFwcGVsbGUgYGNvbmZpZy5sYXp5TG9hZGVyYCBhdmVjIHRvdXRlcyBsZXMgY29sb25uZXMgbGF6eSBkZW1hbmTDqWVzIDsgc2EgcsOpcG9uc2UgcmVtcGxhY2UgYGRhdGFgLiAqL1xuICBwcml2YXRlIF9ydW5MYXp5TG9hZGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRlciA9IHRoaXMucmVzb2x2ZWRDb25maWcubGF6eUxvYWRlcjtcbiAgICBpZiAoIWxvYWRlcikgcmV0dXJuO1xuICAgIHRoaXMuX2xvYWRlclN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICBjb25zdCBjb2x1bW5zID0gWy4uLnRoaXMuX2xhenlDb2x1bW5TdGF0dXMua2V5cygpXTtcbiAgICB0aGlzLl9sb2FkZXJTdWIgPSBkZWZlcigoKSA9PiBsb2FkZXIoY29sdW1ucykpLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJvd3MgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkZXJSb3dzID0gcm93cztcbiAgICAgICAgdGhpcy5fc2V0dGxlTGF6eUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICBjb25zdCBsb2FkaW5nID0gWy4uLnRoaXMuX2xhenlDb2x1bW5TdGF0dXNdLmZpbHRlcigoWywgc3RhdHVzXSkgPT4gc3RhdHVzID09PSAnbG9hZGluZycpLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgICAgIHRoaXMuX3NldExhenlTdGF0dXMobG9hZGluZywgJ2Vycm9yJyk7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogTm91dmVhdSBgZGF0YWAgOiBpbCBsJ2VtcG9ydGUgc3VyIGxlcyBsaWduZXMgZHUgY2hhcmdldXIuIEF2ZWMgdW4gY2hhcmdldXIsIGxlcyBjb2xvbm5lcyBkw6lqw6AgZGVtYW5kw6llcyBzb250IHJlY2hhcmfDqWVzLiAqL1xuICBwcml2YXRlIF9vbk5ld0RhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5fbG9hZGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2xvYWRlclJvd3MgPSBudWxsO1xuICAgIGlmICh0aGlzLmNvbmZpZz8ubGF6eUxvYWRlciAmJiB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLnNpemUpIHtcbiAgICAgIHRoaXMuX3NldExhenlTdGF0dXMoWy4uLnRoaXMuX2xhenlDb2x1bW5TdGF0dXMua2V5cygpXSwgJ2xvYWRpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0dGxlTGF6eUNvbHVtbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2FucyBjaGFyZ2V1ciBuaSDDqWNvdXRldXIsIGxhIGNvbG9ubmUgZGVtYW5kw6llIHJlc3RlcmFpdCBlbiBza2VsZXRvbiBzYW5zIHF1ZSByaWVuIG5lIGwnZXhwbGlxdWUuICovXG4gIHByaXZhdGUgX3dhcm5JZk5vTGF6eVNvdXJjZShjb2x1bW5zOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbGF6eVdhcm5lZCB8fCB0aGlzLnJlc29sdmVkQ29uZmlnLmxhenlMb2FkZXIgfHwgdGhpcy5sYXp5Q29sdW1uc1JlcXVlc3RlZC5vYnNlcnZlZCB8fCAhaXNEZXZNb2RlKCkpIHJldHVybjtcbiAgICB0aGlzLl9sYXp5V2FybmVkID0gdHJ1ZTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW2pxdWVyeS10YWJsZV0gQ29sb25uZSBsYXp5IGFjdGl2w6llICgke2NvbHVtbnMubWFwKGMgPT4gYy5rZXkpLmpvaW4oJywgJyl9KSBtYWlzIG5pIGNvbmZpZy5sYXp5TG9hZGVyIG5pIChsYXp5Q29sdW1uc1JlcXVlc3RlZCkgbmUgc29udCBkw6lmaW5pcyA6IGBcbiAgICAgICsgJ2F1Y3VuZSByZXF1w6p0ZSBuXFwnZXN0IGxhbmPDqWUgZXQgbGUgc2tlbGV0b24gcmVzdGVyYSBhZmZpY2jDqS4nLFxuICAgICk7XG4gIH1cblxuICAvKiogRGUgbm91dmVsbGVzIGBkYXRhYCBzb250IGFycml2w6llcyA6IHRvdXRlcyBsZXMgY29sb25uZXMgZGVtYW5kw6llcyBzb250IGNvbnNpZMOpcsOpZXMgY29tbWUgcHLDqnRlcy4gKi9cbiAgcHJpdmF0ZSBfc2V0dGxlTGF6eUNvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3Qgd2FpdGluZyA9IFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzXS5maWx0ZXIoKFssIHN0YXR1c10pID0+IHN0YXR1cyAhPT0gJ2xvYWRlZCcpLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgaWYgKHdhaXRpbmcubGVuZ3RoKSB0aGlzLl9zZXRMYXp5U3RhdHVzKHdhaXRpbmcsICdsb2FkZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5TGF6eUVycm9yKCk6IHZvaWQge1xuICAgIGNvbnN0IGZyb20gPSB0aGlzLmxhenlFcnJvciA/ICdsb2FkaW5nJyA6ICdlcnJvcic7XG4gICAgY29uc3Qga2V5cyA9IFsuLi50aGlzLl9sYXp5Q29sdW1uU3RhdHVzXS5maWx0ZXIoKFssIHN0YXR1c10pID0+IHN0YXR1cyA9PT0gZnJvbSkubWFwKChba2V5XSkgPT4ga2V5KTtcbiAgICBpZiAoa2V5cy5sZW5ndGgpIHRoaXMuX3NldExhenlTdGF0dXMoa2V5cywgdGhpcy5sYXp5RXJyb3IgPyAnZXJyb3InIDogJ2xvYWRpbmcnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldExhenlTdGF0dXMoa2V5czogc3RyaW5nW10sIHN0YXR1czogJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IG5ldyBNYXAodGhpcy5fbGF6eUNvbHVtblN0YXR1cyk7XG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiBuZXh0LnNldChrZXksIHN0YXR1cykpO1xuICAgIHRoaXMuX2xhenlDb2x1bW5TdGF0dXMgPSBuZXh0O1xuICB9XG5cbiAgdG9nZ2xlR3JvdXBDb2xsYXBzZShncm91cEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS50b2dnbGVHcm91cENvbGxhcHNlKGdyb3VwS2V5LCAoa2V5KSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5fc2NoZWR1bGVEZWZlcnJlZCgoKSA9PiB0aGlzLnNjcm9sbFRvR3JvdXBIZWFkZXIoa2V5KSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0dyb3VwSGVhZGVyKGdyb3VwS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnRhYmxlQm9keVNjcm9sbFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnN0IHJvdyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgdHJbZGF0YS1ncm91cC1rZXk9XCIke0NTUy5lc2NhcGUoZ3JvdXBLZXkpfVwiXWApO1xuICAgIGlmICghcm93KSByZXR1cm47XG4gICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gTnVtYmVyLnBhcnNlRmxvYXQoXG4gICAgICB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tYWN0dWFsLWhlYWRlci1oZWlnaHQnKSB8fCAnNTYnXG4gICAgKSB8fCA1NjtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJvd1JlY3QgPSByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY3VycmVudFNjcm9sbFRvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY3VycmVudFNjcm9sbFRvcCArIChyb3dSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wKSAtIGhlYWRlckhlaWdodDtcbiAgICBjb250YWluZXIuc2Nyb2xsVG8oeyB0b3A6IHRhcmdldFNjcm9sbFRvcCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICB9XG5cbiAgaXNHcm91cENvbGxhcHNlZChncm91cEtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2dyb3VwQnkuaXNHcm91cENvbGxhcHNlZChncm91cEtleSk7XG4gIH1cblxuICBncm91cFBhZ2VCYWNrKGdyb3VwS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cEJ5Lmdyb3VwUGFnZUJhY2soZ3JvdXBLZXkpO1xuICB9XG5cbiAgZ3JvdXBQYWdlRm9yd2FyZChncm91cEtleTogc3RyaW5nLCB0b3RhbENvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cEJ5Lmdyb3VwUGFnZUZvcndhcmQoZ3JvdXBLZXksIHRvdGFsQ291bnQpO1xuICB9XG5cbiAgZ2V0IGhhc0FkZGFibGVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIubWVudUJhc2VGaWVsZHMubGVuZ3RoID4gMCB8fCB0aGlzLl9vcmdhbml6ZXIubWVudU9wdGlvbmFsRmllbGRzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgbWVudUJhc2VDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5tZW51QmFzZUZpZWxkcztcbiAgfVxuXG4gIGdldCBtZW51T3B0aW9uYWxDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5tZW51T3B0aW9uYWxGaWVsZHM7XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlQ29sdW1uc1RvQWRkKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IG5ldyBTZXQodGhpcy5hY3RpdmVGaWVsZHMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpKTtcbiAgICByZXR1cm4gKHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyB8fCBbXSkuZmlsdGVyKChjKSA9PiBjLm9wdGlvbmFsICYmICFhY3RpdmVLZXlzLmhhcyhjLmtleSkpO1xuICB9XG5cbiAgZ2V0IGFsbG93Q29sdW1uUmVtb3ZhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmFsbG93RmllbGRSZW1vdmFsO1xuICB9XG5cbiAgZ2V0IGhhc1NsaWNlQ29uZmlnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5yZXNvbHZlZENvbmZpZy5zbGljZXM/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gIH1cblxuICBnZXQgc2hvd1NsaWNlUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dTbGljZVBhbmVsO1xuICB9XG5cbiAgb25TbGljZVBhbmVsQ29sbGFwc2VkQ2hhbmdlKGNvbGxhcHNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3NsaWNlUGFuZWxDb2xsYXBzZWQgPSBjb2xsYXBzZWQ7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVjb21wdXRlU2hvd1NsaWNlUGFuZWwoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzUGVuZGluZ0R5bmFtaWNTbGljZXMgPSAodGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXM/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gICAgY29uc3QgaGFzQ2ZnID0gdGhpcy5fc2xpY2VDb25maWdzLmxlbmd0aCA+IDBcbiAgICAgIHx8IHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMubGVuZ3RoID4gMFxuICAgICAgfHwgaGFzUGVuZGluZ0R5bmFtaWNTbGljZXM7XG4gICAgY29uc3Qgd2FzVmlzaWJsZSA9IHRoaXMuX3Nob3dTbGljZVBhbmVsO1xuICAgIHRoaXMuX3Nob3dTbGljZVBhbmVsID0gaGFzQ2ZnICYmIHRoaXMuX3Jlc29sdmVkRGF0YS5sZW5ndGggPiAwO1xuICAgIC8vIExlcyBkb25uw6llcyB2aWVubmVudCBkJ2Fycml2ZXIgOiBhcHBsaXF1ZXIgbGVzIGR5bmFtaWMgc2xpY2VzIGV0IGxlcyBmaWx0cmVzIGVuIGF0dGVudGUuXG4gICAgLy8gTGVzIHNsaWNlcyBkeW5hbWlxdWVzIHNvbnQgYWpvdXTDqWVzIGF2YW50IGxlcyBmaWx0cmVzIHBvdXIgcmVuZHJlIGxldXJzIGNsw6lzIGRpc3BvbmlibGVzLlxuICAgIGlmICghd2FzVmlzaWJsZSAmJiB0aGlzLl9zaG93U2xpY2VQYW5lbCAmJiAodGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycyB8fCB0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cykpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzO1xuICAgICAgY29uc3QgZHluYW1pY0tleXMgPSB0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cztcbiAgICAgIHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPSBudWxsO1xuICAgICAgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMgPSBudWxsO1xuICAgICAgY29uc3QgYWxsQ29scyA9IHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXTtcbiAgICAgIHRoaXMuX3NjaGVkdWxlRGVmZXJyZWQoKCkgPT4ge1xuICAgICAgICBpZiAoZHluYW1pY0tleXMpIHtcbiAgICAgICAgICBkeW5hbWljS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBhbGxDb2xzLmZpbmQoYyA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICAgICAgICAgIGlmIChjb2wpIHRoaXMuYWRkRHluYW1pY1NsaWNlKGNvbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMgJiYgdGhpcy5zbGljZVBhbmVsUmVmKSB7XG4gICAgICAgICAgdGhpcy5zbGljZVBhbmVsUmVmLnJlc3RvcmVGaWx0ZXJzKGZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93QWRkU2xpY2VCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zaG93U2xpY2VCeVNlY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGljU2xpY2VzRm9yTWVudSgpOiBBcnJheTx7IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnN0YXRpY1NsaWNlc0Zvck1lbnU7XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlQ29sdW1uc0ZvckR5bmFtaWNTbGljZSgpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hdmFpbGFibGVGb3JEeW5hbWljO1xuICB9XG5cbiAgaXNTdGF0aWNTbGljZVZpc2libGUoY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cy5oYXMoY29sdW1uS2V5KTtcbiAgfVxuXG4gIHRvZ2dsZVN0YXRpY1NsaWNlKGNvbHVtbktleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IG5ldyBTZXQodGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzKTtcbiAgICBpZiAobmV4dC5oYXMoY29sdW1uS2V5KSkgbmV4dC5kZWxldGUoY29sdW1uS2V5KTtcbiAgICBlbHNlIG5leHQuYWRkKGNvbHVtbktleSk7XG4gICAgdGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzID0gbmV4dDtcbiAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlSGlkZGVuU3RhdGljS2V5cyh0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMpO1xuICAgIC8vIExlIHBhbm5lYXUgcmV0aXJlIGxhIHPDqWxlY3Rpb24gZHUgc2xpY2UgbWFzcXXDqSBldCByw6nDqW1ldCBsZSBmaWx0cmUgZGVzIGF1dHJlcy5cbiAgICB0aGlzLl9zZXRTbGljZUNvbmZpZ3ModGhpcy5fY29tcHV0ZVNsaWNlQ29uZmlncygpKTtcbiAgICB0aGlzLl9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCgpO1xuICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYWRkRHluYW1pY1NsaWNlKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8uYWRkRHluYW1pY1NsaWNlKGNvbHVtbik7XG4gIH1cblxuICBnZXQgYWxsRHluYW1pY1NsaWNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9hbGxEeW5hbWljU2xpY2VDb2x1bW5zO1xuICB9XG5cbiAgaXNEeW5hbWljU2xpY2VBY3RpdmUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmlzRHluYW1pY1NsaWNlQWN0aXZlKGtleSk7XG4gIH1cblxuICB0b2dnbGVEeW5hbWljU2xpY2UoY29sOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljU2xpY2VBY3RpdmUoY29sLmtleSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoY29sLmtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRHluYW1pY1NsaWNlKGNvbCk7XG4gICAgfVxuICB9XG5cbiAgb25TbGljZUZpbHRlckNoYW5nZShwcmVkOiAocm93OiBUKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVTbGljZUZpbHRlciA9IHByZWQ7XG4gICAgdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPSAwO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHRoaXMucGFnaW5hdG9yPy5maXJzdFBhZ2UoKTtcbiAgfVxuXG4gIG9uRHluYW1pY1NsaWNlS2V5c0NoYW5nZShrZXlzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuX29yZ2FuaXplci5vbkR5bmFtaWNTbGljZUtleXNDaGFuZ2Uoa2V5cyk7XG4gICAgdGhpcy5fcmVjb21wdXRlU2hvd1NsaWNlUGFuZWwoKTtcbiAgICB0aGlzLl9yZXF1ZXN0TGF6eUNvbHVtbnMoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW1wdHlTdGF0ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcubGFiZWxzPy5lbXB0eSB8fCB0aGlzLmkxOG4uZW1wdHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nU3RhdGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLmxhYmVscz8ubG9hZGluZyB8fCB0aGlzLmkxOG4ubG9hZGluZ1N0YXRlO1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZUlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAvLyBfcGVuZGluZ1JlbmRlciA6IGxlIHJlbmR1IGludGVybmUgbidlc3QgcGFzIGVuY29yZSB0ZXJtaW7DqSDihpIgcGFzIGRlIG1lc3NhZ2UgdmlkZSBwcsOpbWF0dXLDqVxuICAgIHJldHVybiAhdGhpcy5pc0xvYWRpbmcgJiYgdGhpcy5fcGVuZGluZ1JlbmRlciA9PT0gbnVsbCAmJiB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IHNob3dQYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUdyb3VwQnlLZXkgIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5lbmFibGVkICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFBhZ2luYXRpb25TaG93Rmlyc3RMYXN0QnV0dG9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5zaG93Rmlyc3RMYXN0QnV0dG9ucyAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5pc0ZpZWxkRHJhZ0Ryb3BFbmFibGVkO1xuICB9XG5cbiAgZ2V0IHRvdGFsUm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUdyb3VwQnlLZXlcbiAgICAgID8gdGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YS5maWx0ZXIoKHIpID0+ICFyW0dST1VQX0hFQURFUl9NQVJLRVJdKS5sZW5ndGhcbiAgICAgIDogdGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBHZXN0aW9uIGRlcyBjb2xvbm5lc1xuXG4gIG9uQWRkQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuX29yZ2FuaXplci5hZGRGaWVsZChjb2x1bW4pO1xuICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyBudWxsO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuXG4gICAgdGhpcy5hZGRSZXF1ZXN0ZWQuZW1pdCgpO1xuICAgIHRoaXMuY29sdW1uQWRkZWQuZW1pdChjb2x1bW4pO1xuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGlzVmlzaWJsZSA9IHRoaXMuX29yZ2FuaXplci5pc0ZpZWxkVmlzaWJsZShjb2x1bW4ua2V5KTtcblxuICAgIGlmIChjaGVja2VkICYmICFpc1Zpc2libGUpIHtcbiAgICAgIHRoaXMub25BZGRDb2x1bW4oY29sdW1uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoZWNrZWQgJiYgaXNWaXNpYmxlKSB7XG4gICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5fb3JnYW5pemVyLnJlbW92ZUZpZWxkKGNvbHVtbi5rZXkpO1xuICAgICAgaWYgKCFyZW1vdmVkKSByZXR1cm47XG4gICAgICB0aGlzLl9wcmVzZXJ2ZVBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdG9yPy5wYWdlSW5kZXggPz8gbnVsbDtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgICAgdGhpcy5jb2x1bW5SZW1vdmVkLmVtaXQoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBpc0NvbHVtblZpc2libGUoY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWVsZHMuc29tZShjID0+IGMua2V5ID09PSBjb2x1bW5LZXkpO1xuICB9XG5cbiAgb25SZW1vdmVDb2x1bW4oY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5hY3RpdmVGaWVsZHMuZmluZChpdGVtID0+IGl0ZW0ua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmICghY29sdW1uKSByZXR1cm47XG4gICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuX29yZ2FuaXplci5yZW1vdmVGaWVsZChjb2x1bW5LZXkpO1xuICAgIGlmICghcmVtb3ZlZCkgcmV0dXJuO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHRoaXMuY29sdW1uUmVtb3ZlZC5lbWl0KGNvbHVtbik7XG4gIH1cblxuICAvLyDilIDilIAgTGlnbmVzXG5cbiAgcHJpdmF0ZSBfcmVidWlsZENlbGxEZWZNYXAoKTogdm9pZCB7XG4gICAgdGhpcy5fY2VsbERlZk1hcCA9IG5ldyBNYXAoXG4gICAgICAodGhpcy5fY2VsbERlZnMgPz8gW10pLm1hcChkID0+IFtkLmNvbHVtbktleSwgZC50ZW1wbGF0ZV0gYXMgW3N0cmluZywgVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IGFueTsgaW5kZXg6IG51bWJlcjsgdmFsdWU6IGFueSB9Pl0pXG4gICAgKTtcbiAgfVxuXG4gIGdldENlbGxUZW1wbGF0ZShrZXk6IHN0cmluZyk6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBhbnk7IGluZGV4OiBudW1iZXI7IHZhbHVlOiBhbnkgfT4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fY2VsbERlZk1hcC5nZXQoa2V5KSA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IGhhc0N1c3RvbUNlbGxEZWZzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jZWxsRGVmTWFwLnNpemUgPiAwO1xuICB9XG5cbiAgZ2V0IGhhc1Jvd0NsaWNrSGFuZGxlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3RlZC5vYnNlcnZlZCB8fCAhIXRoaXMucmVzb2x2ZWRDb25maWcub25Sb3dTZWxlY3RlZDtcbiAgfVxuXG4gIHJvd0FjdGlvbkxhYmVsKHJvdzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFPDqWxlY3Rpb25uZXIgbGEgbGlnbmUgJHsocm93Py5bUk9XX0lOREVYX0tFWV0gPz8gMCkgKyAxfWA7XG4gIH1cblxuICAvKiogTGFyZ2V1ciBtaW5pbWFsZSBkdSB0YWJsZWF1IGVuIHB4LCBjYWxjdWzDqWUgZGVwdWlzIGxlcyBsYXJnZXVycyBleHBsaWNpdGVzIGRlcyBjb2xvbm5lcyBhY3RpdmVzLlxuICAgKiBSZXRvdXJuZSBudWxsIHNpIGF1Y3VuZSBjb2xvbm5lIG4nYSBkZSBsYXJnZXVyIGTDqWZpbmllIChsZSB0YWJsZWF1IHJlbXBsaXQgYWxvcnMgMTAwJSBkdSBjb250ZW5ldXIpLlxuICAgKiBTZXVsZXMgbGVzIHZhbGV1cnMgZXhwbGljaXRlbWVudCBlbiBgcHhgIHNvbnQgc29tbWFibGVzIDsgbGVzIHBvdXJjZW50YWdlcyBvdSBhdXRyZXMgdW5pdMOpcyBzb250IGlnbm9yw6lzLiAqL1xuICBnZXQgdGFibGVNaW5XaWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBoYXNSZXNpemVkID0gT2JqZWN0LmtleXModGhpcy5fY29sdW1uV2lkdGhzKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGhhc1NvbWVFeHBsaWNpdFdpZHRoID0gaGFzUmVzaXplZCB8fCB0aGlzLmFjdGl2ZUZpZWxkcy5zb21lKGMgPT4gYy53aWR0aCk7XG4gICAgaWYgKCFoYXNTb21lRXhwbGljaXRXaWR0aCkgcmV0dXJuIG51bGw7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5hY3RpdmVGaWVsZHMpIHtcbiAgICAgIGlmICh0aGlzLl9jb2x1bW5XaWR0aHNbY29sLmtleV0gIT0gbnVsbCkge1xuICAgICAgICBzdW0gKz0gdGhpcy5fY29sdW1uV2lkdGhzW2NvbC5rZXldO1xuICAgICAgfSBlbHNlIGlmIChjb2wud2lkdGgpIHtcbiAgICAgICAgY29uc3QgaXNQeCA9IGNvbC53aWR0aC50cmltKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgncHgnKTtcbiAgICAgICAgY29uc3QgcHggPSBOdW1iZXIucGFyc2VGbG9hdChjb2wud2lkdGgpO1xuICAgICAgICBpZiAoaXNQeCAmJiAhTnVtYmVyLmlzTmFOKHB4KSkgeyBzdW0gKz0gcHg7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1bSArPSAxMjA7IC8vIGxhcmdldXIgbWluaW1hbGUgZXN0aW3DqWUgcG91ciB1bmUgY29sb25uZSBzYW5zIGxhcmdldXIgZXhwbGljaXRlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdW0gKyAncHgnO1xuICB9XG5cbiAgdHJhY2tSb3dGbiA9IChfaW5kZXg6IG51bWJlciwgcm93OiBhbnkpOiBhbnkgPT4ge1xuICAgIGlmIChyb3dbR1JPVVBfSEVBREVSX01BUktFUl0pIHJldHVybiBgX19ncm91cF8ke3Jvd1tST1dfR1JPVVBfS0VZXX1gO1xuICAgIGlmIChyb3dbUk9XX0dST1VQX0tFWV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGBfX3Jvd18ke3Jvd1tST1dfR1JPVVBfS0VZXX1fJHtyb3dbUk9XX0lOREVYX0tFWV0gPz8gX2luZGV4fWA7XG4gICAgcmV0dXJuIHJvd1tST1dfSU5ERVhfS0VZXSA/PyBfaW5kZXg7XG4gIH07XG5cbiAgZ2V0Um93Q2xhc3Mocm93OiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICBjb25zdCBmbiA9IHRoaXMucmVzb2x2ZWRDb25maWcucm93Q2xhc3M7XG4gICAgaWYgKCFmbiB8fCByb3c/LltHUk9VUF9IRUFERVJfTUFSS0VSXSkgcmV0dXJuIHt9O1xuICAgIHJldHVybiBmbihyb3dbUk9XX1JBV19LRVldID8/IHJvdywgcm93W1JPV19JTkRFWF9LRVldID8/IDApO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IGFueSwgZXZlbnQ6IE1vdXNlRXZlbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHJvdz8uW0dST1VQX0hFQURFUl9NQVJLRVJdKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmhhc1Jvd0NsaWNrSGFuZGxlcikgcmV0dXJuO1xuICAgIGNvbnN0IHJlc29sdmVkID0gKHJvdz8uW1JPV19SQVdfS0VZXSA/PyByb3cpIGFzIFQ7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZy5vblJvd1NlbGVjdGVkPy4ocmVzb2x2ZWQsIGV2ZW50KTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQocmVzb2x2ZWQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIERyYWcgJiBkcm9wXG5cbiAgb25IZWFkZXJEcmFnU3RhcnQoY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgJiYgIXRoaXMuX2VkaXRNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0gY29sdW1uS2V5O1xuICAgIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPSBudWxsO1xuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBjb2x1bW5LZXkpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyS2V5RG93bihjb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoKCF0aGlzLmlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkICYmICF0aGlzLl9lZGl0TW9kZSlcbiAgICAgIHx8IChldmVudC5rZXkgIT09ICdBcnJvd0xlZnQnICYmIGV2ZW50LmtleSAhPT0gJ0Fycm93UmlnaHQnKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5hY3RpdmVGaWVsZHMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4ua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyA/IGN1cnJlbnRJbmRleCAtIDEgOiBjdXJyZW50SW5kZXggKyAxO1xuICAgIGlmIChjdXJyZW50SW5kZXggPCAwIHx8IHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSB0aGlzLmFjdGl2ZUZpZWxkcy5sZW5ndGgpIHJldHVybjtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgcmVvcmRlcmVkID0gWy4uLnRoaXMuYWN0aXZlRmllbGRzXTtcbiAgICBbcmVvcmRlcmVkW2N1cnJlbnRJbmRleF0sIHJlb3JkZXJlZFt0YXJnZXRJbmRleF1dID0gW3Jlb3JkZXJlZFt0YXJnZXRJbmRleF0sIHJlb3JkZXJlZFtjdXJyZW50SW5kZXhdXTtcbiAgICB0aGlzLl9vcmdhbml6ZXIuc2V0QWN0aXZlRmllbGRzKHJlb3JkZXJlZCk7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gIH1cblxuICBvbkhlYWRlckRyYWdPdmVyKGNvbHVtbktleTogc3RyaW5nLCBldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKCghdGhpcy5pc0NvbHVtbkRyYWdEcm9wRW5hYmxlZCAmJiAhdGhpcy5fZWRpdE1vZGUpIHx8ICF0aGlzLmRyYWdnZWRDb2x1bW5LZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPSBjb2x1bW5LZXk7XG4gIH1cblxuICBvbkhlYWRlckRyb3AodGFyZ2V0Q29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoKCF0aGlzLmlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkICYmICF0aGlzLl9lZGl0TW9kZSkgfHwgIXRoaXMuZHJhZ2dlZENvbHVtbktleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBtb3ZlZCA9IHRoaXMuX29yZ2FuaXplci5yZW9yZGVyRmllbGRzKHRoaXMuZHJhZ2dlZENvbHVtbktleSwgdGFyZ2V0Q29sdW1uS2V5KTtcbiAgICBpZiAoIW1vdmVkKSB7XG4gICAgICB0aGlzLm9uSGVhZGVyRHJhZ0VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHRoaXMub25IZWFkZXJEcmFnRW5kKCk7XG4gIH1cblxuICBvbkhlYWRlckRyYWdFbmQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdPdmVyQ29sdW1uS2V5ID0gbnVsbDtcbiAgfVxuXG4gIGlzSGVhZGVyRHJvcFRhcmdldChjb2x1bW5LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZHJhZ2dlZENvbHVtbktleSAmJiB0aGlzLmRyYWdPdmVyQ29sdW1uS2V5ID09PSBjb2x1bW5LZXkgJiYgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ICE9PSBjb2x1bW5LZXk7XG4gIH1cblxuICAvLyDilIDilIAgUHLDqWbDqXJlbmNlcyA6IG1vZGUgw6lkaXRpb25cblxuICBlbnRlckVkaXRNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuX2VkaXRNb2RlID0gdHJ1ZTtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2UgPSBudWxsO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNvbmZpcm1FZGl0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBEw6ltYXJyZSBsZSByZXNpemUgZCd1bmUgY29sb25uZSAobW91c2Vkb3duIHN1ciBsYSBwb2lnbsOpZSBkcm9pdGUpLiAqL1xuICBvblJlc2l6ZVN0YXJ0KGNvbHVtbktleTogc3RyaW5nLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZWRpdE1vZGUpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgdGggPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCd0aCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIXRoKSByZXR1cm47XG5cbiAgICBjb25zdCBzY3JvbGxFbCA9IHRoaXMudGFibGVCb2R5U2Nyb2xsUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChzY3JvbGxFbCkge1xuICAgICAgY29uc3QgYWxsVGggPSBzY3JvbGxFbC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PigndGgubWF0LW1kYy1oZWFkZXItY2VsbCcpO1xuICAgICAgYWxsVGguZm9yRWFjaCh0aEVsID0+IHtcbiAgICAgICAgY29uc3QgY29sQ2xhc3MgPSBBcnJheS5mcm9tKHRoRWwuY2xhc3NMaXN0KS5maW5kKGMgPT4gYy5zdGFydHNXaXRoKCdtYXQtY29sdW1uLScpKTtcbiAgICAgICAgY29uc3QgY29sS2V5ID0gY29sQ2xhc3MgPyBjb2xDbGFzcy5yZXBsYWNlKCdtYXQtY29sdW1uLScsICcnKSA6IG51bGw7XG4gICAgICAgIGlmIChjb2xLZXkgJiYgdGhpcy5fY29sdW1uV2lkdGhzW2NvbEtleV0gPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX2NvbHVtbldpZHRocyA9IHsgLi4udGhpcy5fY29sdW1uV2lkdGhzLCBbY29sS2V5XTogdGhFbC5vZmZzZXRXaWR0aCB9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXNpemVTdGF0ZSA9IHsga2V5OiBjb2x1bW5LZXksIHN0YXJ0WDogZXZlbnQuY2xpZW50WCwgc3RhcnRXaWR0aDogdGgub2Zmc2V0V2lkdGggfTtcblxuICAgIGNvbnN0IG9uTW92ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3Jlc2l6ZVN0YXRlKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdmUpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uVXApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkZWx0YSA9IGUuY2xpZW50WCAtIHRoaXMuX3Jlc2l6ZVN0YXRlLnN0YXJ0WDtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoNjAsIHRoaXMuX3Jlc2l6ZVN0YXRlLnN0YXJ0V2lkdGggKyBkZWx0YSk7XG4gICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7IC4uLnRoaXMuX2NvbHVtbldpZHRocywgW3RoaXMuX3Jlc2l6ZVN0YXRlLmtleV06IG5ld1dpZHRoIH07XG4gICAgICAvLyBkZXRlY3RDaGFuZ2VzKCkgcG91ciBmb3JjZXIgbGEgbWlzZSDDoCBqb3VyIGltbcOpZGlhdGUgZW4gbW9kZSBPblB1c2hcbiAgICAgIC8vIChsZXMgbGlzdGVuZXJzIHdpbmRvdyB0b3VybmVudCBob3JzIHpvbmUgQW5ndWxhciBhdmVjIHJ1bk91dHNpZGVBbmd1bGFyKVxuICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25VcCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2l6ZVN0YXRlID0gbnVsbDtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvblVwKTtcbiAgICB9O1xuXG4gICAgLy8gTGlzdGVuZXJzIGhvcnMgem9uZSBBbmd1bGFyIHBvdXIgw6l2aXRlciBkZXMgY3ljbGVzIENEIMOgIGNoYXF1ZSBtb3VzZW1vdmVcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW92ZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uVXApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJldG91cm5lIGxhIGxhcmdldXIgQ1NTIGQndW5lIGNvbG9ubmUgKHB4IHNpIHBlcnNvbm5hbGlzw6llLCBzaW5vbiBsYSB2YWxldXIgZGUgY29uZmlnIG91IGF1dG8pLiAqL1xuICBnZXRDb2x1bW5XaWR0aChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2NvbHVtbldpZHRoc1trZXldICE9IG51bGwpIHJldHVybiB0aGlzLl9jb2x1bW5XaWR0aHNba2V5XSArICdweCc7XG4gICAgY29uc3QgY29sID0gdGhpcy5fY29sdW1uTWFwLmdldChrZXkpO1xuICAgIHJldHVybiBjb2w/LndpZHRoID8/ICdhdXRvJztcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcsOpZsOpcmVuY2VzIDogc2F2ZSAvIGNsZWFyXG5cbiAgc2F2ZVByZWZlcmVuY2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyKSByZXR1cm47XG4gICAgY29uc3QgZHluYW1pY1NsaWNlS2V5cyA9IHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMubWFwKGMgPT4gYy5rZXkpO1xuICAgIGNvbnN0IGNvbmZpZzogaW1wb3J0KCcuLi9qcXVlcnktdGFibGUubW9kZWwnKS5TYXZlZFRhYmxlQ29uZmlnID0ge1xuICAgICAgc2VhcmNoOiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSB8fCB1bmRlZmluZWQsXG4gICAgICBncm91cEJ5OiAgICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwQnlLZXksXG4gICAgICBjb2x1bW5PcmRlcjogICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkcy5tYXAoYyA9PiBjLmtleSksXG4gICAgICB2aXNpYmxlQ29sdW1uczogICAgICB0aGlzLmFjdGl2ZUZpZWxkcy5tYXAoYyA9PiBjLmtleSksXG4gICAgICBwYWdlU2l6ZTogICAgICAgICAgICB0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGdyb3VwUGFnZVNpemU6ICAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSxcbiAgICAgIGNvbHVtbldpZHRoczogICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2NvbHVtbldpZHRocykubGVuZ3RoID8geyAuLi50aGlzLl9jb2x1bW5XaWR0aHMgfSA6IHVuZGVmaW5lZCxcbiAgICAgIHNsaWNlUGFuZWxDb2xsYXBzZWQ6IHRoaXMuX3NsaWNlUGFuZWxDb2xsYXBzZWQsXG4gICAgICBoaWRkZW5TbGljZUtleXM6ICAgICBbLi4udGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzXSxcbiAgICAgIGR5bmFtaWNTbGljZUtleXM6ICAgIGR5bmFtaWNTbGljZUtleXMubGVuZ3RoID8gZHluYW1pY1NsaWNlS2V5cyA6IHVuZGVmaW5lZCxcbiAgICAgIHNsaWNlRmlsdGVyczogICAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZiA/IHRoaXMuc2xpY2VQYW5lbFJlZi5nZXRBY3RpdmVGaWx0ZXJzKCkgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIuc2F2ZShjb25maWcpO1xuICAgIHRoaXMuX2hhc1NhdmVkQ29uZmlnID0gdHJ1ZTtcbiAgICB0aGlzLl9zaG93UHJlZmVyZW5jZXNNZXNzYWdlKHRoaXMuaTE4bi5wcmVmZXJlbmNlc1NhdmVkTWVzc2FnZSk7XG4gIH1cblxuICBjbGVhclByZWZlcmVuY2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyKSByZXR1cm47XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyLmNsZWFyKCk7XG4gICAgdGhpcy5faGFzU2F2ZWRDb25maWcgPSBmYWxzZTtcblxuICAgIC8vIENhcHR1cmVyIGxlcyBkeW5hbWljIHNsaWNlcyBhY3RpdmVzIEFWQU5UIGxlIHJlc2V0IChyZXNldFRvRGVmYXVsdHMoKSBsZXMgdmlkZSlcbiAgICBjb25zdCBkeW5hbWljU2xpY2VzVG9SZW1vdmUgPSB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLnNsaWNlKCk7XG5cbiAgICAvLyBSZXNldCBjb21wbGV0IGRlIGwnw6l0YXQgdmVycyBsZXMgdmFsZXVycyBwYXIgZMOpZmF1dCBkZSBsYSBjb25maWdcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5fY29sdW1uV2lkdGhzID0ge307XG4gICAgdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xuICAgIC8vIFN5bmNocm9uaXNlciBsJ8OpdGF0IGludGVybmUgZHUgc2xpY2UtcGFuZWwgOiBzaSBsZSBjb21wb3NhbnQgZXN0IGVuIMOpdGF0IGNvbGxhcHNlZFxuICAgIC8vIChsJ3V0aWxpc2F0ZXVyIGwnYXZhaXQgZmVybcOpIGFwcsOocyBsYSBzYXV2ZWdhcmRlKSwgbGUgcm91dnJpciBleHBsaWNpdGVtZW50IHBvdXJcbiAgICAvLyDDqXZpdGVyIHF1ZSBkaXNwbGF5Om5vbmUgc29pdCByZXRpcsOpIG1haXMgcXVlIGlzQ29sbGFwc2VkIGludGVybmUgcmVzdGUgw6AgdHJ1ZS5cbiAgICBpZiAodGhpcy5zbGljZVBhbmVsUmVmPy5pc0NvbGxhcHNlZCkge1xuICAgICAgdGhpcy5zbGljZVBhbmVsUmVmLnRvZ2dsZVBhbmVsKCk7XG4gICAgfVxuICAgIHRoaXMuX2dyb3VwQnkucmVzZXQoKTtcbiAgICB0aGlzLl9ncm91cEJ5LnNldERlZmF1bHRDb2xsYXBzZWQoZmFsc2UpO1xuICAgIHRoaXMuX3VzZXJQYWdlU2l6ZSA9IG51bGw7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKCk7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5ncm91cFBhZ2VTaXplID0gdGhpcy5yZXNvbHZlRGVmYXVsdEdyb3VwUGFnZVNpemUoKTtcblxuICAgIC8vIFNsaWNlcyBzdGF0aXF1ZXMgOiByZXZlbmlyIGF1eCBzZXVsZXMgY2VsbGVzIGNhY2jDqWVzIHBhciBsYSBjb25maWcgKHBhcyBwYXIgbCd1dGlsaXNhdGV1cilcbiAgICB0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMgPSBuZXcgU2V0KHRoaXMuX2NvbmZpZ0hpZGRlbktleXMpO1xuICAgIHRoaXMuX29yZ2FuaXplci51cGRhdGVIaWRkZW5TdGF0aWNLZXlzKHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG5cbiAgICAvLyBDb2xvbm5lcyBldCBncm91cEJ5IDogcmVzZXQgdmlhIGxhIGZhY2FkZSAocmV0aXJlIGxlcyBvcHRpb25uZWxsZXMsIHJlbWV0IGwnb3JkcmUgY29uZmlnKVxuICAgIHRoaXMuX29yZ2FuaXplci5yZXNldFRvRGVmYXVsdHMoKTtcbiAgICB0aGlzLl9kZWZhdWx0R3JvdXBCeUFwcGxpZWQgPSBmYWxzZTtcblxuICAgIC8vIER5bmFtaWMgc2xpY2VzIDogbGVzIHJldGlyZXIgZHUgc2xpY2UgcGFuZWwgYXZlYyBsYSBsaXN0ZSBjYXB0dXLDqWUgYXZhbnQgbGUgcmVzZXRcbiAgICBkeW5hbWljU2xpY2VzVG9SZW1vdmUuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgdGhpcy5zbGljZVBhbmVsUmVmPy5yZW1vdmVEeW5hbWljU2xpY2VCeUtleShjb2wua2V5KTtcbiAgICB9KTtcblxuICAgIC8vIEZpbHRyZSBkZSBzbGljZSBhY3RpZlxuICAgIHRoaXMuYWN0aXZlU2xpY2VGaWx0ZXIgPSAoKSA9PiB0cnVlO1xuICAgIGlmICh0aGlzLnNsaWNlUGFuZWxSZWYpIHRoaXMuc2xpY2VQYW5lbFJlZi5yZXN0b3JlRmlsdGVycyh7fSk7XG5cbiAgICAvLyBSYWZyYcOuY2hpdCB0b3V0ZSBsYSB2dWVcbiAgICB0aGlzLmFjdGl2ZUZpZWxkcyA9IHRoaXMuX29yZ2FuaXplci5maWVsZHMuYWN0aXZlRmllbGRzO1xuICAgIHRoaXMucmVuZGVyZWRDb2x1bW5zID0gdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpO1xuICAgIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gbnVsbDtcbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcblxuICAgIHRoaXMuX3Nob3dQcmVmZXJlbmNlc01lc3NhZ2UodGhpcy5pMThuLnByZWZlcmVuY2VzQ2xlYXJlZE1lc3NhZ2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlZmVyZW5jZXNNZXNzYWdlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfc2hvd1ByZWZlcmVuY2VzTWVzc2FnZShtc2c6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lciAhPT0gbnVsbCkgY2xlYXJUaW1lb3V0KHRoaXMuX3ByZWZlcmVuY2VzTWVzc2FnZVRpbWVyKTtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2UgPSBtc2c7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzTWVzc2FnZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2UgPSBudWxsO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0sIDQwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlQcmVmZXJlbmNlcyhzYXZlZDogaW1wb3J0KCcuLi9qcXVlcnktdGFibGUubW9kZWwnKS5TYXZlZFRhYmxlQ29uZmlnIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghc2F2ZWQpIHJldHVybjtcbiAgICAvLyBSZWNoZXJjaGVcbiAgICBpZiAoc2F2ZWQuc2VhcmNoKSB0aGlzLnNlYXJjaFF1ZXJ5ID0gc2F2ZWQuc2VhcmNoO1xuICAgIC8vIExhcmdldXJzIGNvbG9ubmVzXG4gICAgaWYgKHNhdmVkLmNvbHVtbldpZHRocykgdGhpcy5fY29sdW1uV2lkdGhzID0geyAuLi5zYXZlZC5jb2x1bW5XaWR0aHMgfTtcbiAgICAvLyBHcm91cCBieVxuICAgIGlmIChzYXZlZC5ncm91cEJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0R3JvdXBCeUFuZEVtaXQoc2F2ZWQuZ3JvdXBCeSk7XG4gICAgICBpZiAoc2F2ZWQuZ3JvdXBCeSkge1xuICAgICAgICB0aGlzLl9ncm91cEJ5LnNldERlZmF1bHRDb2xsYXBzZWQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2dyb3VwQnkucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTm9tYnJlIGRlIGxpZ25lcyA6IHZhbGV1cnMgaWdub3LDqWVzIHNpIGVsbGVzIG5lIGZpZ3VyZW50IHBsdXMgZGFucyBsZXMgb3B0aW9ucyBkZSBsYSBjb25maWdcbiAgICBpZiAodHlwZW9mIHNhdmVkLnBhZ2VTaXplID09PSAnbnVtYmVyJyAmJiB0aGlzLnBhZ2VTaXplT3B0aW9ucy5pbmNsdWRlcyhzYXZlZC5wYWdlU2l6ZSkpIHtcbiAgICAgIHRoaXMuX3VzZXJQYWdlU2l6ZSA9IHNhdmVkLnBhZ2VTaXplO1xuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHNhdmVkLnBhZ2VTaXplO1xuICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHNhdmVkLnBhZ2VTaXplO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHNhdmVkLmdyb3VwUGFnZVNpemUgPT09ICdudW1iZXInXG4gICAgICAgICYmIChzYXZlZC5ncm91cFBhZ2VTaXplID09PSAwIHx8IHRoaXMucGFnZVNpemVPcHRpb25zR3JvdXBCeS5pbmNsdWRlcyhzYXZlZC5ncm91cFBhZ2VTaXplKSkpIHtcbiAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IHNhdmVkLmdyb3VwUGFnZVNpemU7XG4gICAgfVxuICAgIC8vIMOJdGF0IHBhbm5lYXUgc2xpY2VcbiAgICBpZiAoc2F2ZWQuc2xpY2VQYW5lbENvbGxhcHNlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gc2F2ZWQuc2xpY2VQYW5lbENvbGxhcHNlZDtcbiAgICAvLyBTbGljZXMgc3RhdGlxdWVzIGNhY2jDqWVzIOKAlCBvbiB1dGlsaXNlIGxhIHZhbGV1ciBleGFjdGUgc2F1dmVnYXJkw6llIChwYXMgbGVzIGRlZmF1bHRzIGRlIGNvbmZpZylcbiAgICBpZiAoc2F2ZWQuaGlkZGVuU2xpY2VLZXlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyA9IG5ldyBTZXQoc2F2ZWQuaGlkZGVuU2xpY2VLZXlzKTtcbiAgICAgIHRoaXMuX29yZ2FuaXplci51cGRhdGVIaWRkZW5TdGF0aWNLZXlzKHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgfVxuICAgIC8vIENvbG9ubmVzIHZpc2libGVzICsgb3JkcmUg4oCUIHJlY29uc3RydWl0IGFjdGl2ZUZpZWxkcyBlbiB1bmUgc2V1bGUgcGFzc2UuXG4gICAgLy8gT24gcGFydCBkZSBzYXZlZC5jb2x1bW5PcmRlciAob3JkcmUgc2F1dmVnYXJkw6kpIHNpIGRpc3BvbmlibGUsIHNpbm9uIHNhdmVkLnZpc2libGVDb2x1bW5zLlxuICAgIC8vIENlbGEgZ8OocmUgw6AgbGEgZm9pcyA6IGNvbG9ubmVzIG9wdGlvbm5lbGxlcyBham91dMOpZXMsIGNvbG9ubmVzIHJldGlyw6llcywgZXQgcsOpb3Jkb25uYW5jZW1lbnQuXG4gICAgY29uc3QgdGFyZ2V0S2V5cyA9IHNhdmVkLmNvbHVtbk9yZGVyID8/IHNhdmVkLnZpc2libGVDb2x1bW5zO1xuICAgIGlmICh0YXJnZXRLZXlzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGFsbEJ5S2V5ID0gbmV3IE1hcCgodGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdKS5tYXAoYyA9PiBbYy5rZXksIGNdKSk7XG4gICAgICAvLyBDb2xvbm5lcyBkYW5zIGwnb3JkcmUgc2F1dmVnYXJkw6kgKG9uIG5lIGdhcmRlIHF1ZSBjZWxsZXMgY29ubnVlcyBkZSBsYSBjb25maWcpXG4gICAgICBjb25zdCBvcmRlcmVkID0gdGFyZ2V0S2V5c1xuICAgICAgICAubWFwKGtleSA9PiBhbGxCeUtleS5nZXQoa2V5KSlcbiAgICAgICAgLmZpbHRlcigoYyk6IGMgaXMgVGFibGVDb2x1bW5Qcm92aWRlcjxUPiA9PiBjICE9PSB1bmRlZmluZWQpO1xuICAgICAgLy8gQ29sb25uZXMgYWN0aXZlcyBhY3R1ZWxsbGVtZW50IG5vbiBwcsOpc2VudGVzIGRhbnMgdGFyZ2V0S2V5cyAobm9uLW9wdGlvbmFsIHBhc3PDqWVzIHNvdXMgc2lsZW5jZSlcbiAgICAgIC8vIOKGkiBvbiBsZXMgZXhjbHV0IDogbCd1dGlsaXNhdGV1ciBhdmFpdCBleHBsaWNpdGVtZW50IGNob2lzaSBjZSBzb3VzLWVuc2VtYmxlXG4gICAgICBpZiAob3JkZXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX29yZ2FuaXplci5zZXRBY3RpdmVGaWVsZHMob3JkZXJlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZpbHRyZXMgYWN0aWZzIGR1IHNsaWNlIHBhbmVsXG4gICAgLy8gRmlsdHJlcyBhY3RpZnMgZHUgc2xpY2UgcGFuZWwg4oCUIHRvdWpvdXJzIHN0b2Nrw6lzIGVuIHBlbmRpbmcgOlxuICAgIC8vIGFwcGxpcXXDqXMgcGFyIF9hcHBseVBlbmRpbmdEeW5hbWljU2xpY2VLZXlzIChzaSBkeW5hbWljIHNsaWNlcykgb3VcbiAgICAvLyBwYXIgX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsIChxdWFuZCBsZXMgZG9ubsOpZXMgYXJyaXZlbnQgZXQgcmVuZGVudCBsZSBwYW5lbCB2aXNpYmxlKVxuICAgIGlmIChzYXZlZC5zbGljZUZpbHRlcnMgJiYgT2JqZWN0LmtleXMoc2F2ZWQuc2xpY2VGaWx0ZXJzKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPSBzYXZlZC5zbGljZUZpbHRlcnM7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRmlsdGVyQ29sdW1uS2V5cyA9IE9iamVjdC5lbnRyaWVzKHNhdmVkLnNsaWNlRmlsdGVycyA/PyB7fSlcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlc10pID0+IGtleS5zdGFydHNXaXRoKCdjb2x1bW46JykgJiYgdmFsdWVzLmxlbmd0aCA+IDApXG4gICAgICAubWFwKChba2V5XSkgPT4ga2V5LnNsaWNlKCdjb2x1bW46Jy5sZW5ndGgpKTtcbiAgICBjb25zdCBzdGF0aWNTbGljZUtleXMgPSBuZXcgU2V0KFxuICAgICAgKHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzID8/IFtdKVxuICAgICAgICAubWFwKHNsaWNlID0+IHNsaWNlLmNvbHVtbktleSlcbiAgICAgICAgLmZpbHRlcigoa2V5KToga2V5IGlzIHN0cmluZyA9PiAhIWtleSlcbiAgICApO1xuICAgIGNvbnN0IGR5bmFtaWNTbGljZUtleXMgPSBuZXcgU2V0KHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFsbER5bmFtaWNGaWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLmtleSkpO1xuXG4gICAgLy8gVW4gZmlsdHJlIHBlcnNpc3RhbnQgZG9pdCB0b3Vqb3VycyByZXRyb3V2ZXIgc2Egc2xpY2UgOiB1bmUgcHLDqWbDqXJlbmNlXG4gICAgLy8gYW5jaWVubmUgb3UgaW5jb21wbMOodGUgbmUgcGV1dCBwYXMgbGFpc3NlciB1biBmaWx0cmUgc2FucyBwYW5uZWF1IHZpc2libGUuXG4gICAgYWN0aXZlRmlsdGVyQ29sdW1uS2V5c1xuICAgICAgLmZpbHRlcihrZXkgPT4gc3RhdGljU2xpY2VLZXlzLmhhcyhrZXkpKVxuICAgICAgLmZvckVhY2goa2V5ID0+IHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cy5kZWxldGUoa2V5KSk7XG4gICAgdGhpcy5fb3JnYW5pemVyLnVwZGF0ZUhpZGRlblN0YXRpY0tleXModGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzKTtcblxuICAgIC8vIFVuZSBjbMOpIGRlIGZpbHRyZSBzdXIgdW5lIGNvbG9ubmUgbm9uIHN0YXRpcXVlIGTDqXNpZ25lIHVuZSBzbGljZSBkeW5hbWlxdWUuXG4gICAgLy8gRWxsZSBjb21wbMOodGUgZHluYW1pY1NsaWNlS2V5cyBwb3VyIGxlcyBjb25maWd1cmF0aW9ucyBzYXV2ZWdhcmTDqWVzIGF2YW50XG4gICAgLy8gcXVlIGNlIGNoYW1wIG5lIHNvaXQgcGVyc2lzdGFudC5cbiAgICBjb25zdCBwZXJzaXN0ZWREeW5hbWljS2V5cyA9IFtcbiAgICAgIC4uLihzYXZlZC5keW5hbWljU2xpY2VLZXlzID8/IFtdKSxcbiAgICAgIC4uLmFjdGl2ZUZpbHRlckNvbHVtbktleXMsXG4gICAgXTtcbiAgICBjb25zdCB1bmlxdWVEeW5hbWljS2V5cyA9IFsuLi5uZXcgU2V0KHBlcnNpc3RlZER5bmFtaWNLZXlzKV0uZmlsdGVyKFxuICAgICAga2V5ID0+ICFzdGF0aWNTbGljZUtleXMuaGFzKGtleSkgJiYgZHluYW1pY1NsaWNlS2V5cy5oYXMoa2V5KVxuICAgICk7XG4gICAgaWYgKHVuaXF1ZUR5bmFtaWNLZXlzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMgPSB1bmlxdWVEeW5hbWljS2V5cztcbiAgICB9XG4gIH1cblxuICBjYW5SZW1vdmVDb2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX29yZ2FuaXplci5hbGxvd0ZpZWxkUmVtb3ZhbCAmJlxuICAgICAgY29sdW1uLnJlbW92YWJsZSAhPT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuYWN0aXZlRmllbGRzLmxlbmd0aCA+IDFcbiAgICApO1xuICB9XG5cbiAgaXNDZWxsRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbDtcbiAgfVxuXG4gIGFzVGl0bGUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICAvLyDilIDilIAgRXhwb3J0IENTVlxuXG4gIG9uRXhwb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuX2V4cG9ydC5leHBvcnQoKTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlIGxlcyBsaWduZXMgZXQgbCfDqXRhdCBhY3R1ZWxsZW1lbnQgdmlzaWJsZXMgZGFucyB1biBzbmFwc2hvdCBhdXRvbm9tZS4gKi9cbiAgY3JlYXRlVmlzdWFsU25hcHNob3QobGFiZWwgPSB0aGlzLnRpdGxlIHx8ICdUYWJsZWF1Jyk6IFZpc3VhbFNuYXBzaG90RHJhZnQge1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChjb250YWluc0Z1bmN0aW9uKHRoaXMucmVzb2x2ZWRDb25maWcpKSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKCdDZXJ0YWluZXMgZm9uY3Rpb25zIGRlIGNvbmZpZ3VyYXRpb24gbmUgc29udCBwYXMgdHJhbnNwb3J0YWJsZXMuJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgbGFiZWwsXG4gICAgICBjb25maWc6IGNsb25lU2VyaWFsaXphYmxlKHtcbiAgICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICAgIGNvbHVtbnM6IHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucz8ubWFwKGNvbHVtbiA9PiBzZXJpYWxpemFibGVDb2x1bW4oY29sdW1uKSksXG4gICAgICAgIHNlYXJjaDogdGhpcy5yZXNvbHZlZENvbmZpZy5zZWFyY2gsXG4gICAgICAgIHBhZ2luYXRpb246IHRoaXMucmVzb2x2ZWRDb25maWcucGFnaW5hdGlvbixcbiAgICAgIH0pLFxuICAgICAgc3RhdGU6IGNsb25lU2VyaWFsaXphYmxlKHtcbiAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFF1ZXJ5LFxuICAgICAgICBncm91cEJ5OiB0aGlzLmFjdGl2ZUdyb3VwQnlLZXksXG4gICAgICAgIGNvbHVtbk9yZGVyOiB0aGlzLmFjdGl2ZUZpZWxkcy5tYXAoY29sdW1uID0+IGNvbHVtbi5rZXkpLFxuICAgICAgICB2aXNpYmxlQ29sdW1uczogdGhpcy5hY3RpdmVGaWVsZHMubWFwKGNvbHVtbiA9PiBjb2x1bW4ua2V5KSxcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4ID8/IDAsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gdGhpcy5wYWdlU2l6ZSxcbiAgICAgIH0pLFxuICAgICAgZGF0YTogY2xvbmVTZXJpYWxpemFibGUodGhpcy5fYWxsRmlsdGVyZWRSb3dzKSxcbiAgICAgIHdhcm5pbmdzLFxuICAgIH07XG4gIH1cblxuICAvKiogQXBwbGlxdWUgbCfDqXRhdCBjb21wYXRpYmxlIGV0IHJldG91cm5lIGxlcyBkb25uw6llcyDDoCBmb3VybmlyIGF1IGNvbXBvc2FudCBjaWJsZS4gKi9cbiAgYXBwbHlWaXN1YWxTbmFwc2hvdChzbmFwc2hvdDogVmlzdWFsU25hcHNob3QpOiBWaXN1YWxTbmFwc2hvdEFwcGx5UmVzdWx0IHtcbiAgICBpZiAoc25hcHNob3QudHlwZSAhPT0gJ3RhYmxlJykge1xuICAgICAgcmV0dXJuIHsgYXBwbGllZDogZmFsc2UsIHJlc3RvcmVkOiBbXSwgc2tpcHBlZDogWyd0eXBlJ10sIHdhcm5pbmdzOiBbJ0xlIHNuYXBzaG90IG5cXCdlc3QgcGFzIHVuIHRhYmxlYXUuJ10gfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LnN0YXRlIGFzIHtcbiAgICAgIHNlYXJjaD86IHN0cmluZztcbiAgICAgIGdyb3VwQnk/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgdmlzaWJsZUNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgICAgIGNvbHVtbk9yZGVyPzogc3RyaW5nW107XG4gICAgICBjb2x1bW5XaWR0aHM/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgIH07XG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IE1hcCgodGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdKS5tYXAoY29sdW1uID0+IFtjb2x1bW4ua2V5LCBjb2x1bW5dKSk7XG4gICAgY29uc3QgcmVxdWVzdGVkS2V5cyA9IHN0YXRlLmNvbHVtbk9yZGVyID8/IHN0YXRlLnZpc2libGVDb2x1bW5zID8/IFtdO1xuICAgIGNvbnN0IGNvbXBhdGlibGVLZXlzID0gcmVxdWVzdGVkS2V5cy5maWx0ZXIoa2V5ID0+IGF2YWlsYWJsZS5oYXMoa2V5KSk7XG4gICAgY29uc3Qgc2tpcHBlZCA9IHJlcXVlc3RlZEtleXMuZmlsdGVyKGtleSA9PiAhYXZhaWxhYmxlLmhhcyhrZXkpKTtcbiAgICBjb25zdCByZXN0b3JlZDogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChjb21wYXRpYmxlS2V5cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX29yZ2FuaXplci5zZXRBY3RpdmVGaWVsZHMoY29tcGF0aWJsZUtleXMubWFwKGtleSA9PiBhdmFpbGFibGUuZ2V0KGtleSkhKSk7XG4gICAgICByZXN0b3JlZC5wdXNoKCdjb2x1bW5zJyk7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGF0ZS5zZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gc3RhdGUuc2VhcmNoO1xuICAgICAgcmVzdG9yZWQucHVzaCgnc2VhcmNoJyk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5ncm91cEJ5ID09PSBudWxsIHx8IHR5cGVvZiBzdGF0ZS5ncm91cEJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSBzdGF0ZS5ncm91cEJ5ICYmIGF2YWlsYWJsZS5oYXMoc3RhdGUuZ3JvdXBCeSkgPyBzdGF0ZS5ncm91cEJ5IDogbnVsbDtcbiAgICAgIHRoaXMuc2V0R3JvdXBCeUFuZEVtaXQoZ3JvdXBLZXkpO1xuICAgICAgcmVzdG9yZWQucHVzaCgnZ3JvdXBCeScpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29sdW1uV2lkdGhzKSB7XG4gICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7IC4uLnN0YXRlLmNvbHVtbldpZHRocyB9O1xuICAgICAgcmVzdG9yZWQucHVzaCgnY29sdW1uV2lkdGhzJyk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHJldHVybiB7XG4gICAgICBhcHBsaWVkOiB0cnVlLFxuICAgICAgcmVzdG9yZWQsXG4gICAgICBza2lwcGVkLFxuICAgICAgd2FybmluZ3M6IHNuYXBzaG90Lndhcm5pbmdzID8/IFtdLFxuICAgICAgZGF0YTogY2xvbmVTZXJpYWxpemFibGUoc25hcHNob3QuZGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQaXBlbGluZSBkZSBkb25uw6llcyAocHJpdsOpKVxuXG4gIHByaXZhdGUgcmVmcmVzaFZpZXdNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNvbHZlZERhdGEgPSB0aGlzLnJlc29sdmVEYXRhKCk7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZyA9IHRoaXMuYnVpbGRFZmZlY3RpdmVDb25maWcoKTtcbiAgICB0aGlzLl9jb2x1bW5NYXAgPSBuZXcgTWFwKCh0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgfHwgW10pLm1hcChjID0+IFtjLmtleSwgY10pKTtcblxuICAgIGlmICghdGhpcy5faW5pdGlhbFNsaWNlUGFuZWxDb2xsYXBzZWRBcHBsaWVkKSB7XG4gICAgICB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gdGhpcy5yZXNvbHZlZENvbmZpZy5zbGljZVBhbmVsQ29sbGFwc2VkID09PSB0cnVlO1xuICAgICAgdGhpcy5faW5pdGlhbFNsaWNlUGFuZWxDb2xsYXBzZWRBcHBsaWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgSW5pdGlhbGlzZXIgbGUgZ2VzdGlvbm5haXJlIGRlIHByw6lmw6lyZW5jZXMgc2kgbCdvcHRpb24gZXN0IGFjdGl2w6llXG4gICAgY29uc3QgcHJlZnNJZCA9IHRoaXMucmVzb2x2ZWRDb25maWcucHJlZmVyZW5jZXM/LmVuYWJsZWRcbiAgICAgID8gdGhpcy5yZXNvbHZlZENvbmZpZy5wcmVmZXJlbmNlcy50YWJsZUlkXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudElkID0gcHJlZnNJZCA/PyBudWxsO1xuICAgIC8vIFByw6lmw6lyZW5jZXMgw6AgYXBwbGlxdWVyIGFwcsOocyBfb3JnYW5pemVyLnVwZGF0ZSgpIChxdWFuZCBhY3RpdmVGaWVsZHMgZXN0IGTDqWrDoCBwZXVwbMOpKVxuICAgIGxldCBwZW5kaW5nUHJlZnM6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChjdXJyZW50SWQgJiYgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyPy5rZXkgIT09ICgnanF0X3ByZWZzXycgKyBjdXJyZW50SWQpKSB7XG4gICAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIgPSBuZXcgVGFibGVQcmVmZXJlbmNlc01hbmFnZXIoY3VycmVudElkKTtcbiAgICAgIHRoaXMuX2hhc1NhdmVkQ29uZmlnID0gdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyLmhhc1NhdmVkKCk7XG4gICAgICBwZW5kaW5nUHJlZnMgPSB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIubG9hZCgpO1xuICAgIH0gZWxzZSBpZiAoIWN1cnJlbnRJZCkge1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyID0gbnVsbDtcbiAgICAgIHRoaXMuX2hhc1NhdmVkQ29uZmlnID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRMOpbMOoZ3VlIMOgIGxhIGZhY2FkZSA6IG1pc2Ugw6Agam91ciBkZSBsJ8OpdGF0IFZpZXcgKGNvbG9ubmVzLCBncm91cEJ5IG1ldGEsIHNsaWNlQnkgbWV0YSlcbiAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlKHtcbiAgICAgIGNvbmZpZzogdGhpcy5fb3JnYW5pemVyVmlld0NvbmZpZygpLFxuICAgICAgZmllbGRzOiB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW10sXG4gICAgICBzbGljZUNvbmZpZ3M6IHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzID8/IFtdLFxuICAgICAgZGVmYXVsdEdyb3VwQnk6IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdEdyb3VwQnksXG4gICAgfSk7XG5cbiAgICBpZiAoIXBlbmRpbmdQcmVmcyAmJiAhdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkICYmICF0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS51c2VyQ3VzdG9taXplZCAmJiB0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZCh0cnVlKTtcbiAgICAgIHRoaXMuX2dyb3VwQnkucmVzZXQoKTtcbiAgICAgIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRHcm91cFBhZ2VTaXplKCk7XG4gICAgICB0aGlzLmdyb3VwQnlDaGFuZ2UuZW1pdCh0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXkpO1xuICAgIH1cblxuICAgIC8vIFN5bmNocm9uaXNlIGxhIHByb3ByacOpdMOpIHN0YWJsZSAow6l2aXRlIE5HMDEwMCDigJQgbGEgZmFjYWRlIGVzdCBzb3VyY2UgZGUgdsOpcml0w6kpXG4gICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcblxuICAgIHRoaXMucmVuZGVyZWRDb2x1bW5zID0gdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpO1xuICAgIHRoaXMuZW1pdENvbHVtbnNDaGFuZ2VJZk5lZWRlZCgpO1xuXG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCB0aGlzLnJlc29sdmVQYWdlU2l6ZSgpO1xuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5yZXNvbHZlUGFnZVNpemVPcHRpb25zKCk7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5ID0gdGhpcy5yZXNvbHZlUGFnZVNpemVPcHRpb25zR3JvdXBCeSgpO1xuICAgIGlmICh0aGlzLmdyb3VwUGFnZVNpemUgIT09IDAgJiYgIXRoaXMucGFnZVNpemVPcHRpb25zR3JvdXBCeS5pbmNsdWRlcyh0aGlzLmdyb3VwUGFnZVNpemUpKSB7XG4gICAgICB0aGlzLmdyb3VwUGFnZVNpemUgPSB0aGlzLnJlc29sdmVEZWZhdWx0R3JvdXBQYWdlU2l6ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYXR0YWNoUGFnaW5hdG9yKCk7XG4gICAgdGhpcy5hdHRhY2hTb3J0KCk7XG5cbiAgICAvLyBSw6lpbml0aWFsaXNlIF9zdGF0aWNTbGljZUhpZGRlbktleXMgc2V1bGVtZW50IHNpIGxlcyBjbMOpcyBoaWRkZW4gZGUgbGEgY29uZmlnIG9udCB2cmFpbWVudCBjaGFuZ8OpXG4gICAgLy8gRVQgcXUnaWwgbid5IGEgcGFzIGRlIHByw6lmw6lyZW5jZXMgc2F1dmVnYXJkw6llcyAocXVpIGfDqXJlcm9udCBoaWRkZW5TbGljZUtleXMgZWxsZXMtbcOqbWVzKS5cbiAgICBjb25zdCBuZXdDb25maWdIaWRkZW4gPSBuZXcgU2V0PHN0cmluZz4oXG4gICAgICAodGhpcy5yZXNvbHZlZENvbmZpZy5zbGljZXMgPz8gW10pLmZpbHRlcihzID0+IHMuaGlkZGVuICYmIHMuY29sdW1uS2V5KS5tYXAocyA9PiBzLmNvbHVtbktleSEpXG4gICAgKTtcbiAgICBpZiAoIVRhYmxlQ29tcG9uZW50Ll9zZXRzRXF1YWwobmV3Q29uZmlnSGlkZGVuLCB0aGlzLl9jb25maWdIaWRkZW5LZXlzKSkge1xuICAgICAgdGhpcy5fY29uZmlnSGlkZGVuS2V5cyA9IG5ld0NvbmZpZ0hpZGRlbjtcbiAgICAgIC8vIE4nw6ljcmFzZXIgX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyBxdWUgc2kgb24gbidlc3QgUEFTIGVuIHRyYWluIGQnYXBwbGlxdWVyIGRlcyBwcmVmc1xuICAgICAgLy8gKHBlbmRpbmdQcmVmcyBsZXMgZ8OocmVyYSBsdWktbcOqbWUgdmlhIF9hcHBseVByZWZlcmVuY2VzIOKGkiBoaWRkZW5TbGljZUtleXMpXG4gICAgICBpZiAoIXBlbmRpbmdQcmVmcykge1xuICAgICAgICB0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMgPSBuZXcgU2V0KG5ld0NvbmZpZ0hpZGRlbik7XG4gICAgICAgIHRoaXMuX29yZ2FuaXplci51cGRhdGVIaWRkZW5TdGF0aWNLZXlzKHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbGlxdWUgbGVzIHByw6lmw6lyZW5jZXMgSUNJLCBBUFLDiFMgX29yZ2FuaXplci51cGRhdGUoKSBFVCBhcHLDqHMgX2NvbmZpZ0hpZGRlbktleXMgbWlzIMOgIGpvdXIsXG4gICAgLy8gbWFpcyBhdmFudCBfY29tcHV0ZVNsaWNlQ29uZmlncygpIHBvdXIgcXVlIGhpZGRlblNsaWNlS2V5cyBzb2l0IGTDqWrDoCByZXN0YXVyw6kuXG4gICAgaWYgKHBlbmRpbmdQcmVmcykge1xuICAgICAgdGhpcy5fYXBwbHlQcmVmZXJlbmNlcyhwZW5kaW5nUHJlZnMpO1xuICAgICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcbiAgICAgIHRoaXMucmVuZGVyZWRDb2x1bW5zID0gdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpO1xuICAgICAgdGhpcy5lbWl0Q29sdW1uc0NoYW5nZUlmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvcHJpw6l0w6lzIHN0YWJsZXMgcG91ciBsZXMgYmluZGluZ3MgZHUgdGVtcGxhdGVcbiAgICAvLyBPbiByZWNhbGN1bGUgX3NsaWNlQ29uZmlncyBlbiByZWZsw6l0YW50IGwnw6l0YXQgY291cmFudCBkZXMgc2xpY2VzIGNhY2jDqWVzLFxuICAgIC8vIHBvdXIgcXVlIFNsaWNlUGFuZWxDb21wb25lbnQubmdPbkluaXQgcmXDp29pdmUgbGEgYm9ubmUgdmFsZXVyIGRlIGBoaWRkZW5gXG4gICAgLy8gbcOqbWUgcXVhbmQgbGUgY29tcG9zYW50IGVzdCBjcsOpw6kgcG91ciBsYSAxw6hyZSBmb2lzIGFwcsOocyB1biB0b2dnbGUuXG4gICAgdGhpcy5fc2V0U2xpY2VDb25maWdzKHRoaXMuX2NvbXB1dGVTbGljZUNvbmZpZ3MoKSk7XG4gICAgdGhpcy5fc2xpY2VDb2x1bW5zID0gdGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdO1xuICAgIHRoaXMuX3NsaWNlRGF0YSA9IHRoaXMuX3Jlc29sdmVkRGF0YTtcbiAgICB0aGlzLl9zbGljZVNob3dUb2dnbGUgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmVuYWJsZVNsaWNlVG9nZ2xlICE9PSBmYWxzZTtcbiAgICB0aGlzLl9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCgpO1xuICAgIGlmICghdGhpcy5fYWN0aXZlU29ydC5hY3RpdmUgJiYgdGhpcy5yZXNvbHZlZENvbmZpZy5kZWZhdWx0U29ydCkge1xuICAgICAgdGhpcy5fbWF0U29ydEFjdGl2ZSA9IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQuYWN0aXZlO1xuICAgICAgdGhpcy5fbWF0U29ydERpcmVjdGlvbiA9IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQuZGlyZWN0aW9uO1xuICAgIH1cbiAgICB0aGlzLl9idWlsZFNsaWNlQnlNZW51SXRlbXMoKTtcblxuICAgIHRoaXMuX3JlcXVlc3RMYXp5Q29sdW1ucygpO1xuICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gIH1cblxuICAvKiogUmV0b3VybmUgdW5pcXVlbWVudCBsZXMgc2xpY2VzIHZpc2libGVzIChub24gY2FjaMOpZXMgcGFyIF9zdGF0aWNTbGljZUhpZGRlbktleXMpLlxuICAgKiBMZSBTbGljZVBhbmVsQ29tcG9uZW50IGFmZmljaGUgdG91dCBjZSBxdSdpbCByZcOnb2l0IOKAlCBjJ2VzdCBpY2kgcXVlIHNlIGZhaXQgbGUgZmlsdHJhZ2UuICovXG4gIHByaXZhdGUgX2NvbXB1dGVTbGljZUNvbmZpZ3MoKTogU2xpY2VDb25maWc8VD5bXSB7XG4gICAgcmV0dXJuICh0aGlzLnJlc29sdmVkQ29uZmlnLnNsaWNlcyA/PyBbXSkuZmlsdGVyKFxuICAgICAgcyA9PiAhcy5jb2x1bW5LZXkgfHwgIXRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cy5oYXMocy5jb2x1bW5LZXkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9zZXRzRXF1YWwoYTogU2V0PHN0cmluZz4sIGI6IFNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2IG9mIGEpIGlmICghYi5oYXModikpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkU2xpY2VCeU1lbnVJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0aWNTbGljZU1hcCA9IG5ldyBNYXAodGhpcy5fc3RhdGljU2xpY2VzRm9yTWVudS5tYXAocyA9PiBbcy5rZXksIHNdKSk7XG4gICAgY29uc3QgZHluYW1pY1NsaWNlU2V0ID0gbmV3IFNldCh0aGlzLl9hbGxEeW5hbWljU2xpY2VDb2x1bW5zLm1hcChjID0+IGMua2V5KSk7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGl0ZW1zOiBBcnJheTx7IGlzU3RhdGljOiBib29sZWFuOyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZzsgY29sPzogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGNvbC5rZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChzdGF0aWNTbGljZU1hcC5oYXMoY29sLmtleSkpIHtcbiAgICAgICAgY29uc3QgcyA9IHN0YXRpY1NsaWNlTWFwLmdldChjb2wua2V5KSE7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBpc1N0YXRpYzogdHJ1ZSwga2V5OiBzLmtleSwgdGl0bGU6IHMudGl0bGUsIGljb246IHMuaWNvbiB9KTtcbiAgICAgICAgc2Vlbi5hZGQoY29sLmtleSk7XG4gICAgICB9IGVsc2UgaWYgKGR5bmFtaWNTbGljZVNldC5oYXMoY29sLmtleSkpIHtcbiAgICAgICAgaXRlbXMucHVzaCh7IGlzU3RhdGljOiBmYWxzZSwga2V5OiBjb2wua2V5LCB0aXRsZTogdGhpcy5jb2xMYWJlbChjb2wpLCBpY29uOiBjb2wuaWNvbiwgY29sIH0pO1xuICAgICAgICBzZWVuLmFkZChjb2wua2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3N0YXRpY1NsaWNlc0Zvck1lbnUpIHtcbiAgICAgIGlmICghc2Vlbi5oYXMocy5rZXkpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBpc1N0YXRpYzogdHJ1ZSwga2V5OiBzLmtleSwgdGl0bGU6IHMudGl0bGUsIGljb246IHMuaWNvbiB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fc2xpY2VCeU1lbnVJdGVtcyA9IGl0ZW1zO1xuICAgIHRoaXMuX2ludmFsaWRhdGVPcmdhbml6ZXJDb25maWcoKTsgLy8gbGVzIHNsaWNlcyBvbnQgY2hhbmfDqVxuICB9XG5cbiAgZ2V0IHNsaWNlQnlNZW51SXRlbXMoKSB7IHJldHVybiB0aGlzLl9zbGljZUJ5TWVudUl0ZW1zOyB9XG5cbiAgb25TbGljZU1lbnVJdGVtQ2xpY2soaXRlbTogeyBpc1N0YXRpYzogYm9vbGVhbjsga2V5OiBzdHJpbmc7IGNvbD86IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4gfSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmlzU3RhdGljKSB7XG4gICAgICB0aGlzLnRvZ2dsZVN0YXRpY1NsaWNlKGl0ZW0ua2V5KTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0uY29sKSB7XG4gICAgICB0aGlzLnRvZ2dsZUR5bmFtaWNTbGljZShpdGVtLmNvbCk7XG4gICAgfVxuICB9XG5cbiAgaXNTbGljZU1lbnVJdGVtQWN0aXZlKGl0ZW06IHsgaXNTdGF0aWM6IGJvb2xlYW47IGtleTogc3RyaW5nIH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbS5pc1N0YXRpYyA/IHRoaXMuaXNTdGF0aWNTbGljZVZpc2libGUoaXRlbS5rZXkpIDogdGhpcy5pc0R5bmFtaWNTbGljZUFjdGl2ZShpdGVtLmtleSk7XG4gIH1cblxuICBwcml2YXRlIF9zY2hlZHVsZVJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3BlbmRpbmdSZW5kZXIpO1xuICAgICAgdGhpcy5fcGVuZGluZ1JlbmRlciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9wZW5kaW5nUmVuZGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdSZW5kZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuX2V4ZWN1dGVSZW5kZXIoKSk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2V4ZWN1dGVSZW5kZXIoKTogdm9pZCB7XG4gICAgY29uc3QgY2F0ZWdvcnlSb3dzID0gdGhpcy5nZXRDYXRlZ29yeUZpbHRlcmVkRGF0YSgpO1xuICAgIGlmICh0aGlzLmFjdGl2ZUdyb3VwQnlLZXkpIHtcbiAgICAgIC8vIEVuIG1vZGUgZ3JvdXBCeSwgcHJvamVjdFJvd3MgZ8OocmUgdG91dCBsZSB0cmkgaW50ZXJuZW1lbnQg4oCUIHBhcyBkZSBzb3J0IGdsb2JhbCBpbnV0aWxlXG4gICAgICB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MgPSBjYXRlZ29yeVJvd3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbXBhcmVGbiA9IHRoaXMuX2J1aWxkU29ydENvbXBhcmF0b3IoY2F0ZWdvcnlSb3dzKTtcbiAgICAgIHRoaXMuX2FsbEZpbHRlcmVkUm93cyA9IGNvbXBhcmVGbiA/IFsuLi5jYXRlZ29yeVJvd3NdLnNvcnQoY29tcGFyZUZuKSA6IGNhdGVnb3J5Um93cztcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBwYWdpbmF0b3IgYXZlYyBsZSBub3V2ZWF1IHRvdGFsXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICBjb25zdCBzYXZlZEluZGV4ID0gdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPz8gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4O1xuICAgICAgY29uc3QgbWF4UGFnZSA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCh0aGlzLl9hbGxGaWx0ZXJlZFJvd3MubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZSkgLSAxKTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLmxlbmd0aCA9IHRoaXMuX2FsbEZpbHRlcmVkUm93cy5sZW5ndGg7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSBNYXRoLm1pbihzYXZlZEluZGV4LCBtYXhQYWdlKTtcbiAgICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9wcm9qZWN0Q3VycmVudFBhZ2UoKTtcbiAgICAvLyBkZXRlY3RDaGFuZ2VzKCkgYXUgbGlldSBkZSBtYXJrRm9yQ2hlY2soKSA6IG1ldCDDoCBqb3VyIHVuaXF1ZW1lbnQgQ0UgY29tcG9zYW50XG4gICAgLy8gc2FucyBkw6ljbGVuY2hlciB1biBjeWNsZSBDRCBnbG9iYWwgcXVpIHByb3ZvcXVlcmFpdCBORzAxMDAgZGFucyBsZXMgcGFyZW50cy5cbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJvamVjdEN1cnJlbnRQYWdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUdyb3VwQnlLZXkpIHtcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEgPSB0aGlzLnByb2plY3RSb3dzKHRoaXMuX2FsbEZpbHRlcmVkUm93cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwO1xuICAgIGNvbnN0IHN0YXJ0ID0gcGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZTtcbiAgICBjb25zdCBwYWdlUm93cyA9IHRoaXMuX2FsbEZpbHRlcmVkUm93cy5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKTtcblxuICAgIGNvbnN0IHByb2plY3RlZDogYW55W10gPSBbXTtcbiAgICBwYWdlUm93cy5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHN0YXJ0ICsgaTtcbiAgICAgIGNvbnN0IHA6IGFueSA9IHsgW1JPV19SQVdfS0VZXTogcm93LCBbUk9XX0lOREVYX0tFWV06IGlkeCB9O1xuICAgICAgdGhpcy5hY3RpdmVGaWVsZHMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIHBbY29sLmtleV0gPSB0aGlzLnJlc29sdmVDZWxsVmFsdWUoY29sLCByb3csIGlkeCk7XG4gICAgICB9KTtcbiAgICAgIHByb2plY3RlZC5wdXNoKHApO1xuICAgIH0pO1xuICAgIHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEgPSBwcm9qZWN0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRWZmZWN0aXZlQ29uZmlnKCk6IFRhYmxlUHJvdmlkZXI8VD4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLl9yZXNvbHZlZERhdGE7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5fbm9ybWFsaXplQ29sdW1ucyhcbiAgICAgIGNvbmZpZy5jb2x1bW5zIHx8XG4gICAgICB0aGlzLmNvbHVtbnNDb25maWcgfHxcbiAgICAgIHRoaXMucmVzb2x2ZUNvbHVtbnNGcm9tQ29tcGF0KHJvd3MpLFxuICAgICk7XG5cbiAgICAvLyBNb2RlIEhUTUwgOiBbdmlld10gcHJlbmQgbGUgZGVzc3VzIHN1ciBjb25maWcudmlldyBzaSBmb3VybmkgKFBoYXNlIDMpLlxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXcgPz8gY29uZmlnLnZpZXc7XG5cbiAgICBjb25zdCBhdXRvVGFibGVJZCA9IGNvbmZpZy5wcmVmZXJlbmNlcz8udGFibGVJZCB8fCBUYWJsZUNvbXBvbmVudC5faGFzaENvbHVtbnMoKGNvbHVtbnMgfHwgW10pLm1hcChjID0+IGMua2V5KSk7XG4gICAgY29uc3QgZXhwb3J0Q29uZmlnOiBUYWJsZUV4cG9ydENvbmZpZzxUPiA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBmaWxlbmFtZTogYXV0b1RhYmxlSWQsXG4gICAgICAuLi5jb25maWcuZXhwb3J0LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmVmc0NvbmZpZzogVGFibGVQcmVmZXJlbmNlc0NvbmZpZyA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0YWJsZUlkOiBhdXRvVGFibGVJZCxcbiAgICAgIC4uLmNvbmZpZy5wcmVmZXJlbmNlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICB2aWV3LFxuICAgICAgc2xpY2VzOiBjb25maWcuc2xpY2VzIHx8IFtdLFxuICAgICAgZW5hYmxlU2xpY2VUb2dnbGU6IGNvbmZpZy5lbmFibGVTbGljZVRvZ2dsZSA/PyB0cnVlLFxuICAgICAgZXhwb3J0OiBleHBvcnRDb25maWcsXG4gICAgICBwcmVmZXJlbmNlczogcHJlZnNDb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBVbmUgY29sb25uZSBsYXp5IGVzdCBmb3Jjw6ltZW50IG9wdGlvbm5lbGxlIDogYG9wdGlvbmFsYCBlc3QgaW1wbGljaXRlLCBldCBgb3B0aW9uYWw6IGZhbHNlYCBlc3QgcmVmdXPDqS4gKi9cbiAgcHJpdmF0ZSBfbm9ybWFsaXplQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10pOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIGlmIChjb2x1bW5zID09PSB0aGlzLl9jb2x1bW5zU291cmNlKSByZXR1cm4gdGhpcy5fY29sdW1uc05vcm1hbGl6ZWQhO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb2x1bW5zLm1hcChjb2x1bW4gPT4gdGhpcy5fd2l0aEltcGxpZWRPcHRpb25hbChjb2x1bW4pKTtcbiAgICBjb25zdCByZXN1bHQgPSBub3JtYWxpemVkLnNvbWUoKGNvbHVtbiwgaW5kZXgpID0+IGNvbHVtbiAhPT0gY29sdW1uc1tpbmRleF0pID8gbm9ybWFsaXplZCA6IGNvbHVtbnM7XG4gICAgdGhpcy5fY29sdW1uc1NvdXJjZSA9IGNvbHVtbnM7XG4gICAgdGhpcy5fY29sdW1uc05vcm1hbGl6ZWQgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgX3dpdGhJbXBsaWVkT3B0aW9uYWwoY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiB7XG4gICAgaWYgKCFjb2x1bW4ubGF6eSB8fCBjb2x1bW4ub3B0aW9uYWwpIHJldHVybiBjb2x1bW47XG4gICAgaWYgKChjb2x1bW4gYXMgeyBvcHRpb25hbD86IGJvb2xlYW4gfSkub3B0aW9uYWwgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBbanF1ZXJ5LXRhYmxlXSBMYSBjb2xvbm5lICcke2NvbHVtbi5rZXl9JyBlc3QgbGF6eSA6IGVsbGUgZXN0IGZvcmPDqW1lbnQgb3B0aW9ubmVsbGUgKG9wdGlvbmFsOiB0cnVlIGVzdCBpbXBsaWNpdGUpLiBgXG4gICAgICAgICsgJ29wdGlvbmFsOiBmYWxzZSBsYSBmZXJhaXQgZGVtYW5kZXIgZMOocyBsZSBwcmVtaWVyIHJlbmR1LCBzb2l0IHVuZSByZXF1w6p0ZSBkZSBwbHVzIHBvdXIgcmllbi4gJ1xuICAgICAgICArICdSZXRpcmV6IG9wdGlvbmFsOiBmYWxzZSwgb3UgbGF6eTogdHJ1ZSBzaSBsYSBjb2xvbm5lIGRvaXQgdG91am91cnMgw6p0cmUgYWZmaWNow6llLicsXG4gICAgICApO1xuICAgIH1cbiAgICBsZXQgaW1wbGllZCA9IHRoaXMuX29wdGlvbmFsTGF6eUNvbHVtbnMuZ2V0KGNvbHVtbik7XG4gICAgaWYgKCFpbXBsaWVkKSB7XG4gICAgICBpbXBsaWVkID0geyAuLi5jb2x1bW4sIG9wdGlvbmFsOiB0cnVlIH07XG4gICAgICB0aGlzLl9vcHRpb25hbExhenlDb2x1bW5zLnNldChjb2x1bW4sIGltcGxpZWQpO1xuICAgIH1cbiAgICByZXR1cm4gaW1wbGllZDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb25maWdTZWFyY2hSZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBjbGVhclRva2VuID0gdGhpcy5yZXNvbHZlZENvbmZpZy5jbGVhclNlYXJjaElucHV0O1xuICAgIGNvbnN0IHNob3VsZENsZWFyID0gISFjbGVhclRva2VuICYmIGNsZWFyVG9rZW4gIT09IHRoaXMuX2xhc3RDb25maWdDbGVhclNlYXJjaElucHV0O1xuXG4gICAgdGhpcy5fbGFzdENvbmZpZ0NsZWFyU2VhcmNoSW5wdXQgPSBjbGVhclRva2VuO1xuXG4gICAgaWYgKCFzaG91bGRDbGVhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5pdGlhbFNlYXJjaFF1ZXJ5KGlzRmlyc3RDb25maWdDaGFuZ2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWxRdWVyeSA9IHRoaXMucmVzb2x2ZWRDb25maWcuc2VhcmNoPy5pbml0aWFsUXVlcnk7XG4gICAgaWYgKGluaXRpYWxRdWVyeSA9PT0gdGhpcy5fbGFzdEluaXRpYWxTZWFyY2hRdWVyeVxuICAgICAgJiYgKHRoaXMuX2luaXRpYWxTZWFyY2hRdWVyeUFwcGxpZWQgfHwgIWlzRmlyc3RDb25maWdDaGFuZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdEluaXRpYWxTZWFyY2hRdWVyeSA9IGluaXRpYWxRdWVyeTtcbiAgICB0aGlzLl9pbml0aWFsU2VhcmNoUXVlcnlBcHBsaWVkID0gdHJ1ZTtcbiAgICBjb25zdCBuZXh0ID0gaW5pdGlhbFF1ZXJ5ID8/ICcnO1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNlYXJjaFF1ZXJ5ICE9PSBuZXh0O1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSBuZXh0O1xuICAgIGlmIChjaGFuZ2VkKSB0aGlzLm9uU2VhcmNoQ2hhbmdlKCk7XG4gICAgZWxzZSB0aGlzLl9ydW5TZWFyY2goKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9oYXNoQ29sdW1ucyhrZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyID0ga2V5cy5qb2luKCd8Jyk7XG4gICAgbGV0IGggPSAweDgxMWM5ZGM1O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgaCA9IE1hdGguaW11bChoLCAweDAxMDAwMTkzKSA+Pj4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICcwJyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEYXRhKCk6IFRbXSB7XG4gICAgaWYgKHRoaXMuX2xvYWRlclJvd3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkZXJSb3dzO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhU291cmNlICYmIEFycmF5LmlzQXJyYXkoKHRoaXMuZGF0YVNvdXJjZSBhcyBhbnkpLmRhdGEpKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZGF0YVNvdXJjZSBhcyBhbnkpLmRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uc0Zyb21Db21wYXQocm93czogVFtdKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnMubWFwKChrZXkpID0+ICh7XG4gICAgICAgIGtleSxcbiAgICAgICAgaGVhZGVyOiB0aGlzLmNvbHVtbkxhYmVscz8uW2tleV0gfHwgaHVtYW5pemVLZXkoa2V5KSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFJvdyA9IHJvd3NbMF0gYXMgYW55O1xuICAgIGlmICghZmlyc3RSb3cgfHwgdHlwZW9mIGZpcnN0Um93ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaXJzdFJvdykubWFwKChrZXkpID0+ICh7XG4gICAgICBrZXksXG4gICAgICBoZWFkZXI6IHRoaXMuY29sdW1uTGFiZWxzPy5ba2V5XSB8fCBodW1hbml6ZUtleShrZXkpLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2F0ZWdvcnlGaWx0ZXJlZERhdGEoKTogVFtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fcmVzb2x2ZWREYXRhO1xuXG4gICAgbGV0IGZpbHRlcmVkID0gZGF0YS5maWx0ZXIodGhpcy5hY3RpdmVTbGljZUZpbHRlcik7XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VhcmNoUXVlcnk/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgY29uc3QgcmVzdHJpY3RlZEtleXMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnNlYXJjaD8uc2VhcmNoQ29sdW1ucztcbiAgICAgIGNvbnN0IHNlYXJjaENvbHMgPSByZXN0cmljdGVkS2V5cz8ubGVuZ3RoXG4gICAgICAgID8gWy4uLnRoaXMuX2NvbHVtbk1hcC52YWx1ZXMoKV0uZmlsdGVyKGNvbCA9PiByZXN0cmljdGVkS2V5cy5pbmNsdWRlcyhjb2wua2V5KSlcbiAgICAgICAgOiBbLi4udGhpcy5fY29sdW1uTWFwLnZhbHVlcygpXTtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+XG4gICAgICAgIHNlYXJjaENvbHMuc29tZSgoY29sKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5nZXREaXNwbGF5VmFsdWVGb3JTZWFyY2goY29sLCByb3cpO1xuICAgICAgICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIHByaXZhdGUgcHJvamVjdFJvd3Mocm93czogVFtdKTogYW55W10ge1xuICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5hY3RpdmVHcm91cEJ5S2V5O1xuXG4gICAgaWYgKCFncm91cEtleSkge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2plY3RlZDogYW55ID0geyBbUk9XX1JBV19LRVldOiByb3csIFtST1dfSU5ERVhfS0VZXTogaW5kZXggfTtcbiAgICAgICAgdGhpcy5hY3RpdmVGaWVsZHMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgcHJvamVjdGVkW2NvbC5rZXldID0gdGhpcy5yZXNvbHZlQ2VsbFZhbHVlKGNvbCwgcm93LCBpbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucHVzaChwcm9qZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwQ29sRGVmID0gdGhpcy5fY29sdW1uTWFwLmdldChncm91cEtleSk7XG4gICAgY29uc3QgZ3JvdXBMYXp5U3RhdHVzID0gZ3JvdXBDb2xEZWY/LmxhenkgPyAodGhpcy5fbGF6eUNvbHVtblN0YXR1cy5nZXQoZ3JvdXBLZXkpID8/ICdpZGxlJykgOiAnbG9hZGVkJztcblxuICAgIGlmIChncm91cExhenlTdGF0dXMgIT09ICdsb2FkZWQnKSB7XG4gICAgICB0aGlzLl90b3RhbEZpbHRlcmVkQ291bnQgPSByb3dzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGtleSA9IGdyb3VwTGF6eVN0YXR1cyA9PT0gJ2Vycm9yJyA/IEdST1VQX0tFWV9MQVpZX0VSUk9SIDogR1JPVVBfS0VZX0xBWllfTE9BRElORztcbiAgICAgIHJldHVybiBbeyBbR1JPVVBfSEVBREVSX01BUktFUl06IHRydWUsIFtST1dfR1JPVVBfS0VZXToga2V5LCBbUk9XX0dST1VQX0NPVU5UXTogcm93cy5sZW5ndGgsIFtST1dfR1JPVVBfUEFHRV06IDAsIFtST1dfR1JPVVBfUEFHRV9DT1VOVF06IDEgfV07XG4gICAgfVxuXG4gICAgY29uc3QgZWZmZWN0aXZlU29ydCA9IHRoaXMuX2FjdGl2ZVNvcnQuYWN0aXZlICYmIHRoaXMuX2FjdGl2ZVNvcnQuZGlyZWN0aW9uXG4gICAgICA/IHRoaXMuX2FjdGl2ZVNvcnRcbiAgICAgIDogdGhpcy5yZXNvbHZlZENvbmZpZy5kZWZhdWx0U29ydCA/PyB7IGFjdGl2ZTogJycsIGRpcmVjdGlvbjogJycgYXMgY29uc3QgfTtcblxuICAgIC8vIFbDqXJpZmllIHNpIGxlIGNhY2hlIGVzdCBlbmNvcmUgdmFsaWRlIChtw6ptZSByw6lmw6lyZW5jZSBkZSByb3dzICsgbcOqbWUgcGFyYW3DqHRyZXMgZGUgdHJpL2dyb3VwZSlcbiAgICBjb25zdCBjYWNoZVZhbGlkID1cbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUucm93cyA9PT0gcm93cyAmJlxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZS5rZXkgPT09IGdyb3VwS2V5ICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLnNvcnRPcmRlciA9PT0gdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlciAmJlxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZS5zb3J0QWN0aXZlID09PSAoZWZmZWN0aXZlU29ydC5hY3RpdmUgPz8gJycpICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLnNvcnREaXIgPT09IChlZmZlY3RpdmVTb3J0LmRpcmVjdGlvbiA/PyAnJyk7XG5cbiAgICBsZXQgZ3JvdXBPcmRlcjogc3RyaW5nW107XG4gICAgbGV0IGdyb3VwTWFwOiBNYXA8c3RyaW5nLCBUW10+O1xuXG4gICAgaWYgKGNhY2hlVmFsaWQpIHtcbiAgICAgIGdyb3VwT3JkZXIgPSB0aGlzLl9ncm91cENhY2hlIS5vcmRlcjtcbiAgICAgIGdyb3VwTWFwID0gdGhpcy5fZ3JvdXBDYWNoZSEubWFwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcsOpLWNhbGN1bCBkZXMgdmFsZXVycyBkZSBncm91cGUgZW4gdW4gc2V1bCBwYXNzYWdlICjDqXZpdGUgTyhuKSBmaW5kKCkgcGFyIGNvbXBhcmFpc29uKVxuICAgICAgY29uc3QgZ3JvdXBWYWx1ZUNhY2hlID0gbmV3IE1hcDxULCBzdHJpbmc+KCk7XG4gICAgICByb3dzLmZvckVhY2gocm93ID0+IGdyb3VwVmFsdWVDYWNoZS5zZXQocm93LCBTdHJpbmcodGhpcy5nZXRMYXp5QXdhcmVWYWx1ZShncm91cEtleSwgcm93KSA/PyAnJykpKTtcblxuICAgICAgLy8gUHLDqS1jYWxjdWwgZGVzIHZhbGV1cnMgZGUgdHJpICjDqXZpdGUgTyhuIGxvZyBuKSDDlyBnZXRMYXp5QXdhcmVWYWx1ZSBkYW5zIGxlIGNvbXBhcmF0ZXVyKVxuICAgICAgY29uc3QgZmFzdENvbXBhcmVGbiA9IHRoaXMuX2J1aWxkQ2FjaGVkU29ydENvbXBhcmF0b3Iocm93cywgZWZmZWN0aXZlU29ydCk7XG5cbiAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5yb3dzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhID0gZ3JvdXBWYWx1ZUNhY2hlLmdldChhKSE7XG4gICAgICAgIGNvbnN0IHZiID0gZ3JvdXBWYWx1ZUNhY2hlLmdldChiKSE7XG4gICAgICAgIGNvbnN0IGNtcCA9IHZhLmxvY2FsZUNvbXBhcmUodmIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlciA9PT0gJ2Rlc2MnID8gLWNtcCA6IGNtcDtcbiAgICAgIH0pO1xuXG4gICAgICBncm91cE9yZGVyID0gW107XG4gICAgICBncm91cE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUW10+KCk7XG4gICAgICBzb3J0ZWQuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSBncm91cFZhbHVlQ2FjaGUuZ2V0KHJvdykhO1xuICAgICAgICBpZiAoIWdyb3VwTWFwLmhhcyhncm91cFZhbHVlKSkge1xuICAgICAgICAgIGdyb3VwT3JkZXIucHVzaChncm91cFZhbHVlKTtcbiAgICAgICAgICBncm91cE1hcC5zZXQoZ3JvdXBWYWx1ZSwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwTWFwLmdldChncm91cFZhbHVlKSEucHVzaChyb3cpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRyaSBpbnRyYS1ncm91cGUgc3RvY2vDqSBkYW5zIGxlIGNhY2hlIOKAlCDDqXZpdGUgbGUgcmUtdHJpIHN1ciBjb2xsYXBzZS9leHBhbmQvcGFnaW5hdGlvblxuICAgICAgaWYgKGZhc3RDb21wYXJlRm4pIHtcbiAgICAgICAgY29uc3QgZm4gPSBmYXN0Q29tcGFyZUZuO1xuICAgICAgICBncm91cE1hcC5mb3JFYWNoKChncm91cFJvd3MsIGtleSkgPT4ge1xuICAgICAgICAgIGdyb3VwTWFwLnNldChrZXksIFsuLi5ncm91cFJvd3NdLnNvcnQoZm4pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1pc2UgZW4gY2FjaGVcbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUgPSB7XG4gICAgICAgIHJvd3MsXG4gICAgICAgIGtleTogZ3JvdXBLZXksXG4gICAgICAgIHNvcnRPcmRlcjogdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlcixcbiAgICAgICAgc29ydEFjdGl2ZTogZWZmZWN0aXZlU29ydC5hY3RpdmUgPz8gJycsXG4gICAgICAgIHNvcnREaXI6IGVmZmVjdGl2ZVNvcnQuZGlyZWN0aW9uID8/ICcnLFxuICAgICAgICBvcmRlcjogZ3JvdXBPcmRlcixcbiAgICAgICAgbWFwOiBncm91cE1hcCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fdG90YWxGaWx0ZXJlZENvdW50ID0gcm93cy5sZW5ndGg7XG5cbiAgICAvLyBQcm90ZWN0aW9uIGNvbnRyZSBsZXMgamV1eCBkZSBkb25uw6llcyDDoCB0cm9wIGhhdXRlIGNhcmRpbmFsaXTDqVxuICAgIGlmIChncm91cE9yZGVyLmxlbmd0aCA+IFRhYmxlQ29tcG9uZW50Lk1BWF9HUk9VUF9DT1VOVCkge1xuICAgICAgcmV0dXJuIFt7IFtHUk9VUF9IRUFERVJfTUFSS0VSXTogdHJ1ZSwgW1JPV19HUk9VUF9LRVldOiBHUk9VUF9LRVlfVE9PX01BTlksIFtST1dfR1JPVVBfQ09VTlRdOiBncm91cE9yZGVyLmxlbmd0aCwgW1JPV19HUk9VUF9QQUdFXTogMCwgW1JPV19HUk9VUF9QQUdFX0NPVU5UXTogMSB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZ3JvdXBQYWdlU2l6ZTtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgY29uc3Qgcm93SW5kZXhlcyA9IG5ldyBNYXA8VCwgbnVtYmVyPigpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93LCBpbmRleCkgPT4gcm93SW5kZXhlcy5zZXQocm93LCBpbmRleCkpO1xuXG4gICAgZ3JvdXBPcmRlci5mb3JFYWNoKChncm91cFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBncm91cFJvd3MgPSBncm91cE1hcC5nZXQoZ3JvdXBWYWx1ZSkhO1xuICAgICAgY29uc3QgdG90YWxDb3VudCA9IGdyb3VwUm93cy5sZW5ndGg7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHBhZ2VTaXplID09PSAwID8gMCA6IHRoaXMuX2dyb3VwQnkuZ2V0UGFnZShncm91cFZhbHVlKTtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHBhZ2VTaXplID09PSAwID8gMSA6IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0b3RhbENvdW50IC8gcGFnZVNpemUpKTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHRoaXMuaXNHcm91cENvbGxhcHNlZChncm91cFZhbHVlKTtcblxuICAgICAgcmVzdWx0LnB1c2goeyBbR1JPVVBfSEVBREVSX01BUktFUl06IHRydWUsIFtST1dfR1JPVVBfS0VZXTogZ3JvdXBWYWx1ZSwgW1JPV19HUk9VUF9DT1VOVF06IHRvdGFsQ291bnQsIFtST1dfR1JPVVBfUEFHRV06IGN1cnJlbnRQYWdlLCBbUk9XX0dST1VQX1BBR0VfQ09VTlRdOiBwYWdlQ291bnQgfSk7XG5cbiAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZVNpemUgPT09IDAgPyAwIDogY3VycmVudFBhZ2UgKiBwYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gcGFnZVNpemUgPT09IDAgPyB0b3RhbENvdW50IDogTWF0aC5taW4oc3RhcnQgKyBwYWdlU2l6ZSwgdG90YWxDb3VudCk7XG4gICAgICAgIGdyb3VwUm93cy5zbGljZShzdGFydCwgZW5kKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBpZHggPSByb3dJbmRleGVzLmdldChyb3cpID8/IDA7XG4gICAgICAgICAgY29uc3QgcHJvamVjdGVkOiBhbnkgPSB7IFtST1dfUkFXX0tFWV06IHJvdywgW1JPV19JTkRFWF9LRVldOiBpZHgsIFtST1dfR1JPVVBfS0VZXTogZ3JvdXBWYWx1ZSB9O1xuICAgICAgICAgIHRoaXMuYWN0aXZlRmllbGRzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICAgICAgcHJvamVjdGVkW2NvbC5rZXldID0gdGhpcy5yZXNvbHZlQ2VsbFZhbHVlKGNvbCwgcm93LCBpZHgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHByb2plY3RlZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBDb21wYXJhdGV1ciBkb250IGxlcyB2YWxldXJzIGRlIHRyaSBzb250IGNhbGN1bMOpZXMgdW5lIHNldWxlIGZvaXMgcGFyIGxpZ25lLiAqL1xuICBwcml2YXRlIF9idWlsZFNvcnRDb21wYXJhdG9yKHJvd3M6IFRbXSk6ICgoYTogVCwgYjogVCkgPT4gbnVtYmVyKSB8IG51bGwge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLl9hY3RpdmVTb3J0LmFjdGl2ZSAmJiB0aGlzLl9hY3RpdmVTb3J0LmRpcmVjdGlvblxuICAgICAgPyB0aGlzLl9hY3RpdmVTb3J0XG4gICAgICA6IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQgPz8geyBhY3RpdmU6ICcnLCBkaXJlY3Rpb246ICcnIGFzIGNvbnN0IH07XG4gICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2FjaGVkU29ydENvbXBhcmF0b3Iocm93cywgc29ydCk7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZENhY2hlZFNvcnRDb21wYXJhdG9yKFxuICAgIHJvd3M6IFRbXSxcbiAgICBzb3J0OiBUYWJsZVNvcnRTdGF0ZSxcbiAgKTogKChhOiBULCBiOiBUKSA9PiBudW1iZXIpIHwgbnVsbCB7XG4gICAgaWYgKCFzb3J0LmFjdGl2ZSB8fCAhc29ydC5kaXJlY3Rpb24pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHNvcnRLZXkgPSBzb3J0LmFjdGl2ZTtcbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9IHNvcnQuZGlyZWN0aW9uO1xuICAgIGNvbnN0IHNvcnRWYWx1ZUNhY2hlID0gbmV3IE1hcDxULCB1bmtub3duPigpO1xuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4gc29ydFZhbHVlQ2FjaGUuc2V0KHJvdywgdGhpcy5nZXRMYXp5QXdhcmVWYWx1ZShzb3J0S2V5LCByb3cpKSk7XG4gICAgcmV0dXJuIChsZWZ0OiBULCByaWdodDogVCk6IG51bWJlciA9PiB0aGlzLl9hcHBseVNvcnREaXJlY3Rpb24oXG4gICAgICB0aGlzLl9jb21wYXJlU29ydFZhbHVlcyhzb3J0VmFsdWVDYWNoZS5nZXQobGVmdCksIHNvcnRWYWx1ZUNhY2hlLmdldChyaWdodCkpLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NvbGxhdG9yID0gbmV3IEludGwuQ29sbGF0b3IoJ2ZyJywgeyBzZW5zaXRpdml0eTogJ2FjY2VudCcsIG51bWVyaWM6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSBfY29tcGFyZVNvcnRWYWx1ZXMobGVmdDogdW5rbm93biwgcmlnaHQ6IHVua25vd24pOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHJpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGxlZnQgPCByaWdodCkgcmV0dXJuIC0xO1xuICAgICAgaWYgKGxlZnQgPiByaWdodCkgcmV0dXJuIDE7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGxlZnQgaW5zdGFuY2VvZiBEYXRlICYmIHJpZ2h0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIE1hdGguc2lnbihsZWZ0LmdldFRpbWUoKSAtIHJpZ2h0LmdldFRpbWUoKSkgfHwgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gVGFibGVDb21wb25lbnQuX2NvbGxhdG9yLmNvbXBhcmUodGhpcy5fbm9ybWFsaXplU29ydFZhbHVlKGxlZnQpLCB0aGlzLl9ub3JtYWxpemVTb3J0VmFsdWUocmlnaHQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX25vcm1hbGl6ZVNvcnRWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5U29ydERpcmVjdGlvbihjb21wYXJpc29uOiBudW1iZXIsIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycpOiBudW1iZXIge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gY29tcGFyaXNvbiA6IC1jb21wYXJpc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIGxhIHZhbGV1ciB0ZWxsZSBxdSdlbGxlIGVzdCBhZmZpY2jDqWUgZGFucyBsYSBjZWxsdWxlLCBlbiBzdWl2YW50IGV4YWN0ZW1lbnRcbiAgICogbGUgbcOqbWUgY2hlbWluIHF1ZSByZXNvbHZlQ2VsbFZhbHVlIOKAlCB1dGlsaXPDqWUgcG91ciBsYSByZWNoZXJjaGUgcGxlaW4tdGV4dGUuXG4gICAqIE5lIHBhc3NlIHBhcyBwYXIgc29ydFZhbHVlICh2YWxldXIgYnJ1dGUgZGUgdHJpKSBjb250cmFpcmVtZW50IMOgIGdldExhenlBd2FyZVZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXREaXNwbGF5VmFsdWVGb3JTZWFyY2goY29sOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+LCByb3c6IFQpOiBhbnkge1xuICAgIGlmIChjb2wubGF6eSAmJiB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChjb2wua2V5KSAhPT0gJ2xvYWRlZCcpIHJldHVybiBudWxsO1xuICAgIGlmIChjb2wuc2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybiBjb2wuc2VhcmNoVmFsdWUocm93LCAwKTtcbiAgICB9XG4gICAgY29uc3QgcmF3VmFsdWUgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93LCAwKSA6IChyb3cgYXMgYW55KT8uW2NvbC5rZXldO1xuICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUocmF3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXk6IHN0cmluZywgcm93OiBUKTogYW55IHtcbiAgICBjb25zdCBjb2xEZWYgPSB0aGlzLl9jb2x1bW5NYXAuZ2V0KGNvbHVtbktleSk7XG4gICAgaWYgKGNvbERlZj8ubGF6eSAmJiB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChjb2x1bW5LZXkpICE9PSAnbG9hZGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnNvcnRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RvU29ydElucHV0KGNvbERlZi5zb3J0VmFsdWUocm93LCAwKSk7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdG9Tb3J0SW5wdXQoY29sRGVmLnZhbHVlKHJvdywgMCkpO1xuICAgIH1cbiAgICByZXR1cm4gKHJvdyBhcyBhbnkpW2NvbHVtbktleV07XG4gIH1cblxuICAvKiogTGVzIG5vbWJyZXMgZXQgbGVzIGRhdGVzIGdhcmRlbnQgbGV1ciB0eXBlIHBvdXIgdW4gdHJpIGNvcnJlY3QgOyBsZSByZXN0ZSBlc3Qgbm9ybWFsaXPDqSBlbiB0ZXh0ZS4gKi9cbiAgcHJpdmF0ZSBfdG9Tb3J0SW5wdXQodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZSA6IG5vcm1hbGl6ZUNlbGxWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogTGVzIHN0YXR1dHMgZGUgY2hhcmdlbWVudCBsYXp5IG5lIGRvaXZlbnQgamFtYWlzIGFwcGFyYcOudHJlIGRhbnMgdW4gZmljaGllciBleHBvcnTDqS4gKi9cbiAgcHJpdmF0ZSBfcmVzb2x2ZUV4cG9ydFZhbHVlKGNvbDogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiwgcm93OiBULCBpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZUNlbGxWYWx1ZShjb2wsIHJvdywgaW5kZXgpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gTEFaWV9MT0FESU5HX1ZBTFVFIHx8IHZhbHVlID09PSBMQVpZX0VSUk9SX1ZBTFVFID8gJycgOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNlbGxWYWx1ZShjb2w6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4sIHJvdzogVCwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKGNvbC5sYXp5KSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChjb2wua2V5KTtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdsb2FkaW5nJykgcmV0dXJuIExBWllfTE9BRElOR19WQUxVRTtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdlcnJvcicpIHJldHVybiBMQVpZX0VSUk9SX1ZBTFVFO1xuICAgICAgaWYgKCFzdGF0dXMpIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgdmFsdWVQcm92aWRlciA9IGNvbC52YWx1ZTtcbiAgICBjb25zdCByYXdWYWx1ZSA9IHZhbHVlUHJvdmlkZXIgPyB2YWx1ZVByb3ZpZGVyKHJvdywgaW5kZXgpIDogKHJvdyBhcyBhbnkpPy5bY29sLmtleV07XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShyYXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgxLCB0aGlzLl91c2VyUGFnZVNpemUgfHwgdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VTaXplIHx8IDUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUGFnZVNpemVPcHRpb25zKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgfHwgWzUsIDEwLCAyMF07XG4gICAgY29uc3QgdW5pcXVlID0gWy4uLm5ldyBTZXQob3B0aW9ucy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSA+IDApKV07XG5cbiAgICBpZiAoIXVuaXF1ZS5pbmNsdWRlcyh0aGlzLnBhZ2VTaXplKSkge1xuICAgICAgdW5pcXVlLnB1c2godGhpcy5wYWdlU2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXF1ZS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVQYWdlU2l6ZU9wdGlvbnNHcm91cEJ5KCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5IHx8IHRoaXMucmVzb2x2ZWRDb25maWcucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zIHx8IFs1LCAxMCwgMjBdO1xuICAgIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KG9wdGlvbnMuZmlsdGVyKCh2KSA9PiB2ID4gMCkpXTtcbiAgICBpZiAodGhpcy5ncm91cFBhZ2VTaXplID4gMCAmJiAhdW5pcXVlLmluY2x1ZGVzKHRoaXMuZ3JvdXBQYWdlU2l6ZSkpIHtcbiAgICAgIHVuaXF1ZS5wdXNoKHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmlxdWUuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRGVmYXVsdEdyb3VwUGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjZmcgPSB0aGlzLnJlc29sdmVkQ29uZmlnO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjZmcucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zR3JvdXBCeSB8fCBjZmcucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zO1xuICAgIGlmIChvcHRpb25zPy5sZW5ndGgpIHJldHVybiBvcHRpb25zWzBdO1xuICAgIHJldHVybiBjZmcucGFnaW5hdGlvbj8ucGFnZVNpemUgfHwgNTtcbiAgfVxuXG4gIHByaXZhdGUgdW5pcXVlQ29sdW1uc0J5S2V5KGNvbHVtbnM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoc2Vlbi5oYXMoY29sdW1uLmtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoY29sdW1uLmtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoUGFnaW5hdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93UGFnaW5hdGlvbikge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvcikgcmV0dXJuO1xuXG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gbnVsbDtcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG5cbiAgICBpZiAodGhpcy5fcGFnaW5hdG9yU3Vic2NyaWJlZCAhPT0gdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRvclN1YnNjcmliZWQgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0b3IhLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLl91c2VyUGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3IhLnBhZ2VJbmRleCwgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yIS5wYWdlU2l6ZSB9KTtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdSZW5kZXIgIT09IG51bGwpIHJldHVybjtcbiAgICAgICAgdGhpcy5fcHJvamVjdEN1cnJlbnRQYWdlKCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoU29ydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc29ydCkgcmV0dXJuO1xuXG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2Uuc29ydCA9IG51bGwgYXMgYW55O1xuXG4gICAgaWYgKHRoaXMuX3NvcnRTdWJzY3JpYmVkICE9PSB0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuX3NvcnRTdWJzY3JpYmVkID0gdGhpcy5zb3J0O1xuICAgICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9hY3RpdmVTb3J0ID0ge1xuICAgICAgICAgIGFjdGl2ZTogdGhpcy5zb3J0LmFjdGl2ZSxcbiAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuc29ydC5kaXJlY3Rpb24sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHsgYWN0aXZlOiB0aGlzLnNvcnQuYWN0aXZlLCBkaXJlY3Rpb246IHRoaXMuc29ydC5kaXJlY3Rpb24gfSk7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VyaWFsaXphYmxlQ29sdW1uPFQ+KGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IGNvbHVtbi5rZXksXG4gICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgIGljb246IGNvbHVtbi5pY29uLFxuICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUsXG4gICAgcmVtb3ZhYmxlOiBjb2x1bW4ucmVtb3ZhYmxlLFxuICAgIG9wdGlvbmFsOiBjb2x1bW4ub3B0aW9uYWwsXG4gICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICBncm91cGFibGU6IGNvbHVtbi5ncm91cGFibGUsXG4gICAgc2xpY2VhYmxlOiBjb2x1bW4uc2xpY2VhYmxlLFxuICAgIGxhenk6ICEhY29sdW1uLmxhenksXG4gIH07XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImpxdWVyeS10YWJsZS13cmFwcGVyXCI+XG4gIDxvdXRwdXQgY2xhc3M9XCJ2aXN1YWwtY29weS1mZWVkYmFja1wiICpuZ0lmPVwiY29weUZlZWRiYWNrTWVzc2FnZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPnt7IGNvcHlGZWVkYmFja01lc3NhZ2UgfX08L291dHB1dD5cbiAgPGhlYWRlciBjbGFzcz1cInRhYmxlLWhlYWRlclwiICpuZ0lmPVwic2hvd1RpdGxlXCI+XG4gICAgPGgzPnt7IHRpdGxlIH19PC9oMz5cbiAgPC9oZWFkZXI+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwidGFibGUtbGF5b3V0XCJcbiAgICBbY2xhc3Mubm8tc2xpY2VdPVwiIV9zaG93U2xpY2VQYW5lbCB8fCBfc2xpY2VQYW5lbENvbGxhcHNlZFwiXG4gID5cbiAgICA8c2xpY2UtcGFuZWxcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIiFfc2hvd1NsaWNlUGFuZWwgfHwgX3NsaWNlUGFuZWxDb2xsYXBzZWQgPyAnbm9uZScgOiBudWxsXCJcbiAgICAgIFtzbGljZUNvbmZpZ3NdPVwiX3NsaWNlQ29uZmlnc1wiXG4gICAgICBbY29sdW1uc109XCJfc2xpY2VDb2x1bW5zXCJcbiAgICAgIFtkYXRhXT1cIl9zbGljZURhdGFcIlxuICAgICAgW2xhenlTdGF0dXNdPVwiX2xhenlDb2x1bW5TdGF0dXNcIlxuICAgICAgW3Nob3dUb2dnbGVdPVwiX3NsaWNlU2hvd1RvZ2dsZVwiXG4gICAgICBbY29sbGFwc2VkQnlEZWZhdWx0XT1cIl9zbGljZVBhbmVsQ29sbGFwc2VkXCJcbiAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25TbGljZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChkeW5hbWljU2xpY2VLZXlzQ2hhbmdlKT1cIm9uRHluYW1pY1NsaWNlS2V5c0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwib25TbGljZVBhbmVsQ29sbGFwc2VkQ2hhbmdlKCRldmVudClcIlxuICAgID48L3NsaWNlLXBhbmVsPlxuXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXNoZWxsXCIgI3RhYmxlU2hlbGw+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdG9vbGJhclwiICpuZ0lmPVwic2hvd1Rvb2xiYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRvb2xiYXItbGVmdFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1NsaWNlRXhwYW5kQnRuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGljZS1leHBhbmQtYnRuXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpMThuLmV4cGFuZEZpbHRlclRpdGxlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRTbGljZVBhbmVsKClcIlxuICAgICAgICAgID48bWF0LWljb24gY2xhc3M9XCJzbGljZS1leHBhbmQtbWF0LWljb25cIj5maWx0ZXJfbGlzdDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZWFyY2hCYXJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwic2VhcmNoLWljb25cIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4LjVcIiBjeT1cIjguNVwiIHI9XCI1LjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMTNMMTcgMTdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImkxOG4uc2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImkxOG4uc2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hRdWVyeVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlYXJjaC1jbGVhci1idG5cIiAoY2xpY2spPVwic2VhcmNoUXVlcnkgPSAnJzsgb25TZWFyY2hDaGFuZ2UoKVwiPsOXPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaC1jb3VudFwiICpuZ0lmPVwiIWVmZmVjdGl2ZUlzTG9hZGluZ1wiPnt7IGZpbHRlcmVkUm93Q291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvdW50LWxvYWRlclwiICpuZ0lmPVwiZWZmZWN0aXZlSXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93T3JnYW5pemVyQnV0dG9uXCIgY2xhc3M9XCJ0YWJsZS10b29sYmFyLXJpZ2h0XCI+XG4gICAgICAgICAgPHRhYmxlLW9yZ2FuaXplci1idXR0b25cbiAgICAgICAgICAgIFtjb25maWddPVwib3JnYW5pemVyQ29uZmlnXCJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJvcmdhbml6ZXJTdGF0ZVwiXG4gICAgICAgICAgICBbaGlkZU1lbnVWYWx1ZXNdPVwib3JnYW5pemVySGlkZU1lbnVWYWx1ZXNcIlxuICAgICAgICAgICAgKHZpZXdDaGFuZ2UpPVwib25Pcmdhbml6ZXJWaWV3Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICA8L3RhYmxlLW9yZ2FuaXplci1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LXdyYXBwZXJcIj5cblxuICAgICAgPCEtLSBCYW5uacOocmUgbWVzc2FnZSBwcsOpZsOpcmVuY2VzIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIl9wcmVmZXJlbmNlc01lc3NhZ2VcIiBjbGFzcz1cInByZWZlcmVuY2VzLW1lc3NhZ2VcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicHJlZmVyZW5jZXMtbWVzc2FnZS1pY29uXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgX3ByZWZlcmVuY2VzTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEJvdXRvbiBkZSBjb25maXJtYXRpb24gZHUgbW9kZSDDqWRpdGlvbiAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJfZWRpdE1vZGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJlZGl0LWNvbmZpcm0tYnRuXCJcbiAgICAgICAgW3RpdGxlXT1cImkxOG4ucHJlZmVyZW5jZXNDb25maXJtRWRpdFwiXG4gICAgICAgIChjbGljayk9XCJjb25maXJtRWRpdE1vZGUoKVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keS1zY3JvbGxcIiAjdGFibGVCb2R5U2Nyb2xsPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBtYXRTb3J0IFtkYXRhU291cmNlXT1cInRhYmxlRGF0YVNvdXJjZVwiIGNsYXNzPVwianF1ZXJ5LXRhYmxlXCJcbiAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cInRhYmxlTWluV2lkdGhcIlxuICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrUm93Rm5cIlxuICAgICAgICAgICAgIFttYXRTb3J0QWN0aXZlXT1cIl9tYXRTb3J0QWN0aXZlXCIgW21hdFNvcnREaXJlY3Rpb25dPVwiX21hdFNvcnREaXJlY3Rpb25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHZpc2libGVDb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ua2V5XCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICBbbWF0LXNvcnQtaGVhZGVyXT1cIighX2VkaXRNb2RlICYmIGNvbHVtbi5zb3J0YWJsZSAhPT0gZmFsc2UpID8gY29sdW1uLmtleSA6ICcnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfZWRpdE1vZGUgfHwgY29sdW1uLnNvcnRhYmxlID09PSBmYWxzZVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0Q29sdW1uV2lkdGgoY29sdW1uLmtleSlcIlxuICAgICAgICAgICAgW2NsYXNzLmRyYWctZW5hYmxlZF09XCJpc0NvbHVtbkRyYWdEcm9wRW5hYmxlZCB8fCBfZWRpdE1vZGVcIlxuICAgICAgICAgICAgW2NsYXNzLmRyb3AtdGFyZ2V0XT1cImlzSGVhZGVyRHJvcFRhcmdldChjb2x1bW4ua2V5KVwiXG4gICAgICAgICAgICBbY2xhc3MuZWRpdC1tb2RlLWhlYWRlcl09XCJfZWRpdE1vZGVcIlxuICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uSGVhZGVyRHJhZ092ZXIoY29sdW1uLmtleSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAoZHJvcCk9XCJvbkhlYWRlckRyb3AoY29sdW1uLmtleSwgJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWQtY2VsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJjb2x1bW4uaWNvblwiIGNsYXNzPVwiaGVhZC1pY29uXCIgZm9udFNldD1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+e3sgY29sdW1uLmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWQtdGV4dFwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+e3sgY29sdW1uLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgfHwgX2VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctaGFuZGxlXCJcbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1LDqW9yZG9ubmVyIGxhIGNvbG9ubmUgJyArIGNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25IZWFkZXJEcmFnU3RhcnQoY29sdW1uLmtleSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdlbmQpPVwib25IZWFkZXJEcmFnRW5kKClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSGVhZGVyS2V5RG93bihjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFBvaWduw6llIGRlIHJlc2l6ZSAodmlzaWJsZSB1bmlxdWVtZW50IGVuIG1vZGUgw6lkaXRpb24pIC0tPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJfZWRpdE1vZGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbC1yZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVzaXplU3RhcnQoY29sdW1uLmtleSwgJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0Q29sdW1uV2lkdGgoY29sdW1uLmtleSlcIlxuICAgICAgICAgICAgW2NsYXNzLmVkaXQtbW9kZS1jZWxsXT1cIl9lZGl0TW9kZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFfZWRpdE1vZGU7IGVsc2UgZWRpdE1vZGVDZWxsVHBsXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi5sYXp5ID8gZ2V0TGF6eVJlbmRlclR5cGUocm93W2NvbHVtbi5rZXldKSA6ICd2YWx1ZSdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRpbmcnXCIgY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nU3dpdGNoQ2FzZT1cIidlcnJvcidcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJsYXp5LWVycm9yLWJ0blwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJldHJ5TGF6eUNvbHVtbnMoKVwiIFt0aXRsZV09XCJpMThuLmxhenlFcnJvclRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktZXJyb3ItaWNvblwiPuKaoDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1lcnJvci1sYWJlbFwiPnt7IGkxOG4ubGF6eVJldHJ5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDZWxsVGVtcGxhdGUoY29sdW1uLmtleSkgYXMgY3VzdG9tVHBsOyBlbHNlIGRlZmF1bHRDZWxsVHBsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3dbX1JPV19SQVdfS0VZXSwgaW5kZXg6IHJvd1tfUk9XX0lOREVYX0tFWV0sIHZhbHVlOiByb3dbY29sdW1uLmtleV0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVHBsPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dFwiIFtjbGFzcy5jZWxsLWVtcHR5XT1cImlzQ2VsbEVtcHR5KHJvd1tjb2x1bW4ua2V5XSlcIiBbdGl0bGVdPVwiYXNUaXRsZShyb3dbY29sdW1uLmtleV0pXCI+e3sgaXNDZWxsRW1wdHkocm93W2NvbHVtbi5rZXldKSA/IGkxOG4uY2VsbEVtcHR5IDogcm93W2NvbHVtbi5rZXldIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdE1vZGVDZWxsVHBsPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLWVkaXQtbW9kZVwiIFt0aXRsZV09XCJhc1RpdGxlKHJvd1tjb2x1bW4ua2V5XSlcIj57eyByb3dbY29sdW1uLmtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwicmVuZGVyZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgICAgICA8dHJcbiAgICAgICAgICBtYXQtcm93XG4gICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHJlbmRlcmVkQ29sdW1uczsgd2hlbjogIWlzR3JvdXBIZWFkZXJcIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImhhc1Jvd0NsaWNrSGFuZGxlciAmJiAhX2VkaXRNb2RlID8gMCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaGFzUm93Q2xpY2tIYW5kbGVyICYmICFfZWRpdE1vZGUgPyByb3dBY3Rpb25MYWJlbChyb3cpIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1rZXlzaG9ydGN1dHNdPVwiaGFzUm93Q2xpY2tIYW5kbGVyICYmICFfZWRpdE1vZGUgPyAnRW50ZXIgU3BhY2UnIDogbnVsbFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3Mocm93KVwiXG4gICAgICAgICAgW2NsYXNzLm5vLXBvaW50ZXJdPVwiIWhhc1Jvd0NsaWNrSGFuZGxlciB8fCBfZWRpdE1vZGVcIlxuICAgICAgICAgIFtjbGFzcy5lZGl0LW1vZGUtcm93XT1cIl9lZGl0TW9kZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIiFfZWRpdE1vZGUgJiYgb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiFfZWRpdE1vZGUgJiYgb25Sb3dDbGljayhyb3csIG51bGwpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIhX2VkaXRNb2RlICYmIG9uUm93Q2xpY2socm93LCBudWxsKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICA+PC90cj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIl9HUk9VUF9ST1dfQ09MVU1OXCI+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFthdHRyLmNvbHNwYW5dPVwicmVuZGVyZWRDb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXItbGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1jaGV2cm9uXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0dyb3VwQ29sbGFwc2VkKHJvd1tfUk9XX0dST1VQX0tFWV0pXCIgKm5nSWY9XCJpc05vcm1hbEdyb3VwUm93KHJvdylcIj7igLo8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNOb3JtYWxHcm91cFJvdyhyb3cpXCIgY2xhc3M9XCJncm91cC1rZXktbGFiZWxcIj57eyByb3dbX1JPV19HUk9VUF9LRVldIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzR3JvdXBSb3dMb2FkaW5nKHJvdylcIiBjbGFzcz1cImxhenktc2tlbGV0b24gZ3JvdXAtbGF6eS1rZXktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0dyb3VwUm93RXJyb3Iocm93KVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxhenktZXJyb3ItYnRuXCIgKGNsaWNrKT1cInJldHJ5R3JvdXBCeUNvbHVtbigkZXZlbnQpXCIgW3RpdGxlXT1cImkxOG4ubGF6eUVycm9yVGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktZXJyb3ItaWNvblwiPuKaoDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktZXJyb3ItbGFiZWxcIj57eyBpMThuLmxhenlSZXRyeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNHcm91cFJvd1Rvb01hbnkocm93KVwiIGNsYXNzPVwiZ3JvdXAtdG9vLW1hbnktbGFiZWxcIj57eyBpMThuLmdyb3VwVG9vTWFueShyb3dbX1JPV19HUk9VUF9DT1VOVF0pIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLWNvdW50LWJhZGdlXCI+e3sgcm93W19ST1dfR1JPVVBfQ09VTlRdIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtcGFnaW5hdGlvblwiICpuZ0lmPVwiIWlzR3JvdXBDb2xsYXBzZWQocm93W19ST1dfR1JPVVBfS0VZXSkgJiYgcm93W19ST1dfR1JPVVBfUEFHRV9DT1VOVF0gPiAxXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXAtcGFnZS1idG5cIiBbZGlzYWJsZWRdPVwicm93W19ST1dfR1JPVVBfUEFHRV0gPT09IDBcIiAoY2xpY2spPVwiZ3JvdXBQYWdlQmFjayhyb3dbX1JPV19HUk9VUF9LRVldKVwiPuKAuTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JvdXAtcGFnZS1pbmZvXCI+e3sgcm93W19ST1dfR1JPVVBfUEFHRV0gKyAxIH19IC8ge3sgcm93W19ST1dfR1JPVVBfUEFHRV9DT1VOVF0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cC1wYWdlLWJ0blwiIFtkaXNhYmxlZF09XCJyb3dbX1JPV19HUk9VUF9QQUdFXSA+PSByb3dbX1JPV19HUk9VUF9QQUdFX0NPVU5UXSAtIDFcIiAoY2xpY2spPVwiZ3JvdXBQYWdlRm9yd2FyZChyb3dbX1JPV19HUk9VUF9LRVldLCByb3dbX1JPV19HUk9VUF9DT1VOVF0pXCI+4oC6PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbX0dST1VQX1JPV19DT0xVTU5dOyB3aGVuOiBpc0dyb3VwSGVhZGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLXJvd1wiXG4gICAgICAgICAgICBbY2xhc3MuZ3JvdXAtaGVhZGVyLWxvYWRpbmddPVwiaXNHcm91cFJvd0xvYWRpbmcocm93KVwiXG4gICAgICAgICAgICBbY2xhc3MuZ3JvdXAtaGVhZGVyLWVycm9yXT1cImlzR3JvdXBSb3dFcnJvcihyb3cpXCJcbiAgICAgICAgICAgIFtjbGFzcy5ncm91cC1oZWFkZXItdG9vLW1hbnldPVwiaXNHcm91cFJvd1Rvb01hbnkocm93KVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWdyb3VwLWtleV09XCJyb3dbX1JPV19HUk9VUF9LRVldXCJcbiAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpc05vcm1hbEdyb3VwUm93KHJvdykgPyAwIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc05vcm1hbEdyb3VwUm93KHJvdykgPyAhaXNHcm91cENvbGxhcHNlZChyb3dbX1JPV19HUk9VUF9LRVldKSA6IG51bGxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwSGVhZGVyQ2xpY2socm93KVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25Hcm91cEhlYWRlckNsaWNrKHJvdylcIlxuICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9uR3JvdXBIZWFkZXJDbGljayhyb3cpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPjwvdHI+XG4gICAgICAgIDx0ciBjbGFzcz1cIm1hdC1tZGMtcm93IG5vLWRhdGEtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtbWRjLWNlbGwgbm8tZGF0YS1jZWxsXCIgW2F0dHIuY29sc3Bhbl09XCJyZW5kZXJlZENvbHVtbnMubGVuZ3RoXCI+PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj48IS0tIC90YWJsZS1ib2R5LXNjcm9sbCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LW92ZXJsYXlcIiAqbmdJZj1cImVmZmVjdGl2ZUlzTG9hZGluZyB8fCBpc0VtcHR5XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtYm9keS1vdmVybGF5LXRleHRcIj57eyBlZmZlY3RpdmVJc0xvYWRpbmcgPyBsb2FkaW5nU3RhdGVMYWJlbCA6IGVtcHR5U3RhdGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+PCEtLSAvdGFibGUtYm9keS13cmFwcGVyIC0tPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYm90dG9tLWJhclwiIFtjbGFzcy5pcy1sb2FkaW5nXT1cImVmZmVjdGl2ZUlzTG9hZGluZ1wiICpuZ0lmPVwic2hvd1BhZ2luYXRpb25cIj5cbiAgICAgICAgPG1hdC1wYWdpbmF0b3JcbiAgICAgICAgICBbbGVuZ3RoXT1cInRvdGFsUm93c1wiXG4gICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgICAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInJlc29sdmVkUGFnaW5hdGlvblNob3dGaXJzdExhc3RCdXR0b25zXCJcbiAgICAgICAgPjwvbWF0LXBhZ2luYXRvcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvci1yYW5nZS1sb2FkZXJcIiBcbiAgICAgICAgICAgICBbY2xhc3MucGFnaW5hdG9yLXJhbmdlLWxvYWRlci0tbm8tZmlyc3QtbGFzdF09XCIhcmVzb2x2ZWRQYWdpbmF0aW9uU2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIlxuICAgICAgICAgICAgICpuZ0lmPVwiZWZmZWN0aXZlSXNMb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWJvdHRvbS1iYXJcIiAqbmdJZj1cImFjdGl2ZUdyb3VwQnlLZXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWJvdHRvbS1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWJvdHRvbS1iYXItbGVmdFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cC1yZXNldC1idG5cIiAoY2xpY2spPVwib25Hcm91cEJ5Q2hhbmdlKG51bGwpXCI+XG4gICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiZ3JvdXAtcmVzZXQtaWNvblwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyA4YTUgNSAwIDEgMCA1LTUgNSA1IDAgMCAwLTMuNTQgMS40NkwzIDNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDN2Mi41SDUuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIHt7IGkxOG4uZ3JvdXBSZW1vdmUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWJhci1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1zb3J0LWNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JvdXAtc29ydC1sYWJlbFwiPnt7IGkxOG4uZ3JvdXBTb3J0TGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXAtc29ydC1idG5cIiBbY2xhc3MuYWN0aXZlXT1cImdyb3VwU29ydE9yZGVyID09PSAnYXNjJ1wiIChjbGljayk9XCJvbkdyb3VwU29ydFRvZ2dsZSgnYXNjJylcIiBbdGl0bGVdPVwiaTE4bi5ncm91cFNvcnRBc2NcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXAtc29ydC1idG5cIiBbY2xhc3MuYWN0aXZlXT1cImdyb3VwU29ydE9yZGVyID09PSAnZGVzYydcIiAoY2xpY2spPVwib25Hcm91cFNvcnRUb2dnbGUoJ2Rlc2MnKVwiIFt0aXRsZV09XCJpMThuLmdyb3VwU29ydERlc2NcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtbGFiZWxcIj57eyBpMThuLmdyb3VwUm93c1Blckdyb3VwIH19PC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJtYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0XCI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJncm91cFBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkdyb3VwUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cIm1hdC1tZGMtcGFnaW5hdG9yLXNlbGVjdC1wYWdlLXNpemUgZ3JvdXAtcGFnZS1zaXplLXBhbmVsXCJcbiAgICAgICAgICAgICAgICBbcGFuZWxXaWR0aF09XCInYXV0bydcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj57eyBncm91cFBhZ2VTaXplID09PSAwID8gaTE4bi5ncm91cFNob3dBbGwgOiBncm91cFBhZ2VTaXplIH19PC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBwYWdlU2l6ZU9wdGlvbnNHcm91cEJ5XCIgW3ZhbHVlXT1cIm9wdFwiPnt7IG9wdCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMFwiPnt7IGkxOG4uZ3JvdXBTaG93QWxsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==