@sumaris-net/ngx-components 0.24.1 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/bundles/{ngx-sumaris-components.umd.js → sumaris-net.ngx-components.umd.js} +923 -882
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -0
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +25 -0
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -0
  5. package/esm2015/public_api.js +2 -1
  6. package/esm2015/src/app/admin/services/filter/person.filter.js +4 -2
  7. package/esm2015/src/app/admin/services/person.service.js +3 -2
  8. package/esm2015/src/app/admin/users/list/users.js +6 -4
  9. package/esm2015/src/app/core/graphql/graphql.service.js +17 -63
  10. package/esm2015/src/app/core/graphql/graphql.utils.js +1 -1
  11. package/esm2015/src/app/core/install/install-upgrade-card.component.js +28 -16
  12. package/esm2015/src/app/core/services/account.service.js +146 -149
  13. package/esm2015/src/app/core/services/config.service.js +21 -14
  14. package/esm2015/src/app/core/services/local-settings.service.js +72 -87
  15. package/esm2015/src/app/core/services/network.service.js +135 -170
  16. package/esm2015/src/app/core/services/platform.service.js +32 -17
  17. package/esm2015/src/app/core/services/storage/entities-storage.service.js +59 -63
  18. package/esm2015/src/app/shared/audio/audio.js +10 -39
  19. package/esm2015/src/app/shared/functions.js +6 -7
  20. package/esm2015/src/app/shared/material/boolean/material.boolean.js +1 -1
  21. package/esm2015/src/app/shared/services/startable-service.class.js +74 -0
  22. package/esm2015/src/environments/environment.class.js +1 -1
  23. package/esm2015/src/environments/environment.js +5 -1
  24. package/esm2015/sumaris-net.ngx-components.js +13 -0
  25. package/fesm2015/{ngx-sumaris-components.js → sumaris-net.ngx-components.js} +605 -629
  26. package/fesm2015/sumaris-net.ngx-components.js.map +1 -0
  27. package/package.json +13 -9
  28. package/public_api.d.ts +1 -0
  29. package/src/app/admin/services/filter/person.filter.d.ts +1 -0
  30. package/src/app/admin/users/list/users.d.ts +1 -0
  31. package/src/app/core/graphql/graphql.service.d.ts +5 -13
  32. package/src/app/core/graphql/graphql.utils.d.ts +2 -1
  33. package/src/app/core/install/install-upgrade-card.component.d.ts +4 -4
  34. package/src/app/core/services/account.service.d.ts +11 -10
  35. package/src/app/core/services/config.service.d.ts +6 -5
  36. package/src/app/core/services/local-settings.service.d.ts +4 -9
  37. package/src/app/core/services/network.service.d.ts +27 -38
  38. package/src/app/core/services/platform.service.d.ts +2 -1
  39. package/src/app/core/services/storage/entities-storage.service.d.ts +13 -13
  40. package/src/app/shared/audio/audio.d.ts +4 -8
  41. package/src/app/shared/functions.d.ts +1 -1
  42. package/src/app/shared/services/startable-service.class.d.ts +25 -0
  43. package/src/environments/environment.class.d.ts +1 -0
  44. package/{ngx-sumaris-components.d.ts → sumaris-net.ngx-components.d.ts} +0 -0
  45. package/sumaris-net.ngx-components.metadata.json +1 -0
  46. package/bundles/ngx-sumaris-components.umd.js.map +0 -1
  47. package/bundles/ngx-sumaris-components.umd.min.js +0 -25
  48. package/bundles/ngx-sumaris-components.umd.min.js.map +0 -1
  49. package/esm2015/ngx-sumaris-components.js +0 -13
  50. package/fesm2015/ngx-sumaris-components.js.map +0 -1
  51. package/ngx-sumaris-components.metadata.json +0 -1
@@ -91,6 +91,9 @@ export class PlatformService {
91
91
  isAndroidCordova() {
92
92
  return this._android && this._cordova;
93
93
  }
94
+ get canDownload() {
95
+ return !!this.downloader;
96
+ }
94
97
  width() {
95
98
  return this.platform.width();
96
99
  }
@@ -132,7 +135,7 @@ export class PlatformService {
132
135
  .then(() => {
133
136
  this._started = true;
134
137
  this._startPromise = undefined;
135
- console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi}} in ${Date.now() - now}ms`);
138
+ console.info(`[platform] Starting platform [OK] {mobile: ${this._mobile}, touchUi: ${this.touchUi}, downloader: ${this.canDownload} in ${Date.now() - now}ms`);
136
139
  // Update cache configuration when network changed
137
140
  this.networkService.onNetworkStatusChanges.subscribe((type) => this.configureCache(type !== 'none'));
138
141
  // Update authentication type
@@ -180,18 +183,29 @@ export class PlatformService {
180
183
  }
181
184
  }
182
185
  download(request) {
183
- if (!request || !request.uri)
184
- throw new Error('Missing argument \'request\' or \'request.uri\'');
185
- if (this._android && this._cordova) {
186
- request = Object.assign(Object.assign({ visibleInDownloadsUi: true, notificationVisibility: NotificationVisibility.VisibleNotifyCompleted, title: request.filename || '' }, request), { destinationInExternalFilesDir: Object.assign({ dirType: 'Downloads', subPath: request.filename || request.title || '' }, request.destinationInExternalFilesDir) });
187
- this.downloader.download(request)
188
- .then((location) => console.info('[platform] File successfully downloaded at:' + location))
189
- .catch((error) => console.error(error));
190
- }
191
- // Web mode: open URI using the browser
192
- else {
193
- this.open(request.uri, '_system', 'location=yes');
194
- }
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ if (!request || !request.uri)
188
+ throw new Error('Missing argument \'request\' or \'request.uri\'');
189
+ if (this.downloader) {
190
+ request = Object.assign(Object.assign({ visibleInDownloadsUi: true, notificationVisibility: NotificationVisibility.VisibleNotifyCompleted, title: request.filename || '' }, request), { destinationInExternalFilesDir: Object.assign({ dirType: 'Downloads', subPath: request.filename || request.title || '' }, request.destinationInExternalFilesDir) });
191
+ try {
192
+ const location = yield this.downloader.download(request);
193
+ console.info('[platform] File successfully downloaded at:' + location);
194
+ return location;
195
+ }
196
+ catch (err) {
197
+ console.error('[platform] Error while downloading: ' + (err && err.message || err), err);
198
+ throw err;
199
+ }
200
+ }
201
+ // Fallback (no Cordova)
202
+ // Web mode: open URI using the browser
203
+ else {
204
+ console.warn('[platform] Cannot use Cordova downloader: using browser open()');
205
+ this.open(request.uri, '_system', 'location=no', true);
206
+ return undefined;
207
+ }
208
+ });
195
209
  }
196
210
  /* -- protected methods -- */
197
211
  configureCordovaPlugins(mobile) {
@@ -288,13 +302,14 @@ export class PlatformService {
288
302
  storeName: forage.config().storeName,
289
303
  driver: [forage.INDEXEDDB, forage.WEBSQL]
290
304
  });
291
- // IF data stored in the OLD storage: start migration
292
305
  const keys = yield oldForage.keys();
306
+ // No data in the odl storage: skip migration
293
307
  if (isEmptyArray(keys)) {
294
- // Drop the old instance
295
- console.info(`[platform] Drop old storage {name: '${forage.config().name}', driver: '${oldForage.driver()}'}`);
308
+ // Drop the old instance (not need anymore)
309
+ console.debug(`[platform] Old storage is empty: dropping unused instance {name: '${forage.config().name}', driver: '${oldForage.driver()}'}`);
296
310
  yield oldForage.dropInstance();
297
311
  }
312
+ // IF some data stored in the OLD storage: start migration
298
313
  else {
299
314
  const now = Date.now();
300
315
  console.info(`[platform] Starting storage migration...`);
@@ -397,4 +412,4 @@ PlatformService.ctorParameters = () => [
397
412
  { type: InAppBrowser, decorators: [{ type: Optional }] },
398
413
  { type: Downloader, decorators: [{ type: Optional }] }
399
414
  ];
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQWdCLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLElBQUksV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQW1CLE1BQU0sRUFBQyxNQUFN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QUFRLHVCQTZEWCxRQUFRO1lBL0RMLFlBQVksdUJBZ0VmLFFBQVE7WUF4REwsWUFBWSx1QkF5RGYsUUFBUTtZQTFDTCxVQUFVLHVCQTJDYixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtBdXRoVG9rZW5UeXBlLCBOZXR3b3JrU2VydmljZX0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybXN9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7U3BsYXNoU2NyZWVufSBmcm9tICdAaW9uaWMtbmF0aXZlL3NwbGFzaC1zY3JlZW4vbmd4JztcbmltcG9ydCB7U3RhdHVzQmFyfSBmcm9tICdAaW9uaWMtbmF0aXZlL3N0YXR1cy1iYXIvbmd4JztcbmltcG9ydCB7S2V5Ym9hcmR9IGZyb20gJ0Bpb25pYy1uYXRpdmUva2V5Ym9hcmQvbmd4JztcbmltcG9ydCB7TG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge0NhY2hlU2VydmljZX0gZnJvbSAnaW9uaWMtY2FjaGUnO1xuaW1wb3J0IHtBdWRpb1Byb3ZpZGVyfSBmcm9tICcuLi8uLi9zaGFyZWQvYXVkaW8vYXVkaW8nO1xuaW1wb3J0IHtQbGF0Zm9ybSBhcyBDZGtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcblxuaW1wb3J0IHtJbkFwcEJyb3dzZXJ9IGZyb20gJ0Bpb25pYy1uYXRpdmUvaW4tYXBwLWJyb3dzZXIvbmd4JztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFua30gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7RW50aXRpZXNTdG9yYWdlfSBmcm9tICcuL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7U3RvcmFnZVV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RvcmFnZS51dGlscyc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7dGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHtNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHtEb3dubG9hZGVyLCBEb3dubG9hZFJlcXVlc3QsIE5vdGlmaWNhdGlvblZpc2liaWxpdHl9IGZyb20gJ0Bpb25pYy1uYXRpdmUvZG93bmxvYWRlci9uZ3gnO1xuXG5jb25zdCBtb21lbnQgPSBtb21lbnRJbXBvcnRlZDtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3RhcnRlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9zdGFydFByb21pc2U6IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY29yZG92YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYW5kcm9pZDogYm9vbGVhbjtcblxuICB0b3VjaFVpOiBib29sZWFuO1xuXG4gIGdldCBzdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGVkO1xuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fbW9iaWxlKSA/IHRoaXMuX21vYmlsZSA6IHRoaXMucGxhdGZvcm0uaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBjZGtQbGF0Zm9ybTogQ2RrUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIGVudGl0aWVzU3RvcmFnZTogRW50aXRpZXNTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByaXZhdGUgYXVkaW9Qcm92aWRlcjogQXVkaW9Qcm92aWRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdGF0dXNCYXI6IFN0YXR1c0JhcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGtleWJvYXJkOiBLZXlib2FyZCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNwbGFzaFNjcmVlbjogU3BsYXNoU2NyZWVuLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgYnJvd3NlcjogSW5BcHBCcm93c2VyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZG93bmxvYWRlcjogRG93bmxvYWRlcixcbiAgKSB7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBpcyhwbGF0Zm9ybU5hbWU6IFBsYXRmb3Jtcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F5IGlmIG9wZW5lZCBoYXMgYmVlbiBvcGVuZWQgZnJvbSBhIHdlYiBicm93c2VyIChhbmQgTk9UIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHApLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8ga25vd24gaWYgdGhlcmUgaXMgY29yZG92YSBmZWF0dXJlc1xuICAgKi9cbiAgaXNXZWJPckRlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGV3ZWInKTtcbiAgfVxuXG4gIGlzQW5kcm9pZENvcmRvdmEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FuZHJvaWQgJiYgdGhpcy5fY29yZG92YTtcbiAgfVxuXG4gIHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGxhdGZvcm0ud2lkdGgoKTtcbiAgfVxuXG4gIGhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLmhlaWdodCgpO1xuICB9XG5cbiAgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0UHJvbWlzZSkgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZTtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgdGhpcy5hY2NvdW50U2VydmljZS50b2tlblR5cGUgPSB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIFN0YXJ0aW5nIHBsYXRmb3JtLi4uJyk7XG5cbiAgICB0aGlzLl9zdGFydFByb21pc2UgPSB0aGlzLnBsYXRmb3JtLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKTtcbiAgICAgICAgdGhpcy5fY29yZG92YSA9IHRoaXMucGxhdGZvcm0uaXMoJ2NvcmRvdmEnKTtcbiAgICAgICAgdGhpcy5fYW5kcm9pZCA9IHRoaXMucGxhdGZvcm0uaXMoJ2FuZHJvaWQnKTtcblxuICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvcmRvdmFQbHVnaW5zKHRoaXMuX21vYmlsZSk7XG4gICAgICAgIHRoaXMudG91Y2hVaSA9IHRoaXMuX21vYmlsZSB8fCB0aGlzLnBsYXRmb3JtLmlzKCd0YWJsZXQnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdwaGFibGV0Jyk7XG5cbiAgICAgICAgLy8gRm9yY2UgbW9iaWxlIGluIHNldHRpbmdzXG4gICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLm1vYmlsZSA9IHRoaXMuX21vYmlsZTtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnRvdWNoVWkgPSB0aGlzLnRvdWNoVWk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVRyYW5zbGF0ZSgpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gdGhpcy5zdG9yYWdlUmVhZHkoKSlcbiAgICAudGhlbigoZm9yYWdlKSA9PiB0aGlzLm1pZ3JhdGVTdG9yYWdlKGZvcmFnZSkpXG4gICAgLnRoZW4oKCkgPT4gUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5lbnRpdGllc1N0b3JhZ2UucmVhZHkoKSxcbiAgICAgIHRoaXMuY2FjaGUucmVhZHkoKS50aGVuKCgpID0+IHRoaXMuY29uZmlndXJlQ2FjaGUoKSksXG4gICAgICB0aGlzLnNldHRpbmdzLnJlYWR5KCksXG4gICAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlLnJlYWR5KCksXG4gICAgICB0aGlzLmF1ZGlvUHJvdmlkZXIucmVhZHkoKVxuICAgIF0pKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fc3RhcnRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHBsYXRmb3JtIFtPS10ge21vYmlsZTogJHt0aGlzLl9tb2JpbGV9LCB0b3VjaFVpOiAke3RoaXMudG91Y2hVaX19IGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBVcGRhdGUgY2FjaGUgY29uZmlndXJhdGlvbiB3aGVuIG5ldHdvcmsgY2hhbmdlZFxuICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gdGhpcy5jb25maWd1cmVDYWNoZSh0eXBlICE9PSAnbm9uZScpKTtcblxuICAgICAgLy8gVXBkYXRlIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWdcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKGNvbmZpZyA9PiBjb25maWc/LmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlKSxcbiAgICAgICAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh0b2tlblR5cGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBVc2luZyBhdXRoIHRva2VuIHR5cGUgeyR7dG9rZW5UeXBlfX1gKTtcbiAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIFdhaXQgMSBtb3JlIHNlY29uZHMsIGJlZm9yZSBoaWRpbmcgdGhlIHNwbGFzaCBzY3JlZW5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zcGxhc2hTY3JlZW4pIHRoaXMuc3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAvLyBQbGF5IHN0YXJ0dXAgc291bmRcbiAgICAgICAgdGhpcy5hdWRpb1Byb3ZpZGVyLnBsYXlTdGFydHVwU291bmQoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH0pXG4gICAgICAvLyBNYW5hZ2UgZXJyb3JcbiAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5vblN0YXJ0dXBFcnJvcihlcnIpKTtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgcGxhdGZvcm0gaXMgcmVhZHkuPGJyLz5cbiAgICogSW1wb3J0YW50OiB0aGlzIHdpbGwgTk9UIHN0YXJ0IHRoZSBwbGF0Zm9ybSwgaGFzIGl0IHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBBcHBDb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHJlYWR5KG9wdHM/OiB7XG4gICAgY2hlY2tQZXJpb2Q6IG51bWJlcjtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcGVyaW9kID0gb3B0cyAmJiBvcHRzLmNoZWNrUGVyaW9kIHx8IDMwMDtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHJldHVybiB0aW1lcihwZXJpb2QsIHBlcmlvZClcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBGb3IgREVCVUcgOlxuICAgICAgICAvL3RhcCgoKSA9PiB0aGlzLl9kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKFwiV2FpdGluZyBwbGF0Zm9ybSByZWFkeS4uLlwiKSksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9zdGFydGVkKSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIG9wZW4odXJsOiBzdHJpbmcsIHRhcmdldD86IHN0cmluZywgZmVhdHVyZXM/OiBzdHJpbmcsIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIE9wZW5pbmcgbGluazogJHt1cmx9YCk7XG4gICAgaWYgKHRoaXMuYnJvd3NlciAmJiB0aGlzLl9tb2JpbGUpIHtcbiAgICAgIHRoaXMuYnJvd3Nlci5jcmVhdGUodXJsLCB0YXJnZXQsIGZlYXR1cmVzKS5zaG93KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgd2luZG93Lm9wZW4odXJsLCB0YXJnZXQsIGZlYXR1cmVzLCByZXBsYWNlKTtcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZChyZXF1ZXN0OiB7dXJpOiBzdHJpbmc7IGZpbGVuYW1lPzogc3RyaW5nIH0gJiBQYXJ0aWFsPERvd25sb2FkUmVxdWVzdD4gKSB7XG4gICAgaWYgKCFyZXF1ZXN0IHx8ICFyZXF1ZXN0LnVyaSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ3JlcXVlc3RcXCcgb3IgXFwncmVxdWVzdC51cmlcXCcnKTtcbiAgICBpZiAodGhpcy5fYW5kcm9pZCAmJiB0aGlzLl9jb3Jkb3ZhKSB7XG4gICAgICByZXF1ZXN0ID0ge1xuICAgICAgICB2aXNpYmxlSW5Eb3dubG9hZHNVaTogdHJ1ZSxcbiAgICAgICAgbm90aWZpY2F0aW9uVmlzaWJpbGl0eTogTm90aWZpY2F0aW9uVmlzaWJpbGl0eS5WaXNpYmxlTm90aWZ5Q29tcGxldGVkLFxuICAgICAgICB0aXRsZTogcmVxdWVzdC5maWxlbmFtZSB8fCAnJyxcbiAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXI6IHtcbiAgICAgICAgICBkaXJUeXBlOiAnRG93bmxvYWRzJyxcbiAgICAgICAgICBzdWJQYXRoOiByZXF1ZXN0LmZpbGVuYW1lIHx8IHJlcXVlc3QudGl0bGUgfHwgJycsXG4gICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0RpclxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmRvd25sb2FkZXIuZG93bmxvYWQocmVxdWVzdClcbiAgICAgICAgLnRoZW4oKGxvY2F0aW9uOiBzdHJpbmcpID0+IGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBGaWxlIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGF0OicgKyBsb2NhdGlvbikpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IGFueSkgPT4gY29uc29sZS5lcnJvcihlcnJvcikpO1xuICAgIH1cbiAgICAvLyBXZWIgbW9kZTogb3BlbiBVUkkgdXNpbmcgdGhlIGJyb3dzZXJcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMub3BlbihyZXF1ZXN0LnVyaSwgJ19zeXN0ZW0nLCAnbG9jYXRpb249eWVzJyk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlQ29yZG92YVBsdWdpbnMobW9iaWxlOiBib29sZWFuKSB7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIENvcmRvdmEgcGx1Z2lucy4uLicpO1xuXG4gICAgaWYgKHRoaXMuc3RhdHVzQmFyKSB7XG4gICAgICB0aGlzLnN0YXR1c0Jhci5zdHlsZURlZmF1bHQoKTtcbiAgICAgIHRoaXMuc3RhdHVzQmFyLm92ZXJsYXlzV2ViVmlldyhmYWxzZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmtleWJvYXJkKSB7XG4gICAgICB0aGlzLmtleWJvYXJkLmhpZGVGb3JtQWNjZXNzb3J5QmFyKHRydWUpO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIHRvIHVzZSBJbkFwcEJyb3dzZXIgaW5zdGVhZCBvZiBkZWZhdWx0IHdpbmRvdy5vcGVuKClcbiAgICBpZiAodGhpcy5icm93c2VyKSB7XG4gICAgICAvLyBGSVhNRTogdGhpcyBjcmVhdGUgYSBpbmZpbml0ZSBsb29wIChlLmcuIHdoZW4gZG93bmxvYWRpbmcgYW4gZXh0cmFjdGlvbiBmaWxlKVxuICAgICAgLy8gd2luZG93Lm9wZW4gPSAodXJsPzogc3RyaW5nLCB0YXJnZXQ/OiBzdHJpbmcsIGZlYXR1cmVzPzogc3RyaW5nLCByZXBsYWNlPzogYm9vbGVhbikgPT4ge1xuICAgICAgLy8gICBjb25zb2xlLmRlYnVnKFwiW3BsYXRmb3JtXSBDYWxsIHRvIHdpbmRvdy5vcGVuKCkgcmVkaXJlY3RlZCB0byBJbkFwcEJyb3dzZXIub3BlbigpXCIpO1xuICAgICAgLy8gICB0aGlzLmJyb3dzZXIuY3JlYXRlKHVybCwgdGFyZ2V0LCBmZWF0dXJlcykuc2hvdygpO1xuICAgICAgLy8gICByZXR1cm4gd2luZG93O1xuICAgICAgLy8gfTtcbiAgICB9XG4gIH1cblxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVUcmFuc2xhdGUoKSB7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGkxOG4gLi4uJyk7XG5cbiAgICAvLyB0aGlzIGxhbmd1YWdlIHdpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSB0cmFuc2xhdGlvbiBpc24ndCBmb3VuZCBpbiB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5sYW5nKSB7XG5cbiAgICAgICAgLy8gZm9yY2UgJ2VuJyBhcyAnZW5fR0InXG4gICAgICAgIGlmIChldmVudC5sYW5nID09PSAnZW4nKSB7XG4gICAgICAgICAgZXZlbnQubGFuZyA9ICdlbl9HQic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25maWcgbW9tZW50IGxpYlxuICAgICAgICB0cnkge1xuICAgICAgICAgIG1vbWVudC5sb2NhbGUoZXZlbnQubGFuZyk7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBVc2UgbG9jYWxlIHsnICsgZXZlbnQubGFuZyArICd9Jyk7XG4gICAgICAgIH1cbiAgICAgICAgICAvLyBJZiBlcnJvciwgZmFsbGJhY2sgdG8gZW5cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgIG1vbWVudC5sb2NhbGUoJ2VuJyk7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIFVua25vd24gbG9jYWwgZm9yIG1vbWVudCBsaWIuIFVzaW5nIGRlZmF1bHQgW2VuXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlnIGRhdGUgYWRhcHRlclxuICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZShtb21lbnQubG9jYWxlKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmxvY2FsZSAmJiBkYXRhLmxvY2FsZSAhPT0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGRhdGEubG9jYWxlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFVzZSBhY2NvdW50J3MgbG9jYWxlLCB3aGVuIGFjY291bnQgaW5oZXJpdGFuY2UgZW5hYmxlZCBpbiBzZXR0aW5nc1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbi5zdWJzY3JpYmUoYWNjb3VudCA9PiB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zZXR0aW5ncy5hY2NvdW50SW5oZXJpdGFuY2UpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudExvY2FsZSA9IGFjY291bnQuc2V0dGluZ3MgJiYgYWNjb3VudC5zZXR0aW5ncy5sb2NhbGU7XG4gICAgICAgIGlmIChhY2NvdW50TG9jYWxlICYmIGFjY291bnRMb2NhbGUgIT09IHRoaXMuc2V0dGluZ3MubG9jYWxlKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5hcHBseSh7XG4gICAgICAgICAgICBsb2NhbGU6IGFjY291bnRMb2NhbGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZUNhY2hlKG9ubGluZT86IGJvb2xlYW4pIHtcbiAgICBvbmxpbmUgPSBpc05vdE5pbChvbmxpbmUpID8gb25saW5lIDogdGhpcy5jYWNoZS5pc09ubGluZSgpO1xuICAgIGNvbnN0IGNhY2hlVFRMID0gb25saW5lID8gMzYwMCAvKiAxaCAqLyA6IDM2MDAgKiAyNCAqIDMwOyAvKiAxIG1vbnRoICovXG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGNhY2hlIFtPS10ge29ubGluZTogJHtvbmxpbmV9fSwge3RpbWVUb0xpdmU6ICR7Y2FjaGVUVEwgLyAzNjAwfWh9LCB7b2ZmbGluZUludmFsaWRhdGU6IGZhbHNlfWApO1xuICAgIHRoaXMuY2FjaGUuc2V0RGVmYXVsdFRUTChjYWNoZVRUTCk7XG4gICAgdGhpcy5jYWNoZS5zZXRPZmZsaW5lSW52YWxpZGF0ZShmYWxzZSk7IC8vIERvIG5vdCBpbnZhbGlkYXRlIGNhY2hlIHdoZW4gb2ZmbGluZVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHN0b3JhZ2VSZWFkeSgpOiBQcm9taXNlPExvY2FsRm9yYWdlPiB7XG5cbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gU3RhcnRpbmcgc3RvcmFnZS4uLmApO1xuICAgIGNvbnN0IGZvcmFnZSA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWFkeSgpO1xuICAgIGNvbnN0IGRyaXZlciA9IGZvcmFnZS5kcml2ZXIoKTtcblxuICAgIGlmIChpc05pbChkcml2ZXIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIE5PIERSSVZFUiBERUZJTkVEIElOIFNUT1JBR0UuIExvY2FsIHN0b3JhZ2UgY2Fubm90IGJlIHVzZWQgIScpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmb3JhZ2UpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBzdG9yYWdlIFtPS10ge25hbWU6ICcke2ZvcmFnZS5jb25maWcoKS5uYW1lfScsIGRyaXZlcjogJyR7Zm9yYWdlLmRyaXZlcigpfScsIHNpemU6ICR7Zm9yYWdlLmNvbmZpZygpLnNpemV9YCk7XG4gICAgY29uc29sZS5kZWJ1ZyhgW3BsYXRmb3JtXSBTdG9yYWdlIHN1cHBvcnRzOiB7JHtmb3JhZ2UuV0VCU1FMfTogJHtmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLldFQlNRTCl9LCAke2ZvcmFnZS5JTkRFWEVEREJ9OiAke2ZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuSU5ERVhFRERCKX0sICR7Zm9yYWdlLkxPQ0FMU1RPUkFHRX06ICR7Zm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5MT0NBTFNUT1JBR0UpfX1gKTtcblxuICAgIHJldHVybiBmb3JhZ2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbWlncmF0ZVN0b3JhZ2UoZm9yYWdlOiBMb2NhbEZvcmFnZSkge1xuICAgIGNvbnN0IGNhbk1pZ3JhdGUgPSBmb3JhZ2UgJiZcbiAgICAgICgoZm9yYWdlLmRyaXZlcigpID09PSAnY29yZG92YVNRTGl0ZURyaXZlcicgJiYgKGZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuSU5ERVhFRERCKSB8fCBmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLldFQlNRTCkpKSB8fFxuICAgICAgIChmb3JhZ2UuZHJpdmVyKCkgPT09IGZvcmFnZS5XRUJTUUwgJiYgZm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5JTkRFWEVEREIpKSk7XG5cbiAgICBpZiAoIWNhbk1pZ3JhdGUpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc3Qgb2xkRm9yYWdlID0gZm9yYWdlLmNyZWF0ZUluc3RhbmNlKHtcbiAgICAgIG5hbWU6IGZvcmFnZS5jb25maWcoKS5uYW1lLFxuICAgICAgc3RvcmVOYW1lOiBmb3JhZ2UuY29uZmlnKCkuc3RvcmVOYW1lLFxuICAgICAgZHJpdmVyOiBbZm9yYWdlLklOREVYRUREQiwgZm9yYWdlLldFQlNRTF1cbiAgICB9KTtcblxuICAgIC8vIElGIGRhdGEgc3RvcmVkIGluIHRoZSBPTEQgc3RvcmFnZTogc3RhcnQgbWlncmF0aW9uXG4gICAgY29uc3Qga2V5cyA9IGF3YWl0IG9sZEZvcmFnZS5rZXlzKCk7XG4gICAgaWYgKGlzRW1wdHlBcnJheShrZXlzKSkge1xuICAgICAgLy8gRHJvcCB0aGUgb2xkIGluc3RhbmNlXG4gICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gRHJvcCBvbGQgc3RvcmFnZSB7bmFtZTogJyR7Zm9yYWdlLmNvbmZpZygpLm5hbWV9JywgZHJpdmVyOiAnJHtvbGRGb3JhZ2UuZHJpdmVyKCl9J31gKTtcbiAgICAgIGF3YWl0IG9sZEZvcmFnZS5kcm9wSW5zdGFuY2UoKTtcbiAgICB9XG4gICAgZWxzZSB7XG5cbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gU3RhcnRpbmcgc3RvcmFnZSBtaWdyYXRpb24uLi5gKTtcblxuICAgICAgY29uc3QgdG9hc3QgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ0lORk8uREFUQV9NSUdSQVRJT05fU1RBUlRFRCcsXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAwfSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBTdG9yYWdlVXRpbHMuY29weShvbGRGb3JhZ2UsIGZvcmFnZSwge2tleXMsIGRlbGV0ZUFmdGVyQ29weTogZmFsc2V9KTtcblxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBub3c7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdG9hc3QuZGlzbWlzcygpLCAgTWF0aC5tYXgoMjAwMCAtIGR1cmF0aW9uLCAwKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnSU5GTy5EQVRBX01JR1JBVElPTl9TVUNDRUVEJyxcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gU3RhcnRpbmcgc3RvcmFnZSBtaWdyYXRpb24gW09LXScpO1xuXG4gICAgICAgIC8vIERyb3AgdGhlIG9sZCBpbnN0YW5jZVxuICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gRHJvcCBvbGQgc3RvcmFnZSB7bmFtZTogJyR7Zm9yYWdlLmNvbmZpZygpLm5hbWV9JywgZHJpdmVyOiAnJHtvbGRGb3JhZ2UuZHJpdmVyKCl9J31gKTtcbiAgICAgICAgYXdhaXQgb2xkRm9yYWdlLmRyb3BJbnN0YW5jZSgpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIsIGVycik7XG4gICAgICAgIGF3YWl0IHRvYXN0LmRpc21pc3MoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdFUlJPUi5EQVRBX01JR1JBVElPTl9GQUlMRUQnLFxuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8SFRNTElvblRvYXN0RWxlbWVudD4ge1xuICAgIGlmICghdGhpcy50b2FzdENvbnRyb2xsZXIpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0b2FzdENvbnRyb2xsZXIgaW4gY29tcG9uZW50XFwncyBjb25zdHJ1Y3RvcicpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBvbldpbGxQcmVzZW50OiAodCkgPT4gcmVzb2x2ZSh0KVxuICAgICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uU3RhcnR1cEVycm9yKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gRmFpbGVkIHN0YXJ0aW5nIHRoZSBwbGF0Zm9ybSEgJywgZXJyKTtcbiAgICBsZXQgbWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnI7XG4gICAgY29uc3QgZGV0YWlsc01lc3NhZ2UgPSBlcnIgJiYgKGVyci5kZXRhaWxzICYmIGVyci5kZXRhaWxzLm1lc3NhZ2UgfHwgZXJyLmRldGFpbHMpO1xuICAgIC8vIFNldCBzcGVjaWZpYyBlcnJvciB3aGVuIEZpcmVmb3ggaXMgaW4gcHJpdmF0ZSBtb2RlIG9yIGhpc3RvcnkgbmV2ZXIgcmVtZW1iZXJlZCAoc2VlIE1hbnRpcyBJZnJlbWVyICM1NjQ0MSlcbiAgICBpZiAoZXJyLmNvZGUgPT09IDExICYmIHRoaXMuY2RrUGxhdGZvcm0uRklSRUZPWCkge1xuICAgICAgbWVzc2FnZSA9ICdFUlJPUi5GSVJFRk9YX05PX1NUT1JBR0UnO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2xhdGUpIHtcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQobWVzc2FnZSkudG9Qcm9taXNlKCk7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCB7Y29kZTogJHtlcnIuY29kZX19YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYEZhdGFsIGVycm9yOiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXFxuXFxue2NvZGU6ICR7ZXJyICYmIGVyci5jb2RlIHx8ICdudWxsJ30sIG1lc3NhZ2U6IFwiJHttZXNzYWdlfVwifWA7XG4gICAgfVxuICAgIGlmICh0aGlzLnRvYXN0Q29udHJvbGxlcikge1xuICAgICAgaWYgKGRldGFpbHNNZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYDxici8+PHNtYWxsPiR7ZGV0YWlsc01lc3NhZ2V9PC9zbWFsbD5gO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBkdXJhdGlvbjogLTEsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHdpbmRvdykge1xuICAgICAgaWYgKGRldGFpbHNNZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYFxcblxcbntjYXVzZTogXCIke2RldGFpbHNNZXNzYWdlfVwifWA7XG4gICAgICB9XG4gICAgICB3aW5kb3cuYWxlcnQobWVzc2FnZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmRldGFpbHMpIGNvbnNvbGUuZXJyb3IoJ2NhdXNlJywgZXJyLmRldGFpbHMpO1xuICAgIH1cbiAgfVxufVxuXG4iXX0=
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQWdCLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLElBQUksV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFtQixRQUFRLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFB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T0FBTyxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDO0tBQUE7Ozs7WUExWkYsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O1lBOUJ4QixRQUFRO1lBU0ksV0FBVztZQVRiLGVBQWU7WUFpQnpCLGdCQUFnQjtZQVFoQixpQkFBaUI7WUFYakIsZUFBZTtZQVJmLG9CQUFvQjtZQUxMLGNBQWM7WUFrQjdCLGNBQWM7WUFJZCxhQUFhO1lBaEJiLFlBQVk7WUFNWixPQUFPO1lBTFAsYUFBYTs0Q0F3RGhCLE1BQU0sU0FBQyxXQUFXO1lBNURmLFNBQVMsdUJBNkRaLFFBQVE7WUE1REwsUUFBUSx1QkE2RFgsUUFBUTtZQS9ETCxZQUFZLHVCQWdFZixRQUFRO1lBeERMLFlBQVksdUJBeURmLFFBQVE7WUExQ0wsVUFBVSx1QkEyQ2IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7QXV0aFRva2VuVHlwZSwgTmV0d29ya1NlcnZpY2V9IGZyb20gJy4vbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7UGxhdGZvcm1zfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge1NwbGFzaFNjcmVlbn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9zcGxhc2gtc2NyZWVuL25neCc7XG5pbXBvcnQge1N0YXR1c0Jhcn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9zdGF0dXMtYmFyL25neCc7XG5pbXBvcnQge0tleWJvYXJkfSBmcm9tICdAaW9uaWMtbmF0aXZlL2tleWJvYXJkL25neCc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7QXVkaW9Qcm92aWRlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7UGxhdGZvcm0gYXMgQ2RrUGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7SW5BcHBCcm93c2VyfSBmcm9tICdAaW9uaWMtbmF0aXZlL2luLWFwcC1icm93c2VyL25neCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFua30gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7RW50aXRpZXNTdG9yYWdlfSBmcm9tICcuL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7U3RvcmFnZVV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RvcmFnZS51dGlscyc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7dGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHtNb21lbnREYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHtEb3dubG9hZGVyLCBEb3dubG9hZFJlcXVlc3QsIE5vdGlmaWNhdGlvblZpc2liaWxpdHl9IGZyb20gJ0Bpb25pYy1uYXRpdmUvZG93bmxvYWRlci9uZ3gnO1xuXG5jb25zdCBtb21lbnQgPSBtb21lbnRJbXBvcnRlZDtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3RhcnRlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9zdGFydFByb21pc2U6IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY29yZG92YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYW5kcm9pZDogYm9vbGVhbjtcblxuICB0b3VjaFVpOiBib29sZWFuO1xuXG4gIGdldCBzdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGVkO1xuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fbW9iaWxlKSA/IHRoaXMuX21vYmlsZSA6IHRoaXMucGxhdGZvcm0uaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBjZGtQbGF0Zm9ybTogQ2RrUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIGVudGl0aWVzU3RvcmFnZTogRW50aXRpZXNTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByaXZhdGUgYXVkaW9Qcm92aWRlcjogQXVkaW9Qcm92aWRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzdGF0dXNCYXI6IFN0YXR1c0JhcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGtleWJvYXJkOiBLZXlib2FyZCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNwbGFzaFNjcmVlbjogU3BsYXNoU2NyZWVuLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgYnJvd3NlcjogSW5BcHBCcm93c2VyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZG93bmxvYWRlcjogRG93bmxvYWRlcixcbiAgKSB7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBpcyhwbGF0Zm9ybU5hbWU6IFBsYXRmb3Jtcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F5IGlmIG9wZW5lZCBoYXMgYmVlbiBvcGVuZWQgZnJvbSBhIHdlYiBicm93c2VyIChhbmQgTk9UIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHApLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8ga25vd24gaWYgdGhlcmUgaXMgY29yZG92YSBmZWF0dXJlc1xuICAgKi9cbiAgaXNXZWJPckRlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGV3ZWInKTtcbiAgfVxuXG4gIGlzQW5kcm9pZENvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FuZHJvaWQgJiYgdGhpcy5fY29yZG92YTtcbiAgfVxuXG4gIGdldCBjYW5Eb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRvd25sb2FkZXI7XG4gIH1cblxuICB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtLndpZHRoKCk7XG4gIH1cblxuICBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5oZWlnaHQoKTtcbiAgfVxuXG4gIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGFydFByb21pc2UpIHJldHVybiB0aGlzLl9zdGFydFByb21pc2U7XG4gICAgaWYgKHRoaXMuX3N0YXJ0ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuXG4gICAgdGhpcy5fc3RhcnRQcm9taXNlID0gdGhpcy5wbGF0Zm9ybS5yZWFkeSgpXG4gICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlID0gdGhpcy5wbGF0Zm9ybS5pcygnbW9iaWxlJyk7XG4gICAgICAgIHRoaXMuX2NvcmRvdmEgPSB0aGlzLnBsYXRmb3JtLmlzKCdjb3Jkb3ZhJyk7XG4gICAgICAgIHRoaXMuX2FuZHJvaWQgPSB0aGlzLnBsYXRmb3JtLmlzKCdhbmRyb2lkJyk7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVDb3Jkb3ZhUGx1Z2lucyh0aGlzLl9tb2JpbGUpO1xuICAgICAgICB0aGlzLnRvdWNoVWkgPSB0aGlzLl9tb2JpbGUgfHwgdGhpcy5wbGF0Zm9ybS5pcygndGFibGV0JykgfHwgdGhpcy5wbGF0Zm9ybS5pcygncGhhYmxldCcpO1xuXG4gICAgICAgIC8vIEZvcmNlIG1vYmlsZSBpbiBzZXR0aW5nc1xuICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5tb2JpbGUgPSB0aGlzLl9tb2JpbGU7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy50b3VjaFVpID0gdGhpcy50b3VjaFVpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmVUcmFuc2xhdGUoKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHRoaXMuc3RvcmFnZVJlYWR5KCkpXG4gICAgLnRoZW4oKGZvcmFnZSkgPT4gdGhpcy5taWdyYXRlU3RvcmFnZShmb3JhZ2UpKVxuICAgIC50aGVuKCgpID0+IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZW50aXRpZXNTdG9yYWdlLnJlYWR5KCksXG4gICAgICB0aGlzLmNhY2hlLnJlYWR5KCkudGhlbigoKSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKCkpLFxuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5yZWFkeSgpLFxuICAgICAgdGhpcy5hdWRpb1Byb3ZpZGVyLnJlYWR5KClcbiAgICBdKSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybSBbT0tdIHttb2JpbGU6ICR7dGhpcy5fbW9iaWxlfSwgdG91Y2hVaTogJHt0aGlzLnRvdWNoVWl9LCBkb3dubG9hZGVyOiAke3RoaXMuY2FuRG93bmxvYWR9IGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgICAvLyBVcGRhdGUgY2FjaGUgY29uZmlndXJhdGlvbiB3aGVuIG5ldHdvcmsgY2hhbmdlZFxuICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gdGhpcy5jb25maWd1cmVDYWNoZSh0eXBlICE9PSAnbm9uZScpKTtcblxuICAgICAgLy8gVXBkYXRlIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWdcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKGNvbmZpZyA9PiBjb25maWc/LmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlKSxcbiAgICAgICAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh0b2tlblR5cGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBVc2luZyBhdXRoIHRva2VuIHR5cGUgeyR7dG9rZW5UeXBlfX1gKTtcbiAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIFdhaXQgMSBtb3JlIHNlY29uZHMsIGJlZm9yZSBoaWRpbmcgdGhlIHNwbGFzaCBzY3JlZW5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zcGxhc2hTY3JlZW4pIHRoaXMuc3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAvLyBQbGF5IHN0YXJ0dXAgc291bmRcbiAgICAgICAgdGhpcy5hdWRpb1Byb3ZpZGVyLnBsYXlTdGFydHVwU291bmQoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH0pXG4gICAgICAvLyBNYW5hZ2UgZXJyb3JcbiAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5vblN0YXJ0dXBFcnJvcihlcnIpKTtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgcGxhdGZvcm0gaXMgcmVhZHkuPGJyLz5cbiAgICogSW1wb3J0YW50OiB0aGlzIHdpbGwgTk9UIHN0YXJ0IHRoZSBwbGF0Zm9ybSwgaGFzIGl0IHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBBcHBDb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHJlYWR5KG9wdHM/OiB7XG4gICAgY2hlY2tQZXJpb2Q6IG51bWJlcjtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcGVyaW9kID0gb3B0cyAmJiBvcHRzLmNoZWNrUGVyaW9kIHx8IDMwMDtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHJldHVybiB0aW1lcihwZXJpb2QsIHBlcmlvZClcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBGb3IgREVCVUcgOlxuICAgICAgICAvL3RhcCgoKSA9PiB0aGlzLl9kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKFwiV2FpdGluZyBwbGF0Zm9ybSByZWFkeS4uLlwiKSksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9zdGFydGVkKSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIG9wZW4odXJsOiBzdHJpbmcsIHRhcmdldD86IHN0cmluZywgZmVhdHVyZXM/OiBzdHJpbmcsIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIE9wZW5pbmcgbGluazogJHt1cmx9YCk7XG4gICAgaWYgKHRoaXMuYnJvd3NlciAmJiB0aGlzLl9tb2JpbGUpIHtcbiAgICAgIHRoaXMuYnJvd3Nlci5jcmVhdGUodXJsLCB0YXJnZXQsIGZlYXR1cmVzKS5zaG93KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgd2luZG93Lm9wZW4odXJsLCB0YXJnZXQsIGZlYXR1cmVzLCByZXBsYWNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChyZXF1ZXN0OiB7dXJpOiBzdHJpbmc7IGZpbGVuYW1lPzogc3RyaW5nIH0gJiBQYXJ0aWFsPERvd25sb2FkUmVxdWVzdD4gKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwncmVxdWVzdFxcJyBvciBcXCdyZXF1ZXN0LnVyaVxcJycpO1xuICAgIGlmICh0aGlzLmRvd25sb2FkZXIpIHtcbiAgICAgIHJlcXVlc3QgPSB7XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIHRpdGxlOiByZXF1ZXN0LmZpbGVuYW1lIHx8ICcnLFxuICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICBkZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0Rpcjoge1xuICAgICAgICAgIGRpclR5cGU6ICdEb3dubG9hZHMnLFxuICAgICAgICAgIHN1YlBhdGg6IHJlcXVlc3QuZmlsZW5hbWUgfHwgcmVxdWVzdC50aXRsZSB8fCAnJyxcbiAgICAgICAgICAuLi5yZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gYXdhaXQgdGhpcy5kb3dubG9hZGVyLmRvd25sb2FkKHJlcXVlc3QpO1xuICAgICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gRmlsZSBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZCBhdDonICsgbG9jYXRpb24pXG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgIH1cbiAgICAgIGNhdGNoKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIEVycm9yIHdoaWxlIGRvd25sb2FkaW5nOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIChubyBDb3Jkb3ZhKVxuICAgIC8vIFdlYiBtb2RlOiBvcGVuIFVSSSB1c2luZyB0aGUgYnJvd3NlclxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIENhbm5vdCB1c2UgQ29yZG92YSBkb3dubG9hZGVyOiB1c2luZyBicm93c2VyIG9wZW4oKScpO1xuICAgICAgdGhpcy5vcGVuKHJlcXVlc3QudXJpLCAnX3N5c3RlbScsICdsb2NhdGlvbj1ubycsIHRydWUpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBjb25maWd1cmVDb3Jkb3ZhUGx1Z2lucyhtb2JpbGU6IGJvb2xlYW4pIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgQ29yZG92YSBwbHVnaW5zLi4uJyk7XG5cbiAgICBpZiAodGhpcy5zdGF0dXNCYXIpIHtcbiAgICAgIHRoaXMuc3RhdHVzQmFyLnN0eWxlRGVmYXVsdCgpO1xuICAgICAgdGhpcy5zdGF0dXNCYXIub3ZlcmxheXNXZWJWaWV3KGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2V5Ym9hcmQpIHtcbiAgICAgIHRoaXMua2V5Ym9hcmQuaGlkZUZvcm1BY2Nlc3NvcnlCYXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgdG8gdXNlIEluQXBwQnJvd3NlciBpbnN0ZWFkIG9mIGRlZmF1bHQgd2luZG93Lm9wZW4oKVxuICAgIGlmICh0aGlzLmJyb3dzZXIpIHtcbiAgICAgIC8vIEZJWE1FOiB0aGlzIGNyZWF0ZSBhIGluZmluaXRlIGxvb3AgKGUuZy4gd2hlbiBkb3dubG9hZGluZyBhbiBleHRyYWN0aW9uIGZpbGUpXG4gICAgICAvLyB3aW5kb3cub3BlbiA9ICh1cmw/OiBzdHJpbmcsIHRhcmdldD86IHN0cmluZywgZmVhdHVyZXM/OiBzdHJpbmcsIHJlcGxhY2U/OiBib29sZWFuKSA9PiB7XG4gICAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJbcGxhdGZvcm1dIENhbGwgdG8gd2luZG93Lm9wZW4oKSByZWRpcmVjdGVkIHRvIEluQXBwQnJvd3Nlci5vcGVuKClcIik7XG4gICAgICAvLyAgIHRoaXMuYnJvd3Nlci5jcmVhdGUodXJsLCB0YXJnZXQsIGZlYXR1cmVzKS5zaG93KCk7XG4gICAgICAvLyAgIHJldHVybiB3aW5kb3c7XG4gICAgICAvLyB9O1xuICAgIH1cbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZVRyYW5zbGF0ZSgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgaTE4biAuLi4nKTtcblxuICAgIC8vIHRoaXMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgd2hlbiBhIHRyYW5zbGF0aW9uIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcblxuICAgIC8vIFdoZW4gbG9jYWxlIGNoYW5nZXMsIGFwcGx5IHRvIGRhdGUgYWRhcHRlclxuICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmxhbmcpIHtcblxuICAgICAgICAvLyBmb3JjZSAnZW4nIGFzICdlbl9HQidcbiAgICAgICAgaWYgKGV2ZW50LmxhbmcgPT09ICdlbicpIHtcbiAgICAgICAgICBldmVudC5sYW5nID0gJ2VuX0dCJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbmZpZyBtb21lbnQgbGliXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9tZW50LmxvY2FsZShldmVudC5sYW5nKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIFVzZSBsb2NhbGUgeycgKyBldmVudC5sYW5nICsgJ30nKTtcbiAgICAgICAgfVxuICAgICAgICAgIC8vIElmIGVycm9yLCBmYWxsYmFjayB0byBlblxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbW9tZW50LmxvY2FsZSgnZW4nKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gVW5rbm93biBsb2NhbCBmb3IgbW9tZW50IGxpYi4gVXNpbmcgZGVmYXVsdCBbZW5dJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWcgZGF0ZSBhZGFwdGVyXG4gICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKG1vbWVudC5sb2NhbGUoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNldHRpbmdzLm9uQ2hhbmdlLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubG9jYWxlICYmIGRhdGEubG9jYWxlICE9PSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZykge1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoZGF0YS5sb2NhbGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVXNlIGFjY291bnQncyBsb2NhbGUsIHdoZW4gYWNjb3VudCBpbmhlcml0YW5jZSBlbmFibGVkIGluIHNldHRpbmdzXG4gICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZShhY2NvdW50ID0+IHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNldHRpbmdzLmFjY291bnRJbmhlcml0YW5jZSkge1xuICAgICAgICBjb25zdCBhY2NvdW50TG9jYWxlID0gYWNjb3VudC5zZXR0aW5ncyAmJiBhY2NvdW50LnNldHRpbmdzLmxvY2FsZTtcbiAgICAgICAgaWYgKGFjY291bnRMb2NhbGUgJiYgYWNjb3VudExvY2FsZSAhPT0gdGhpcy5zZXR0aW5ncy5sb2NhbGUpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmFwcGx5KHtcbiAgICAgICAgICAgIGxvY2FsZTogYWNjb3VudExvY2FsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlQ2FjaGUob25saW5lPzogYm9vbGVhbikge1xuICAgIG9ubGluZSA9IGlzTm90TmlsKG9ubGluZSkgPyBvbmxpbmUgOiB0aGlzLmNhY2hlLmlzT25saW5lKCk7XG4gICAgY29uc3QgY2FjaGVUVEwgPSBvbmxpbmUgPyAzNjAwIC8qIDFoICovIDogMzYwMCAqIDI0ICogMzA7IC8qIDEgbW9udGggKi9cbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ29uZmlndXJpbmcgY2FjaGUgW09LXSB7b25saW5lOiAke29ubGluZX19LCB7dGltZVRvTGl2ZTogJHtjYWNoZVRUTCAvIDM2MDB9aH0sIHtvZmZsaW5lSW52YWxpZGF0ZTogZmFsc2V9YCk7XG4gICAgdGhpcy5jYWNoZS5zZXREZWZhdWx0VFRMKGNhY2hlVFRMKTtcbiAgICB0aGlzLmNhY2hlLnNldE9mZmxpbmVJbnZhbGlkYXRlKGZhbHNlKTsgLy8gRG8gbm90IGludmFsaWRhdGUgY2FjaGUgd2hlbiBvZmZsaW5lXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RvcmFnZVJlYWR5KCk6IFByb21pc2U8TG9jYWxGb3JhZ2U+IHtcblxuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBzdG9yYWdlLi4uYCk7XG4gICAgY29uc3QgZm9yYWdlID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlYWR5KCk7XG4gICAgY29uc3QgZHJpdmVyID0gZm9yYWdlLmRyaXZlcigpO1xuXG4gICAgaWYgKGlzTmlsKGRyaXZlcikpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gTk8gRFJJVkVSIERFRklORUQgSU4gU1RPUkFHRS4gTG9jYWwgc3RvcmFnZSBjYW5ub3QgYmUgdXNlZCAhJyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZvcmFnZSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHN0b3JhZ2UgW09LXSB7bmFtZTogJyR7Zm9yYWdlLmNvbmZpZygpLm5hbWV9JywgZHJpdmVyOiAnJHtmb3JhZ2UuZHJpdmVyKCl9Jywgc2l6ZTogJHtmb3JhZ2UuY29uZmlnKCkuc2l6ZX1gKTtcbiAgICBjb25zb2xlLmRlYnVnKGBbcGxhdGZvcm1dIFN0b3JhZ2Ugc3VwcG9ydHM6IHske2ZvcmFnZS5XRUJTUUx9OiAke2ZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuV0VCU1FMKX0sICR7Zm9yYWdlLklOREVYRUREQn06ICR7Zm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5JTkRFWEVEREIpfSwgJHtmb3JhZ2UuTE9DQUxTVE9SQUdFfTogJHtmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLkxPQ0FMU1RPUkFHRSl9fWApO1xuXG4gICAgcmV0dXJuIGZvcmFnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBtaWdyYXRlU3RvcmFnZShmb3JhZ2U6IExvY2FsRm9yYWdlKSB7XG4gICAgY29uc3QgY2FuTWlncmF0ZSA9IGZvcmFnZSAmJlxuICAgICAgKChmb3JhZ2UuZHJpdmVyKCkgPT09ICdjb3Jkb3ZhU1FMaXRlRHJpdmVyJyAmJiAoZm9yYWdlLnN1cHBvcnRzKGZvcmFnZS5JTkRFWEVEREIpIHx8IGZvcmFnZS5zdXBwb3J0cyhmb3JhZ2UuV0VCU1FMKSkpIHx8XG4gICAgICAgKGZvcmFnZS5kcml2ZXIoKSA9PT0gZm9yYWdlLldFQlNRTCAmJiBmb3JhZ2Uuc3VwcG9ydHMoZm9yYWdlLklOREVYRUREQikpKTtcblxuICAgIGlmICghY2FuTWlncmF0ZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBvbGRGb3JhZ2UgPSBmb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgbmFtZTogZm9yYWdlLmNvbmZpZygpLm5hbWUsXG4gICAgICBzdG9yZU5hbWU6IGZvcmFnZS5jb25maWcoKS5zdG9yZU5hbWUsXG4gICAgICBkcml2ZXI6IFtmb3JhZ2UuSU5ERVhFRERCLCBmb3JhZ2UuV0VCU1FMXVxuICAgIH0pO1xuXG4gICAgY29uc3Qga2V5cyA9IGF3YWl0IG9sZEZvcmFnZS5rZXlzKCk7XG5cbiAgICAvLyBObyBkYXRhIGluIHRoZSBvZGwgc3RvcmFnZTogc2tpcCBtaWdyYXRpb25cbiAgICBpZiAoaXNFbXB0eUFycmF5KGtleXMpKSB7XG4gICAgICAvLyBEcm9wIHRoZSBvbGQgaW5zdGFuY2UgKG5vdCBuZWVkIGFueW1vcmUpXG4gICAgICBjb25zb2xlLmRlYnVnKGBbcGxhdGZvcm1dIE9sZCBzdG9yYWdlIGlzIGVtcHR5OiBkcm9wcGluZyB1bnVzZWQgaW5zdGFuY2Uge25hbWU6ICcke2ZvcmFnZS5jb25maWcoKS5uYW1lfScsIGRyaXZlcjogJyR7b2xkRm9yYWdlLmRyaXZlcigpfSd9YCk7XG4gICAgICBhd2FpdCBvbGRGb3JhZ2UuZHJvcEluc3RhbmNlKCk7XG4gICAgfVxuICAgIC8vIElGIHNvbWUgZGF0YSBzdG9yZWQgaW4gdGhlIE9MRCBzdG9yYWdlOiBzdGFydCBtaWdyYXRpb25cbiAgICBlbHNlIHtcblxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBTdGFydGluZyBzdG9yYWdlIG1pZ3JhdGlvbi4uLmApO1xuXG4gICAgICBjb25zdCB0b2FzdCA9IGF3YWl0IHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnSU5GTy5EQVRBX01JR1JBVElPTl9TVEFSVEVEJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMDB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFN0b3JhZ2VVdGlscy5jb3B5KG9sZEZvcmFnZSwgZm9yYWdlLCB7a2V5cywgZGVsZXRlQWZ0ZXJDb3B5OiBmYWxzZX0pO1xuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIG5vdztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0b2FzdC5kaXNtaXNzKCksICBNYXRoLm1heCgyMDAwIC0gZHVyYXRpb24sIDApKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdJTkZPLkRBVEFfTUlHUkFUSU9OX1NVQ0NFRUQnLFxuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBzdG9yYWdlIG1pZ3JhdGlvbiBbT0tdJyk7XG5cbiAgICAgICAgLy8gRHJvcCB0aGUgb2xkIGluc3RhbmNlXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBEcm9wIG9sZCBzdG9yYWdlIHtuYW1lOiAnJHtmb3JhZ2UuY29uZmlnKCkubmFtZX0nLCBkcml2ZXI6ICcke29sZEZvcmFnZS5kcml2ZXIoKX0nfWApO1xuICAgICAgICBhd2FpdCBvbGRGb3JhZ2UuZHJvcEluc3RhbmNlKCk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciwgZXJyKTtcbiAgICAgICAgYXdhaXQgdG9hc3QuZGlzbWlzcygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ0VSUk9SLkRBVEFfTUlHUkFUSU9OX0ZBSUxFRCcsXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKTogUHJvbWlzZTxIVE1MSW9uVG9hc3RFbGVtZW50PiB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnRcXCdzIGNvbnN0cnVjdG9yJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiByZXNvbHZlKHQpXG4gICAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25TdGFydHVwRXJyb3IoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBGYWlsZWQgc3RhcnRpbmcgdGhlIHBsYXRmb3JtISAnLCBlcnIpO1xuICAgIGxldCBtZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycjtcbiAgICBjb25zdCBkZXRhaWxzTWVzc2FnZSA9IGVyciAmJiAoZXJyLmRldGFpbHMgJiYgZXJyLmRldGFpbHMubWVzc2FnZSB8fCBlcnIuZGV0YWlscyk7XG4gICAgLy8gU2V0IHNwZWNpZmljIGVycm9yIHdoZW4gRmlyZWZveCBpcyBpbiBwcml2YXRlIG1vZGUgb3IgaGlzdG9yeSBuZXZlciByZW1lbWJlcmVkIChzZWUgTWFudGlzIElmcmVtZXIgIzU2NDQxKVxuICAgIGlmIChlcnIuY29kZSA9PT0gMTEgJiYgdGhpcy5jZGtQbGF0Zm9ybS5GSVJFRk9YKSB7XG4gICAgICBtZXNzYWdlID0gJ0VSUk9SLkZJUkVGT1hfTk9fU1RPUkFHRSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZSkge1xuICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldChtZXNzYWdlKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIHtjb2RlOiAke2Vyci5jb2RlfX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBgRmF0YWwgZXJyb3I6IFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci5cXG5cXG57Y29kZTogJHtlcnIgJiYgZXJyLmNvZGUgfHwgJ251bGwnfSwgbWVzc2FnZTogXCIke21lc3NhZ2V9XCJ9YDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9hc3RDb250cm9sbGVyKSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgPGJyLz48c21hbGw+JHtkZXRhaWxzTWVzc2FnZX08L3NtYWxsPmA7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIGR1cmF0aW9uOiAtMSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBtZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAod2luZG93KSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgXFxuXFxue2NhdXNlOiBcIiR7ZGV0YWlsc01lc3NhZ2V9XCJ9YDtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5hbGVydChtZXNzYWdlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuZGV0YWlscykgY29uc29sZS5lcnJvcignY2F1c2UnLCBlcnIuZGV0YWlscyk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==