@skyux/docs-tools 6.0.0-beta.6 → 6.0.0-beta.9

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.
@@ -201,6 +201,7 @@ export class SkyDocsTypeDocAdapterService {
201
201
  name: this.getPropertyName(child),
202
202
  type: this.getTypeDefinition(child),
203
203
  isStatic: !!child.flags?.isStatic,
204
+ parentName: entry.name,
204
205
  };
205
206
  // Comments for methods are stored in a different location.
206
207
  const comment = child.signatures[0].comment;
@@ -292,8 +293,11 @@ export class SkyDocsTypeDocAdapterService {
292
293
  definition.unionTypes = child.type.types.map((t) => this.getTypeDefinition({ type: t }));
293
294
  }
294
295
  // Convert reflection types.
295
- if (child.type.type === 'reflection') {
296
- const declaration = child.type.declaration;
296
+ if (child.type.type === 'reflection' ||
297
+ child.type.elementType?.type === 'reflection') {
298
+ const declaration = child.type.elementType?.type === 'reflection'
299
+ ? child.type.elementType.declaration
300
+ : child.type.declaration;
297
301
  /*istanbul ignore else */
298
302
  if (declaration) {
299
303
  if (declaration.signatures) {
@@ -519,4 +523,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
519
523
  }], ctorParameters: function () { return [{ type: i1.SkyDocsTypeDefinitionsProvider, decorators: [{
520
524
  type: Optional
521
525
  }] }]; } });
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb2NzLXRvb2xzL3NyYy9tb2R1bGVzL3R5cGUtZGVmaW5pdGlvbnMvdHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnRHJELE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDOzs7QUFFckM7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ3NCLHVCQUF3RDtRQUF4RCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWlDO0lBQzNFLENBQUM7SUFFRyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUMxQyxNQUFNLFVBQVUsR0FBMkI7WUFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUM5QjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDcEM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU0scUJBQXFCLENBQzFCLEtBQW1CO1FBRW5CLE1BQU0sVUFBVSxHQUErQjtZQUM3QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUNsQyxDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEQsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDdkMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FDdEMsQ0FBQztRQUNGLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUMxQixVQUFVLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztTQUM5QztRQUVELE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ3ZDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksS0FBSyxPQUFPLENBQ3JDLENBQUM7UUFDRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsVUFBVSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7U0FDOUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU0sdUJBQXVCLENBQzVCLEtBQW1CO1FBRW5CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBaUM7WUFDL0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLE9BQU87WUFDUCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0MsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixLQUFtQjtRQUVuQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQStCO1lBQzdDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsVUFBVTtTQUNYLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FDckQsS0FBSyxDQUFDLGFBQWEsQ0FDcEIsQ0FBQztRQUNGLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN6QixVQUFVLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztTQUM1QztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFtQjtRQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDcEUsTUFBTSxVQUFVLEdBQTBCO1lBQ3hDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsZUFBZTtTQUNoQixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU0scUJBQXFCLENBQzFCLEtBQW1CO1FBRW5CLE1BQU0sVUFBVSxHQUErQjtZQUM3QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7Z0JBQzNCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUM7U0FDSCxDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVTtZQUNoQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDOUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2xCLENBQUM7UUFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FDckQsS0FBSyxDQUFDLGFBQWEsQ0FDcEIsQ0FBQztRQUNGLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN6QixVQUFVLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztTQUM1QztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBbUI7UUFDckMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzFELE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLGVBQWU7aUJBQ1osS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztZQUMzQixDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLGtCQUFrQixDQUN4QixLQUFtQjtRQUVuQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVE7YUFDL0IsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FDckU7YUFDQSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNiLElBQUksVUFBVSxHQUFtQztnQkFDL0MsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztnQkFDakMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7YUFDcEMsQ0FBQztZQUNGLElBQUksWUFBb0IsQ0FBQztZQUV6QiwyR0FBMkc7WUFDM0csSUFDRSxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVU7Z0JBQy9CLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTO2dCQUN6QixDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDakU7Z0JBQ0EsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXBELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRWpELElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBRW5FLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFFakQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDaEQsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNyRDtnQkFFRCxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUVuRSxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUVoRCxVQUFVLENBQUMsVUFBVTt3QkFDbkIsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNwRCxZQUFZLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNyRTtxQkFBTTtvQkFDTCxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ2xELFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDdEQ7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLElBQW9DLENBQUM7Z0JBQ3pDLElBQ0UsS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVO29CQUMvQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUztvQkFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDO29CQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUM1QztvQkFDQSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDN0MsQ0FBQztvQkFFRixVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQzlDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzlDO2dCQUVELElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFMUMsVUFBVSxDQUFDLFVBQVU7b0JBQ25CLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFFakQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFN0MsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLFVBQVUsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO2FBQ3hDO1lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFJLFNBQVMsRUFBRTtnQkFDYixVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzthQUNsQztZQUVELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUMzQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDckMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUM5QyxDQUFDO2dCQUNGLElBQUksV0FBVyxFQUFFO29CQUNmLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMzQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsS0FBSyx1QkFBdUIsQ0FDaEUsQ0FBQztvQkFDRixrQkFBa0I7b0JBQ2xCLDBCQUEwQjtvQkFDMUIsSUFBSSxTQUFTLEVBQUU7d0JBQ2IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQzlDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQzdDLENBQUM7d0JBQ0YsSUFBSSxhQUFhLEVBQUU7NEJBQ2pCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FDM0MsYUFBYSxDQUFDLE9BQU8sQ0FDdEIsQ0FBQzs0QkFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7eUJBQzNEO3FCQUNGO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBbUI7UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRO2FBQzNCLE1BQU0sQ0FDTCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsS0FBSyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUNwRTthQUNBLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2IsTUFBTSxVQUFVLEdBQWlDO2dCQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTthQUNsQyxDQUFDO1lBRUYsMkRBQTJEO1lBQzNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUU3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQ3JELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUNsQyxDQUFDO1lBQ0YsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFO2dCQUN6QixVQUFVLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQzthQUM1QztZQUVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsS0FBbUI7UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQzVDLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLFdBQVcsR0FDZixLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVCLElBQUksSUFBb0MsQ0FBQztZQUN6QyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDaEUsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDM0M7WUFDRCxNQUFNLFVBQVUsR0FBdUM7Z0JBQ3JELFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVO2dCQUNwRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2FBQ3BDLENBQUM7WUFFRixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTdDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVYLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUU1RSxvREFBb0Q7UUFDcEQsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDNUMsTUFBTSxVQUFVLEdBQXVDO2dCQUNyRCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO2dCQUN6QixJQUFJLEVBQUU7b0JBQ0osY0FBYyxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxjQUFjLENBQUM7aUJBQ2pFO2FBQ0YsQ0FBQztZQUVGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsS0FBbUI7UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQyxNQUFNLFVBQVUsR0FBdUM7Z0JBQ3JELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTthQUNqQixDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUU3QyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUF3QjtRQUNoRCxJQUFJLFVBQWlDLENBQUM7UUFFdEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNwQyxRQUFRLFVBQVUsRUFBRTtZQUNsQixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO29CQUN0QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwRTtnQkFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkQsS0FBSyxRQUFRO2dCQUNYLFVBQVUsR0FBRztvQkFDWCxhQUFhLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUM1QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDbkM7b0JBQ0QsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDL0IsQ0FBQztnQkFFRixPQUFPLFVBQVUsQ0FBQztZQUVwQjtnQkFDRSxJQUFJLElBQUksR0FDTixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBRXRFLFVBQVUsR0FBRztvQkFDWCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO2lCQUN0QixDQUFDO2dCQUVGLElBQUksSUFBSSxFQUFFO29CQUNSLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUN4QjtnQkFFRCxTQUFTO2dCQUNULElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ3BCLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ3BDLENBQUM7aUJBQ0g7Z0JBRUQsNEJBQTRCO2dCQUM1QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtvQkFDcEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7b0JBQzNDLHlCQUF5QjtvQkFDekIsSUFBSSxXQUFXLEVBQUU7d0JBQ2YsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFOzRCQUMxQixVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDeEQsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQ25DLENBQUM7eUJBQ0g7NkJBQU0sSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFOzRCQUNyQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDOzRCQUNsRCxVQUFVLENBQUMsY0FBYztnQ0FDdkIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUNwRCxDQUFDLDBCQUEwQjs2QkFBTSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUU7NEJBQzFELFVBQVUsQ0FBQyxXQUFXLEdBQUc7Z0NBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUM7b0NBQ3RDLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUTtpQ0FDL0IsQ0FBQzs2QkFDSCxDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2dCQUVELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO29CQUN0QyxVQUFVLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ3RFO2dCQUVELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQzVCLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUN4RCxLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7aUJBQ0g7Z0JBRUQsT0FBTyxVQUFVLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQzdCLGFBQStCLEVBQy9CLFVBQThCO1FBRTlCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFO1lBQzdCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLFVBQVUsR0FDZCxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU5RCxNQUFNLFNBQVMsR0FBK0I7Z0JBQzVDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO2dCQUNyRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7YUFDaEMsQ0FBQztZQUVGLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtnQkFDOUIsU0FBUyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7YUFDdkM7WUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUMxQztZQUVELElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFDeEIsU0FBUyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7YUFDekM7WUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTywwQkFBMEIsQ0FDaEMsVUFBdUI7UUFFdkIsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDNUMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE9BQU8sVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNuRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxhQUErQixFQUMvQixJQUF3QjtRQUV4QixNQUFNLFVBQVUsR0FBbUM7WUFDakQsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7U0FDbEQsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQ3BDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLDJCQUEyQixDQUNqQyxTQUEyQjtRQUUzQixPQUFPO1lBQ0wsR0FBRyxFQUFFO2dCQUNILElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ2xDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtZQUNELElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1NBQ3hDLENBQUM7SUFDSixDQUFDO0lBRU8sMkJBQTJCLENBQ2pDLGNBQXNDO1FBRXRDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sVUFBVSxHQUFtQztnQkFDakQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQ3JCLENBQUM7WUFFRixJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO29CQUN2QyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7aUJBQ3JCLENBQUMsQ0FBQzthQUNKO1lBRUQsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQXVCO1FBQzVDLElBQUksV0FBbUIsQ0FBQztRQUN4QixJQUFJLG1CQUFtQixHQUFXLFFBQVEsQ0FBQztRQUMzQyxJQUFJLGtCQUEwQixDQUFDO1FBQy9CLElBQUksWUFBb0IsQ0FBQztRQUN6QixJQUFJLFdBQVcsR0FBVyxFQUFFLENBQUM7UUFFN0IsSUFBSSxVQUdELENBQUM7UUFFSixNQUFNLE1BQU0sR0FFUixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDM0IsUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNmLEtBQUssWUFBWTs0QkFDZixrQkFBa0IsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUNyQyxNQUFNO3dCQUVSLEtBQUssU0FBUyxDQUFDO3dCQUNmLEtBQUssY0FBYzs0QkFDakIsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7NEJBQy9CLE1BQU07d0JBRVIsS0FBSyxTQUFTOzRCQUNaLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0QkFDckQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDNUMsSUFBSSxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxZQUFZLEVBQUU7Z0NBQ3RELFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQ0FDeEQsbUJBQW1CLEdBQUcsUUFBUSxDQUFDOzZCQUNoQzs0QkFDRCxNQUFNO3dCQUVSLEtBQUssT0FBTzs0QkFDVixVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs0QkFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQztnQ0FDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0NBQ2YsV0FBVyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFOzZCQUM3QixDQUFDLENBQUM7NEJBQ0gsTUFBTTt3QkFFUjs0QkFDRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQzNCLE1BQU07cUJBQ1Q7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNoRTtRQUVELE9BQU87WUFDTCxXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLFlBQVk7WUFDWixrQkFBa0I7WUFDbEIsV0FBVztZQUNYLE1BQU07WUFDTixVQUFVO1NBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QixDQUM3QixTQUEyQixFQUMzQixVQUE4QjtRQUU5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFNBQVM7WUFDeEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU87WUFDTCxHQUFHLElBQUk7WUFDUCxHQUFHO2dCQUNELFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVzthQUNsQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUIsQ0FDM0IsVUFLQyxFQUNELElBQXdCO1FBRXhCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDMUMsVUFBVSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUMzRDtRQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtZQUN6QyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ3pEO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFTyxZQUFZLENBQ2xCLEtBQXdCO1FBRXhCLE1BQU0sSUFBSSxHQUNSLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0RSxJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsUUFBMkI7UUFDakQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLGlEQUFpRDtRQUNqRCx3QkFBd0I7UUFDeEIsT0FBTyxVQUFVLEVBQUUsU0FBUyxFQUFFLG1CQUFtQjtZQUMvQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU8sZUFBZSxDQUNyQixLQUF3QixFQUN4QixJQUF3QjtRQUV4QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCO1FBRUQsb0ZBQW9GO1FBQ3BGLDJFQUEyRTtRQUMzRSx5REFBeUQ7UUFDekQsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUNoQyxPQUFPO1NBQ1I7UUFFRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFtQjtRQUNyQyxPQUFPLENBQ0wsS0FBSyxDQUFDLFFBQVE7WUFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkQsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDOzswSEFuc0JVLDRCQUE0Qjs4SEFBNUIsNEJBQTRCLGNBRjNCLEtBQUs7NEZBRU4sNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBR0ksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB9IGZyb20gJy4vY2FsbC1zaWduYXR1cmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc0RlZmluaXRpb24gfSBmcm9tICcuL2NsYXNzLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuL3Byb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ29tbWVudFRhZ3MgfSBmcm9tICcuL2NvbW1lbnQtdGFncyc7XG5cbmltcG9ydCB7IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uIH0gZnJvbSAnLi9kaXJlY3RpdmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL2VudW1lcmF0aW9uLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9lbnVtZXJhdGlvbi1tZW1iZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NJbmRleFNpZ25hdHVyZURlZmluaXRpb24gfSBmcm9tICcuL2luZGV4LXNpZ25hdHVyZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZURlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlLXByb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRob2QtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQaXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gfSBmcm9tICcuL3R5cGUtYWxpYXMtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyIH0gZnJvbSAnLi90eXBlLWRlZmluaXRpb25zLXByb3ZpZGVyJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlLXBhcmFtZXRlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHtcbiAgVHlwZURvY0NvbW1lbnQsXG4gIFR5cGVEb2NFbnRyeSxcbiAgVHlwZURvY0VudHJ5Q2hpbGQsXG4gIFR5cGVEb2NQYXJhbWV0ZXIsXG4gIFR5cGVEb2NTaWduYXR1cmUsXG4gIFR5cGVEb2NUeXBlLFxuICBUeXBlRG9jVHlwZVBhcmFtZXRlcixcbn0gZnJvbSAnLi90eXBlZG9jLXR5cGVzJztcblxuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuXG4vKipcbiAqIENvbnZlcnRzIFR5cGVEb2MgdHlwZXMgaW50byBTS1kgVVggZG9jcy10b29scyB0eXBlcywgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIHZhcmlvdXMgZGVmaW5pdGlvbnMgY29tcG9uZW50cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RG9jc1R5cGVEb2NBZGFwdGVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHlwZURlZmluaXRpb25zUHJvdmlkZXI/OiBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyB0b0NsYXNzRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgbWV0aG9kcyA9IHRoaXMuZ2V0Q2xhc3NNZXRob2RzKGVudHJ5KTtcbiAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ubWV0aG9kcyA9IG1ldGhvZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q2xhc3NQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9EaXJlY3RpdmVEZWZpbml0aW9uKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnlcbiAgKTogU2t5RG9jc0RpcmVjdGl2ZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHNlbGVjdG9yOiB0aGlzLmdldFNlbGVjdG9yKGVudHJ5KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDbGFzc1Byb3BlcnRpZXMoZW50cnkpO1xuXG4gICAgY29uc3QgZXZlbnRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdPdXRwdXQnXG4gICAgKTtcbiAgICBpZiAoZXZlbnRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5ldmVudFByb3BlcnRpZXMgPSBldmVudFByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdJbnB1dCdcbiAgICApO1xuICAgIGlmIChpbnB1dFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLmlucHV0UHJvcGVydGllcyA9IGlucHV0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0VudW1lcmF0aW9uRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24ge1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLmdldEVudW1lcmF0aW9uTWVtYmVycyhlbnRyeSk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG1lbWJlcnMsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHVibGljIHRvSW50ZXJmYWNlRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NJbnRlcmZhY2VEZWZpbml0aW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9QaXBlRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc1BpcGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRob2RzID0gdGhpcy5nZXRDbGFzc01ldGhvZHMoZW50cnkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IG1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAndHJhbnNmb3JtJyk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1BpcGVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHRyYW5zZm9ybU1ldGhvZCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b1R5cGVBbGlhc0RlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzVHlwZUFsaWFzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgIGNvbW1lbnQ6IGVudHJ5LmNvbW1lbnQsXG4gICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICBlbnRyeS50eXBlLmRlY2xhcmF0aW9uPy5zaWduYXR1cmVzXG4gICAgICAgID8gZW50cnkudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgOiBlbnRyeS5jb21tZW50XG4gICAgKTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdG9yKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY29yYXRvclNvdXJjZSA9IGVudHJ5LmRlY29yYXRvcnNbMF0uYXJndW1lbnRzLm9iajtcbiAgICByZXR1cm4gZGVjb3JhdG9yU291cmNlLmluZGV4T2YoJ3NlbGVjdG9yOiBgJykgPiAtMVxuICAgICAgPyBkZWNvcmF0b3JTb3VyY2VcbiAgICAgICAgICAuc3BsaXQoJ3NlbGVjdG9yOiBgJylbMV1cbiAgICAgICAgICAuc3BsaXQoJ2AnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJylcbiAgICAgIDogZGVjb3JhdG9yU291cmNlLnNwbGl0KFwic2VsZWN0b3I6ICdcIilbMV0uc3BsaXQoXCInXCIpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc1Byb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gZW50cnkuY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICBjaGlsZC5raW5kU3RyaW5nID09PSAnUHJvcGVydHknIHx8IGNoaWxkLmtpbmRTdHJpbmcgPT09ICdBY2Nlc3NvcidcbiAgICAgIClcbiAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcblxuICAgICAgICAvKiBFbnN1cmUgd2UgYXJlIHByb3Blcmx5IGNhcHR1cmluZyBkZWZpbml0aW9ucyB3aGljaCB1c2UgYSBnZXR0ZXIvc2V0dGVyLiBGaW5hbCBjaGVjayBpcyBhIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQua2luZFN0cmluZyA9PT0gJ0FjY2Vzc29yJyAmJlxuICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAoY2hpbGQuc2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwIHx8IGNoaWxkLmdldFNpZ25hdHVyZS5sZW5ndGggPiAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYWluVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBtYWluVGFncyk7XG5cbiAgICAgICAgICBpZiAoY2hpbGQuZ2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUYWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5nZXRTaWduYXR1cmVbMF0uY29tbWVudCk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFnZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcblxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgZ2V0VGFncyk7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgZ2V0VGFncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0VGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuc2V0U2lnbmF0dXJlWzBdLmNvbW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBzZXRUYWdzKTtcblxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsICYmICFzZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgc2V0VGFncyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFtYWluVGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgbWFpblRhZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdQcm9wZXJ0eScgJiZcbiAgICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXS5jb21tZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICF0YWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuXG4gICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCAmJiAhdGFncy5leHRyYXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkLCB0YWdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29yYXRvciA9IHRoaXMuZ2V0RGVjb3JhdG9yKGNoaWxkKTtcbiAgICAgICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgICAgIGRlZmluaXRpb24uZGVjb3JhdG9yID0gZGVjb3JhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZWZpbml0aW9uLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSBlbnRyeS5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkKSA9PiBjaGlsZC5raW5kU3RyaW5nID09PSAnQ29uc3RydWN0b3InXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnN0cnVjdG9yLnNpZ25hdHVyZXMuZmluZChcbiAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgPT4gc2lnbmF0dXJlLmtpbmRTdHJpbmcgPT09ICdDb25zdHJ1Y3RvciBzaWduYXR1cmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtID0gc2lnbmF0dXJlLnBhcmFtZXRlcnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLm5hbWUgPT09IGNoaWxkLm5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGFyYW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICAgICAgICAgICAgICBtYXRjaGluZ1BhcmFtLmNvbW1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIG1hdGNoaW5nUGFyYW1UYWdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShkZWZpbml0aW9ucywgWydpc09wdGlvbmFsJywgJ25hbWUnXSwgWydhc2MnLCAnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc01ldGhvZHMoZW50cnk6IFR5cGVEb2NFbnRyeSk6IFNreURvY3NDbGFzc01ldGhvZERlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHMgPSBlbnRyeS5jaGlsZHJlblxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNoaWxkKSA9PlxuICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIC9ebmcvLnRlc3QoY2hpbGQubmFtZSkgPT09IGZhbHNlXG4gICAgICApXG4gICAgICAubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0UHJvcGVydHlOYW1lKGNoaWxkKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkKSxcbiAgICAgICAgICBpc1N0YXRpYzogISFjaGlsZC5mbGFncz8uaXNTdGF0aWMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ29tbWVudHMgZm9yIG1ldGhvZHMgYXJlIHN0b3JlZCBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbi5cbiAgICAgICAgY29uc3QgY29tbWVudCA9IGNoaWxkLnNpZ25hdHVyZXNbMF0uY29tbWVudDtcbiAgICAgICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY29tbWVudCk7XG4gICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICAgICAgY2hpbGQuc2lnbmF0dXJlc1swXS50eXBlUGFyYW1ldGVyXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIG9yZGVyQnkobWV0aG9kcywgWyduYW1lJ10sIFsnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnlcbiAgKTogU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5LmNoaWxkcmVuICYmICFlbnRyeS5pbmRleFNpZ25hdHVyZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID1cbiAgICAgIGVudHJ5LmNoaWxkcmVuPy5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGxldCB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3MgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjaGlsZC5raW5kU3RyaW5nID09PSAnTWV0aG9kJyAmJiBjaGlsZC5zaWduYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5zaWduYXR1cmVzWzBdLmNvbW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NJbnRlcmZhY2VQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdGFncy5leHRyYXMucmVxdWlyZWQgPyBmYWxzZSA6ICEhY2hpbGQuZmxhZ3M/LmlzT3B0aW9uYWwsXG4gICAgICAgICAgbmFtZTogdGhpcy5nZXRQcm9wZXJ0eU5hbWUoY2hpbGQpLFxuICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2hpbGQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSkgfHwgW107XG5cbiAgICBjb25zdCBzb3J0ZWQgPSBvcmRlckJ5KGRlZmluaXRpb25zLCBbJ2lzT3B0aW9uYWwnLCAnbmFtZSddLCBbJ2FzYycsICdhc2MnXSk7XG5cbiAgICAvLyBBZGQgYW55IGluZGV4IHNpZ25hdHVyZXMsIGUuZy4gYFtfOiBzdHJpbmddOiBhbnlgXG4gICAgaWYgKGVudHJ5LmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICBjb25zdCBpbmRleFNpZ25hdHVyZSA9IGVudHJ5LmluZGV4U2lnbmF0dXJlO1xuICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgbmFtZTogaW5kZXhTaWduYXR1cmUubmFtZSxcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIGluZGV4U2lnbmF0dXJlOiB0aGlzLmdldEluZGV4U2lnbmF0dXJlRGVmaW5pdGlvbihpbmRleFNpZ25hdHVyZSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhpbmRleFNpZ25hdHVyZS5jb21tZW50KTtcbiAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuICAgICAgc29ydGVkLnB1c2goZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW51bWVyYXRpb25NZW1iZXJzKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnlcbiAgKTogU2t5RG9jc0VudW1lcmF0aW9uTWVtYmVyRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJ5LmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NFbnVtZXJhdGlvbk1lbWJlckRlZmluaXRpb24gPSB7XG4gICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KTtcbiAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHlwZURlZmluaXRpb24oY2hpbGQ6IFR5cGVEb2NFbnRyeUNoaWxkKTogU2t5RG9jc1R5cGVEZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbjogU2t5RG9jc1R5cGVEZWZpbml0aW9uO1xuXG4gICAgY29uc3Qga2luZFN0cmluZyA9IGNoaWxkLmtpbmRTdHJpbmc7XG4gICAgc3dpdGNoIChraW5kU3RyaW5nKSB7XG4gICAgICBjYXNlICdBY2Nlc3Nvcic6XG4gICAgICAgIGlmIChjaGlsZC5zZXRTaWduYXR1cmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZC5zZXRTaWduYXR1cmVbMF0ucGFyYW1ldGVyc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2hpbGQuZ2V0U2lnbmF0dXJlWzBdKTtcblxuICAgICAgY2FzZSAnTWV0aG9kJzpcbiAgICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjYWxsU2lnbmF0dXJlOiB0aGlzLmdldENhbGxTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgICAgICAgICAgY2hpbGQuc2lnbmF0dXJlc1swXSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudClcbiAgICAgICAgICApLFxuICAgICAgICAgIG5hbWU6IGNoaWxkLnNpZ25hdHVyZXNbMF0ubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGV0IG5hbWU6IHN0cmluZyA9XG4gICAgICAgICAgY2hpbGQudHlwZS5uYW1lIHx8IGNoaWxkLnR5cGUuZWxlbWVudFR5cGU/Lm5hbWUgfHwgY2hpbGQudHlwZS52YWx1ZTtcblxuICAgICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICAgIHR5cGU6IGNoaWxkLnR5cGUudHlwZSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVbmlvbj9cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUudHlwZXMpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLnVuaW9uVHlwZXMgPSBjaGlsZC50eXBlLnR5cGVzLm1hcCgodCkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0VHlwZURlZmluaXRpb24oeyB0eXBlOiB0IH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnZlcnQgcmVmbGVjdGlvbiB0eXBlcy5cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUudHlwZSA9PT0gJ3JlZmxlY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBjaGlsZC50eXBlLmRlY2xhcmF0aW9uO1xuICAgICAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5zaWduYXR1cmVzKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb24uY2FsbFNpZ25hdHVyZSA9IHRoaXMuZ2V0Q2FsbFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4U2lnbmF0dXJlID0gZGVjbGFyYXRpb24uaW5kZXhTaWduYXR1cmU7XG4gICAgICAgICAgICAgIGRlZmluaXRpb24uaW5kZXhTaWduYXR1cmUgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKGluZGV4U2lnbmF0dXJlKTtcbiAgICAgICAgICAgIH0gLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gZWxzZSBpZiAoZGVjbGFyYXRpb24uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi50eXBlTGl0ZXJhbCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmdldEludGVyZmFjZVByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGRlY2xhcmF0aW9uLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGUgPT09ICd0eXBlT3BlcmF0b3InKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gYCR7Y2hpbGQudHlwZS5vcGVyYXRvcn0gJHtjaGlsZC50eXBlLnRhcmdldC5uYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQudHlwZS50eXBlQXJndW1lbnRzKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi50eXBlQXJndW1lbnRzID0gdGhpcy5nZXRUeXBlQXJndW1lbnREZWZpbml0aW9ucyhcbiAgICAgICAgICAgIGNoaWxkLnR5cGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICBjYWxsU2lnbmF0dXJlOiBUeXBlRG9jU2lnbmF0dXJlLFxuICAgIHBhcmVudFRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiBTa3lEb2NzUGFyYW1ldGVyRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIWNhbGxTaWduYXR1cmUucGFyYW1ldGVycykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uW10gPVxuICAgICAgY2FsbFNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocCkgPT4ge1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRQYXJhbWV0ZXJDb21tZW50VGFncyhwLCBwYXJlbnRUYWdzKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUocCwgdGFncyk7XG4gICAgICAgIGNvbnN0IHR5cGVBcmd1bWVudHMgPSB0aGlzLmdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKHAudHlwZSk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyOiBTa3lEb2NzUGFyYW1ldGVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBpc09wdGlvbmFsOiAhIShkZWZhdWx0VmFsdWUgfHwgISFwLmZsYWdzPy5pc09wdGlvbmFsKSxcbiAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihwKSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXJhbWV0ZXIuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZ3MuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICBwYXJhbWV0ZXIuZGVzY3JpcHRpb24gPSB0YWdzLmRlc2NyaXB0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgcGFyYW1ldGVyLnR5cGVBcmd1bWVudHMgPSB0eXBlQXJndW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICAgIH0pO1xuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlQXJndW1lbnREZWZpbml0aW9ucyhcbiAgICB0eXBlQ29uZmlnOiBUeXBlRG9jVHlwZVxuICApOiBTa3lEb2NzVHlwZURlZmluaXRpb25bXSB7XG4gICAgaWYgKCF0eXBlQ29uZmlnIHx8ICF0eXBlQ29uZmlnLnR5cGVBcmd1bWVudHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZUNvbmZpZy50eXBlQXJndW1lbnRzLm1hcCgodHlwZUFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7IHR5cGU6IHR5cGVBcmd1bWVudCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FsbFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgY2FsbFNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZSxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogU2t5RG9jc0NhbGxTaWduYXR1cmVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzQ2FsbFNpZ25hdHVyZURlZmluaXRpb24gPSB7XG4gICAgICByZXR1cm5UeXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNhbGxTaWduYXR1cmUpLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5nZXRQYXJhbWV0ZXJEZWZpbml0aW9ucyhjYWxsU2lnbmF0dXJlLCB0YWdzKTtcbiAgICBpZiAocGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldEluZGV4U2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICBzaWduYXR1cmU6IFR5cGVEb2NTaWduYXR1cmVcbiAgKTogU2t5RG9jc0luZGV4U2lnbmF0dXJlRGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleToge1xuICAgICAgICBuYW1lOiBzaWduYXR1cmUucGFyYW1ldGVyc1swXS5uYW1lLFxuICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHNpZ25hdHVyZS5wYXJhbWV0ZXJzWzBdKSxcbiAgICAgIH0sXG4gICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHNpZ25hdHVyZSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHlwZVBhcmFtZXRlckRlZmluaXRpb25zKFxuICAgIHR5cGVQYXJhbWV0ZXJzOiBUeXBlRG9jVHlwZVBhcmFtZXRlcltdXG4gICk6IFNreURvY3NUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIXR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXJzLm1hcCgodHlwZVBhcmFtKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZVBhcmFtZXRlckRlZmluaXRpb24gPSB7XG4gICAgICAgIG5hbWU6IHR5cGVQYXJhbS5uYW1lLFxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVQYXJhbS50eXBlKSB7XG4gICAgICAgIGRlZmluaXRpb24udHlwZSA9IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oe1xuICAgICAgICAgIHR5cGU6IHR5cGVQYXJhbS50eXBlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbW1lbnRUYWdzKGNvbW1lbnQ6IFR5cGVEb2NDb21tZW50KTogU2t5RG9jc0NvbW1lbnRUYWdzIHtcbiAgICBsZXQgY29kZUV4YW1wbGU6IHN0cmluZztcbiAgICBsZXQgY29kZUV4YW1wbGVMYW5ndWFnZTogc3RyaW5nID0gJ21hcmt1cCc7XG4gICAgbGV0IGRlcHJlY2F0aW9uV2FybmluZzogc3RyaW5nO1xuICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcbiAgICBsZXQgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xuXG4gICAgbGV0IHBhcmFtZXRlcnM6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgfVtdO1xuXG4gICAgY29uc3QgZXh0cmFzOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfSA9IHt9O1xuXG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgIGlmIChjb21tZW50LnRhZ3MpIHtcbiAgICAgICAgY29tbWVudC50YWdzLmZvckVhY2goKHRhZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAodGFnLnRhZykge1xuICAgICAgICAgICAgY2FzZSAnZGVwcmVjYXRlZCc6XG4gICAgICAgICAgICAgIGRlcHJlY2F0aW9uV2FybmluZyA9IHRhZy50ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdFZhbHVlJzpcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdGFnLnRleHQudHJpbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZXhhbXBsZSc6XG4gICAgICAgICAgICAgIGNvZGVFeGFtcGxlID0gdGFnLnRleHQudHJpbSgpLnNwbGl0KCdgYGAnKVsxXS50cmltKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlID0gY29kZUV4YW1wbGUuc3BsaXQoJ1xcbicpWzBdO1xuICAgICAgICAgICAgICBpZiAobGFuZ3VhZ2UgPT09ICdtYXJrdXAnIHx8IGxhbmd1YWdlID09PSAndHlwZXNjcmlwdCcpIHtcbiAgICAgICAgICAgICAgICBjb2RlRXhhbXBsZSA9IGNvZGVFeGFtcGxlLnNsaWNlKGxhbmd1YWdlLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGNvZGVFeGFtcGxlTGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAncGFyYW0nOlxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWcucGFyYW0sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRhZy50ZXh0LnRyaW0oKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBleHRyYXNbdGFnLnRhZ10gPSB0YWcudGV4dDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZGVzY3JpcHRpb24gPSAoY29tbWVudC5zaG9ydFRleHQgfHwgY29tbWVudC50ZXh0IHx8ICcnKS50cmltKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGVFeGFtcGxlLFxuICAgICAgY29kZUV4YW1wbGVMYW5ndWFnZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRlcHJlY2F0aW9uV2FybmluZyxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZXh0cmFzLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlciBkZXNjcmlwdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyZW50J3MgKGZ1bmN0aW9uL21ldGhvZCkgY29tbWVudC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGFyYW1ldGVyQ29tbWVudFRhZ3MoXG4gICAgcGFyYW1ldGVyOiBUeXBlRG9jUGFyYW1ldGVyLFxuICAgIHBhcmVudFRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiBTa3lEb2NzQ29tbWVudFRhZ3Mge1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKHBhcmFtZXRlci5jb21tZW50KTtcbiAgICBjb25zdCBwYXJhbVRhZ3MgPSBwYXJlbnRUYWdzLnBhcmFtZXRlcnM7XG4gICAgY29uc3QgdGFnUGFyYW0gPSBwYXJhbVRhZ3NcbiAgICAgID8gcGFyYW1UYWdzLmZpbmQoKHBhcmFtKSA9PiBwYXJhbS5uYW1lID09PSBwYXJhbWV0ZXIubmFtZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF0YWdQYXJhbSB8fCAhdGFnUGFyYW0uZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB0YWdzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50YWdzLFxuICAgICAgLi4ue1xuICAgICAgICBkZXNjcmlwdGlvbjogdGFnUGFyYW0uZGVzY3JpcHRpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBjb21tZW50IHRhZyAoZS5nLiBgQHBhcmFtYCkgdmFsdWVzIHRvIHRoZSBwcm92aWRlZCBkZWZpbml0aW9uLCBpZiB0aGUgdmFsdWUgaXMgZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlDb21tZW50VGFnVmFsdWVzKFxuICAgIGRlZmluaXRpb246IHtcbiAgICAgIGNvZGVFeGFtcGxlPzogc3RyaW5nO1xuICAgICAgY29kZUV4YW1wbGVMYW5ndWFnZT86IHN0cmluZztcbiAgICAgIGRlcHJlY2F0aW9uV2FybmluZz86IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIH0sXG4gICAgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IHZvaWQge1xuICAgIGlmICh0YWdzLmNvZGVFeGFtcGxlKSB7XG4gICAgICBkZWZpbml0aW9uLmNvZGVFeGFtcGxlID0gdGFncy5jb2RlRXhhbXBsZTtcbiAgICAgIGRlZmluaXRpb24uY29kZUV4YW1wbGVMYW5ndWFnZSA9IHRhZ3MuY29kZUV4YW1wbGVMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBpZiAodGFncy5kZXByZWNhdGlvbldhcm5pbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVmaW5pdGlvbi5kZXByZWNhdGlvbldhcm5pbmcgPSB0YWdzLmRlcHJlY2F0aW9uV2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGFncy5kZXNjcmlwdGlvbikge1xuICAgICAgZGVmaW5pdGlvbi5kZXNjcmlwdGlvbiA9IHRhZ3MuZGVzY3JpcHRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWNvcmF0b3IoXG4gICAgY2hpbGQ6IFR5cGVEb2NFbnRyeUNoaWxkXG4gICk6IFNreURvY3NQcm9wZXJ0eURlY29yYXRvckRlZmluaXRpb24ge1xuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgY2hpbGQuZGVjb3JhdG9ycyAmJiBjaGlsZC5kZWNvcmF0b3JzWzBdICYmIGNoaWxkLmRlY29yYXRvcnNbMF0ubmFtZTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuIHsgbmFtZSB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5OiBUeXBlRG9jRW50cnlDaGlsZCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IHByb3BlcnR5LmRlY29yYXRvcnMgJiYgcHJvcGVydHkuZGVjb3JhdG9yc1swXTtcbiAgICAvLyBVc2UgdGhlIElucHV0J3MgYm91bmQgcHJvcGVydHkgbmFtZSwgaWYgZm91bmQuXG4gICAgLy8gZS5nLiBASW5wdXQoJ2Zvb2JhcicpXG4gICAgcmV0dXJuIGRlY29yYXRvcnM/LmFyZ3VtZW50cz8uYmluZGluZ1Byb3BlcnR5TmFtZVxuICAgICAgPyBkZWNvcmF0b3JzLmFyZ3VtZW50cy5iaW5kaW5nUHJvcGVydHlOYW1lLnJlcGxhY2UoLyhcXCd8XFxcIikvZywgJycpXG4gICAgICA6IHByb3BlcnR5Lm5hbWU7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRWYWx1ZShcbiAgICBjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGQsXG4gICAgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRhZ3MuZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdGFncy5kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVHlwZURvYyB2ZXJzaW9uIDAuMjAueCBzdG9wcGVkIGF1dG8tZ2VuZXJhdGluZyBpbml0aWFsaXplcnMgZm9yIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgLy8gKGFuZCByZXBsYWNlZCB0aGVtIHdpdGggXCIuLi5cIikgZHVlIHRvIHRoZSBjb21wbGljYXRlZCBsb2dpYyBpdCByZXF1aXJlZC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9UeXBlU3Ryb25nL3R5cGVkb2MvaXNzdWVzLzE1NTJcbiAgICBpZiAoY2hpbGQuZGVmYXVsdFZhbHVlID09PSAnLi4uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZC5kZWZhdWx0VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEFuY2hvcklkKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBlbnRyeS5hbmNob3JJZCB8fFxuICAgICAgdGhpcy50eXBlRGVmaW5pdGlvbnNQcm92aWRlcj8uYW5jaG9ySWRzW2VudHJ5Lm5hbWVdIHx8XG4gICAgICAnJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
526
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb2NzLXRvb2xzL3NyYy9tb2R1bGVzL3R5cGUtZGVmaW5pdGlvbnMvdHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnRHJELE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDOzs7QUFFckM7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ3NCLHVCQUF3RDtRQUF4RCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWlDO0lBQzNFLENBQUM7SUFFRyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUMxQyxNQUFNLFVBQVUsR0FBMkI7WUFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUM5QjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDcEM7UUFFRCxPQUFPLFVBQVUs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ekQsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUNoQyxPQUFPO1NBQ1I7UUFFRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFtQjtRQUNyQyxPQUFPLENBQ0wsS0FBSyxDQUFDLFFBQVE7WUFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkQsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDOzswSEExc0JVLDRCQUE0Qjs4SEFBNUIsNEJBQTRCLGNBRjNCLEtBQUs7NEZBRU4sNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBR0ksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB9IGZyb20gJy4vY2FsbC1zaWduYXR1cmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc0RlZmluaXRpb24gfSBmcm9tICcuL2NsYXNzLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuL3Byb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ29tbWVudFRhZ3MgfSBmcm9tICcuL2NvbW1lbnQtdGFncyc7XG5cbmltcG9ydCB7IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uIH0gZnJvbSAnLi9kaXJlY3RpdmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL2VudW1lcmF0aW9uLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9lbnVtZXJhdGlvbi1tZW1iZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NJbmRleFNpZ25hdHVyZURlZmluaXRpb24gfSBmcm9tICcuL2luZGV4LXNpZ25hdHVyZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZURlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlLXByb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRob2QtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQaXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gfSBmcm9tICcuL3R5cGUtYWxpYXMtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyIH0gZnJvbSAnLi90eXBlLWRlZmluaXRpb25zLXByb3ZpZGVyJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlLXBhcmFtZXRlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHtcbiAgVHlwZURvY0NvbW1lbnQsXG4gIFR5cGVEb2NFbnRyeSxcbiAgVHlwZURvY0VudHJ5Q2hpbGQsXG4gIFR5cGVEb2NQYXJhbWV0ZXIsXG4gIFR5cGVEb2NTaWduYXR1cmUsXG4gIFR5cGVEb2NUeXBlLFxuICBUeXBlRG9jVHlwZVBhcmFtZXRlcixcbn0gZnJvbSAnLi90eXBlZG9jLXR5cGVzJztcblxuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuXG4vKipcbiAqIENvbnZlcnRzIFR5cGVEb2MgdHlwZXMgaW50byBTS1kgVVggZG9jcy10b29scyB0eXBlcywgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIHZhcmlvdXMgZGVmaW5pdGlvbnMgY29tcG9uZW50cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RG9jc1R5cGVEb2NBZGFwdGVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHlwZURlZmluaXRpb25zUHJvdmlkZXI/OiBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyB0b0NsYXNzRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgbWV0aG9kcyA9IHRoaXMuZ2V0Q2xhc3NNZXRob2RzKGVudHJ5KTtcbiAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ubWV0aG9kcyA9IG1ldGhvZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q2xhc3NQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9EaXJlY3RpdmVEZWZpbml0aW9uKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnlcbiAgKTogU2t5RG9jc0RpcmVjdGl2ZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHNlbGVjdG9yOiB0aGlzLmdldFNlbGVjdG9yKGVudHJ5KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDbGFzc1Byb3BlcnRpZXMoZW50cnkpO1xuXG4gICAgY29uc3QgZXZlbnRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdPdXRwdXQnXG4gICAgKTtcbiAgICBpZiAoZXZlbnRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5ldmVudFByb3BlcnRpZXMgPSBldmVudFByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdJbnB1dCdcbiAgICApO1xuICAgIGlmIChpbnB1dFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLmlucHV0UHJvcGVydGllcyA9IGlucHV0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0VudW1lcmF0aW9uRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24ge1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLmdldEVudW1lcmF0aW9uTWVtYmVycyhlbnRyeSk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG1lbWJlcnMsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHVibGljIHRvSW50ZXJmYWNlRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NJbnRlcmZhY2VEZWZpbml0aW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9QaXBlRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc1BpcGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRob2RzID0gdGhpcy5nZXRDbGFzc01ldGhvZHMoZW50cnkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IG1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAndHJhbnNmb3JtJyk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1BpcGVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHRyYW5zZm9ybU1ldGhvZCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b1R5cGVBbGlhc0RlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzVHlwZUFsaWFzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgIGNvbW1lbnQ6IGVudHJ5LmNvbW1lbnQsXG4gICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICBlbnRyeS50eXBlLmRlY2xhcmF0aW9uPy5zaWduYXR1cmVzXG4gICAgICAgID8gZW50cnkudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgOiBlbnRyeS5jb21tZW50XG4gICAgKTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdG9yKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY29yYXRvclNvdXJjZSA9IGVudHJ5LmRlY29yYXRvcnNbMF0uYXJndW1lbnRzLm9iajtcbiAgICByZXR1cm4gZGVjb3JhdG9yU291cmNlLmluZGV4T2YoJ3NlbGVjdG9yOiBgJykgPiAtMVxuICAgICAgPyBkZWNvcmF0b3JTb3VyY2VcbiAgICAgICAgICAuc3BsaXQoJ3NlbGVjdG9yOiBgJylbMV1cbiAgICAgICAgICAuc3BsaXQoJ2AnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJylcbiAgICAgIDogZGVjb3JhdG9yU291cmNlLnNwbGl0KFwic2VsZWN0b3I6ICdcIilbMV0uc3BsaXQoXCInXCIpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc1Byb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gZW50cnkuY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICBjaGlsZC5raW5kU3RyaW5nID09PSAnUHJvcGVydHknIHx8IGNoaWxkLmtpbmRTdHJpbmcgPT09ICdBY2Nlc3NvcidcbiAgICAgIClcbiAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcblxuICAgICAgICAvKiBFbnN1cmUgd2UgYXJlIHByb3Blcmx5IGNhcHR1cmluZyBkZWZpbml0aW9ucyB3aGljaCB1c2UgYSBnZXR0ZXIvc2V0dGVyLiBGaW5hbCBjaGVjayBpcyBhIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQua2luZFN0cmluZyA9PT0gJ0FjY2Vzc29yJyAmJlxuICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAoY2hpbGQuc2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwIHx8IGNoaWxkLmdldFNpZ25hdHVyZS5sZW5ndGggPiAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYWluVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBtYWluVGFncyk7XG5cbiAgICAgICAgICBpZiAoY2hpbGQuZ2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUYWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5nZXRTaWduYXR1cmVbMF0uY29tbWVudCk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFnZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcblxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgZ2V0VGFncyk7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgZ2V0VGFncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0VGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuc2V0U2lnbmF0dXJlWzBdLmNvbW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBzZXRUYWdzKTtcblxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsICYmICFzZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgc2V0VGFncyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFtYWluVGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgbWFpblRhZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdQcm9wZXJ0eScgJiZcbiAgICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXS5jb21tZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICF0YWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuXG4gICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCAmJiAhdGFncy5leHRyYXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkLCB0YWdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29yYXRvciA9IHRoaXMuZ2V0RGVjb3JhdG9yKGNoaWxkKTtcbiAgICAgICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgICAgIGRlZmluaXRpb24uZGVjb3JhdG9yID0gZGVjb3JhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZWZpbml0aW9uLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSBlbnRyeS5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkKSA9PiBjaGlsZC5raW5kU3RyaW5nID09PSAnQ29uc3RydWN0b3InXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnN0cnVjdG9yLnNpZ25hdHVyZXMuZmluZChcbiAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgPT4gc2lnbmF0dXJlLmtpbmRTdHJpbmcgPT09ICdDb25zdHJ1Y3RvciBzaWduYXR1cmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtID0gc2lnbmF0dXJlLnBhcmFtZXRlcnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLm5hbWUgPT09IGNoaWxkLm5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGFyYW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICAgICAgICAgICAgICBtYXRjaGluZ1BhcmFtLmNvbW1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIG1hdGNoaW5nUGFyYW1UYWdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShkZWZpbml0aW9ucywgWydpc09wdGlvbmFsJywgJ25hbWUnXSwgWydhc2MnLCAnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc01ldGhvZHMoZW50cnk6IFR5cGVEb2NFbnRyeSk6IFNreURvY3NDbGFzc01ldGhvZERlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHMgPSBlbnRyeS5jaGlsZHJlblxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNoaWxkKSA9PlxuICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIC9ebmcvLnRlc3QoY2hpbGQubmFtZSkgPT09IGZhbHNlXG4gICAgICApXG4gICAgICAubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0UHJvcGVydHlOYW1lKGNoaWxkKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkKSxcbiAgICAgICAgICBpc1N0YXRpYzogISFjaGlsZC5mbGFncz8uaXNTdGF0aWMsXG4gICAgICAgICAgcGFyZW50TmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDb21tZW50cyBmb3IgbWV0aG9kcyBhcmUgc3RvcmVkIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLlxuICAgICAgICBjb25zdCBjb21tZW50ID0gY2hpbGQuc2lnbmF0dXJlc1swXS5jb21tZW50O1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjb21tZW50KTtcbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLmdldFR5cGVQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLnR5cGVQYXJhbWV0ZXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGRlZmluaXRpb24udHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShtZXRob2RzLCBbJ25hbWUnXSwgWydhc2MnXSk7XG4gIH1cblxuICBwcml2YXRlIGdldEludGVyZmFjZVByb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4gJiYgIWVudHJ5LmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPVxuICAgICAgZW50cnkuY2hpbGRyZW4/Lm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgbGV0IHRhZ3M6IFNreURvY3NDb21tZW50VGFncyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIGNoaWxkLnNpZ25hdHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLnNpZ25hdHVyZXNbMF0uY29tbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBpc09wdGlvbmFsOiB0YWdzLmV4dHJhcy5yZXF1aXJlZCA/IGZhbHNlIDogISFjaGlsZC5mbGFncz8uaXNPcHRpb25hbCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KSB8fCBbXTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IG9yZGVyQnkoZGVmaW5pdGlvbnMsIFsnaXNPcHRpb25hbCcsICduYW1lJ10sIFsnYXNjJywgJ2FzYyddKTtcblxuICAgIC8vIEFkZCBhbnkgaW5kZXggc2lnbmF0dXJlcywgZS5nLiBgW186IHN0cmluZ106IGFueWBcbiAgICBpZiAoZW50cnkuaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgIGNvbnN0IGluZGV4U2lnbmF0dXJlID0gZW50cnkuaW5kZXhTaWduYXR1cmU7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICBuYW1lOiBpbmRleFNpZ25hdHVyZS5uYW1lLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgaW5kZXhTaWduYXR1cmU6IHRoaXMuZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKGluZGV4U2lnbmF0dXJlKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGluZGV4U2lnbmF0dXJlLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG4gICAgICBzb3J0ZWQucHVzaChkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnVtZXJhdGlvbk1lbWJlcnMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uTWVtYmVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbihjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGQpOiBTa3lEb2NzVHlwZURlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZURlZmluaXRpb247XG5cbiAgICBjb25zdCBraW5kU3RyaW5nID0gY2hpbGQua2luZFN0cmluZztcbiAgICBzd2l0Y2ggKGtpbmRTdHJpbmcpIHtcbiAgICAgIGNhc2UgJ0FjY2Vzc29yJzpcbiAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkLnNldFNpZ25hdHVyZVswXS5wYXJhbWV0ZXJzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZC5nZXRTaWduYXR1cmVbMF0pO1xuXG4gICAgICBjYXNlICdNZXRob2QnOlxuICAgICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNhbGxTaWduYXR1cmU6IHRoaXMuZ2V0Q2FsbFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogY2hpbGQuc2lnbmF0dXJlc1swXS5uYW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nID1cbiAgICAgICAgICBjaGlsZC50eXBlLm5hbWUgfHwgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8ubmFtZSB8fCBjaGlsZC50eXBlLnZhbHVlO1xuXG4gICAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogY2hpbGQudHlwZS50eXBlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuaW9uP1xuICAgICAgICBpZiAoY2hpbGQudHlwZS50eXBlcykge1xuICAgICAgICAgIGRlZmluaXRpb24udW5pb25UeXBlcyA9IGNoaWxkLnR5cGUudHlwZXMubWFwKCh0KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7IHR5cGU6IHQgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCByZWZsZWN0aW9uIHR5cGVzLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQudHlwZS50eXBlID09PSAncmVmbGVjdGlvbicgfHxcbiAgICAgICAgICBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy50eXBlID09PSAncmVmbGVjdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPVxuICAgICAgICAgICAgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8udHlwZSA9PT0gJ3JlZmxlY3Rpb24nXG4gICAgICAgICAgICAgID8gY2hpbGQudHlwZS5lbGVtZW50VHlwZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IGNoaWxkLnR5cGUuZGVjbGFyYXRpb247XG4gICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChkZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnNpZ25hdHVyZXMpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5jYWxsU2lnbmF0dXJlID0gdGhpcy5nZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXhTaWduYXR1cmUgPSBkZWNsYXJhdGlvbi5pbmRleFNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pbmRleFNpZ25hdHVyZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbmRleFNpZ25hdHVyZURlZmluaXRpb24oaW5kZXhTaWduYXR1cmUpO1xuICAgICAgICAgICAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyBlbHNlIGlmIChkZWNsYXJhdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uLnR5cGVMaXRlcmFsID0ge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZ2V0SW50ZXJmYWNlUHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZGVjbGFyYXRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUudHlwZSA9PT0gJ3R5cGVPcGVyYXRvcicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBgJHtjaGlsZC50eXBlLm9wZXJhdG9yfSAke2NoaWxkLnR5cGUudGFyZ2V0Lm5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGVBcmd1bWVudHMpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLnR5cGVBcmd1bWVudHMgPSB0aGlzLmdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgICAgICAgICAgY2hpbGQudHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtZXRlckRlZmluaXRpb25zKFxuICAgIGNhbGxTaWduYXR1cmU6IFR5cGVEb2NTaWduYXR1cmUsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghY2FsbFNpZ25hdHVyZS5wYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb25bXSA9XG4gICAgICBjYWxsU2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldFBhcmFtZXRlckNvbW1lbnRUYWdzKHAsIHBhcmVudFRhZ3MpO1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShwLCB0YWdzKTtcbiAgICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHRoaXMuZ2V0VHlwZUFyZ3VtZW50RGVmaW5pdGlvbnMocC50eXBlKTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXI6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uID0ge1xuICAgICAgICAgIGlzT3B0aW9uYWw6ICEhKGRlZmF1bHRWYWx1ZSB8fCAhIXAuZmxhZ3M/LmlzT3B0aW9uYWwpLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHApLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcmFtZXRlci5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFncy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhcmFtZXRlci5kZXNjcmlwdGlvbiA9IHRhZ3MuZGVzY3JpcHRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXJhbWV0ZXIudHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgIHR5cGVDb25maWc6IFR5cGVEb2NUeXBlXG4gICk6IFNreURvY3NUeXBlRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIXR5cGVDb25maWcgfHwgIXR5cGVDb25maWcudHlwZUFyZ3VtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlQ29uZmlnLnR5cGVBcmd1bWVudHMubWFwKCh0eXBlQXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHsgdHlwZTogdHlwZUFyZ3VtZW50IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICBjYWxsU2lnbmF0dXJlOiBUeXBlRG9jU2lnbmF0dXJlLFxuICAgIHRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiBTa3lEb2NzQ2FsbFNpZ25hdHVyZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiA9IHtcbiAgICAgIHJldHVyblR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2FsbFNpZ25hdHVyZSksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlckRlZmluaXRpb25zKGNhbGxTaWduYXR1cmUsIHRhZ3MpO1xuICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgIHNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZVxuICApOiBTa3lEb2NzSW5kZXhTaWduYXR1cmVEZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB7XG4gICAgICAgIG5hbWU6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzWzBdLm5hbWUsXG4gICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlLnBhcmFtZXRlcnNbMF0pLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgdHlwZVBhcmFtZXRlcnM6IFR5cGVEb2NUeXBlUGFyYW1ldGVyW11cbiAgKTogU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghdHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVBhcmFtZXRlcnMubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogdHlwZVBhcmFtLm5hbWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZVBhcmFtLnR5cGUpIHtcbiAgICAgICAgZGVmaW5pdGlvbi50eXBlID0gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgICAgdHlwZTogdHlwZVBhcmFtLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tbWVudFRhZ3MoY29tbWVudDogVHlwZURvY0NvbW1lbnQpOiBTa3lEb2NzQ29tbWVudFRhZ3Mge1xuICAgIGxldCBjb2RlRXhhbXBsZTogc3RyaW5nO1xuICAgIGxldCBjb2RlRXhhbXBsZUxhbmd1YWdlOiBzdHJpbmcgPSAnbWFya3VwJztcbiAgICBsZXQgZGVwcmVjYXRpb25XYXJuaW5nOiBzdHJpbmc7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAgIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgICBsZXQgcGFyYW1ldGVyczoge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB9W107XG5cbiAgICBjb25zdCBleHRyYXM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9ID0ge307XG5cbiAgICBpZiAoY29tbWVudCkge1xuICAgICAgaWYgKGNvbW1lbnQudGFncykge1xuICAgICAgICBjb21tZW50LnRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0YWcudGFnKSB7XG4gICAgICAgICAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgICAgICAgICAgZGVwcmVjYXRpb25XYXJuaW5nID0gdGFnLnRleHQudHJpbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0YWcudGV4dC50cmltKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdleGFtcGxlJzpcbiAgICAgICAgICAgICAgY29kZUV4YW1wbGUgPSB0YWcudGV4dC50cmltKCkuc3BsaXQoJ2BgYCcpWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb2RlRXhhbXBsZS5zcGxpdCgnXFxuJylbMF07XG4gICAgICAgICAgICAgIGlmIChsYW5ndWFnZSA9PT0gJ21hcmt1cCcgfHwgbGFuZ3VhZ2UgPT09ICd0eXBlc2NyaXB0Jykge1xuICAgICAgICAgICAgICAgIGNvZGVFeGFtcGxlID0gY29kZUV4YW1wbGUuc2xpY2UobGFuZ3VhZ2UubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgY29kZUV4YW1wbGVMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwYXJhbSc6XG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdO1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IHRhZy5wYXJhbSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFnLnRleHQudHJpbSgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGV4dHJhc1t0YWcudGFnXSA9IHRhZy50ZXh0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBkZXNjcmlwdGlvbiA9IChjb21tZW50LnNob3J0VGV4dCB8fCBjb21tZW50LnRleHQgfHwgJycpLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZUV4YW1wbGUsXG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRyYXMsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGFyYW1ldGVyIGRlc2NyaXB0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBwYXJlbnQncyAoZnVuY3Rpb24vbWV0aG9kKSBjb21tZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQYXJhbWV0ZXJDb21tZW50VGFncyhcbiAgICBwYXJhbWV0ZXI6IFR5cGVEb2NQYXJhbWV0ZXIsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NDb21tZW50VGFncyB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MocGFyYW1ldGVyLmNvbW1lbnQpO1xuICAgIGNvbnN0IHBhcmFtVGFncyA9IHBhcmVudFRhZ3MucGFyYW1ldGVycztcbiAgICBjb25zdCB0YWdQYXJhbSA9IHBhcmFtVGFnc1xuICAgICAgPyBwYXJhbVRhZ3MuZmluZCgocGFyYW0pID0+IHBhcmFtLm5hbWUgPT09IHBhcmFtZXRlci5uYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRhZ1BhcmFtIHx8ICF0YWdQYXJhbS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRhZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhZ3MsXG4gICAgICAuLi57XG4gICAgICAgIGRlc2NyaXB0aW9uOiB0YWdQYXJhbS5kZXNjcmlwdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGNvbW1lbnQgdGFnIChlLmcuIGBAcGFyYW1gKSB2YWx1ZXMgdG8gdGhlIHByb3ZpZGVkIGRlZmluaXRpb24sIGlmIHRoZSB2YWx1ZSBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUNvbW1lbnRUYWdWYWx1ZXMoXG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgY29kZUV4YW1wbGU/OiBzdHJpbmc7XG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlPzogc3RyaW5nO1xuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nPzogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfSxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRhZ3MuY29kZUV4YW1wbGUpIHtcbiAgICAgIGRlZmluaXRpb24uY29kZUV4YW1wbGUgPSB0YWdzLmNvZGVFeGFtcGxlO1xuICAgICAgZGVmaW5pdGlvbi5jb2RlRXhhbXBsZUxhbmd1YWdlID0gdGFncy5jb2RlRXhhbXBsZUxhbmd1YWdlO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlcHJlY2F0aW9uV2FybmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZpbml0aW9uLmRlcHJlY2F0aW9uV2FybmluZyA9IHRhZ3MuZGVwcmVjYXRpb25XYXJuaW5nO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlc2NyaXB0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uLmRlc2NyaXB0aW9uID0gdGFncy5kZXNjcmlwdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlY29yYXRvcihcbiAgICBjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGRcbiAgKTogU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBjaGlsZC5kZWNvcmF0b3JzICYmIGNoaWxkLmRlY29yYXRvcnNbMF0gJiYgY2hpbGQuZGVjb3JhdG9yc1swXS5uYW1lO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4geyBuYW1lIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHk6IFR5cGVEb2NFbnRyeUNoaWxkKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWNvcmF0b3JzID0gcHJvcGVydHkuZGVjb3JhdG9ycyAmJiBwcm9wZXJ0eS5kZWNvcmF0b3JzWzBdO1xuICAgIC8vIFVzZSB0aGUgSW5wdXQncyBib3VuZCBwcm9wZXJ0eSBuYW1lLCBpZiBmb3VuZC5cbiAgICAvLyBlLmcuIEBJbnB1dCgnZm9vYmFyJylcbiAgICByZXR1cm4gZGVjb3JhdG9ycz8uYXJndW1lbnRzPy5iaW5kaW5nUHJvcGVydHlOYW1lXG4gICAgICA/IGRlY29yYXRvcnMuYXJndW1lbnRzLmJpbmRpbmdQcm9wZXJ0eU5hbWUucmVwbGFjZSgvKFxcJ3xcXFwiKS9nLCAnJylcbiAgICAgIDogcHJvcGVydHkubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZCxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGFncy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0YWdzLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBUeXBlRG9jIHZlcnNpb24gMC4yMC54IHN0b3BwZWQgYXV0by1nZW5lcmF0aW5nIGluaXRpYWxpemVycyBmb3IgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAvLyAoYW5kIHJlcGxhY2VkIHRoZW0gd2l0aCBcIi4uLlwiKSBkdWUgdG8gdGhlIGNvbXBsaWNhdGVkIGxvZ2ljIGl0IHJlcXVpcmVkLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL1R5cGVTdHJvbmcvdHlwZWRvYy9pc3N1ZXMvMTU1MlxuICAgIGlmIChjaGlsZC5kZWZhdWx0VmFsdWUgPT09ICcuLi4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkLmRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QW5jaG9ySWQoZW50cnk6IFR5cGVEb2NFbnRyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVudHJ5LmFuY2hvcklkIHx8XG4gICAgICB0aGlzLnR5cGVEZWZpbml0aW9uc1Byb3ZpZGVyPy5hbmNob3JJZHNbZW50cnkubmFtZV0gfHxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -246,6 +246,7 @@ class SkyDocsCodeExamplesEditorService {
246
246
  '@skyux/popovers': skyuxVersion,
247
247
  '@skyux/router': skyuxVersion,
248
248
  '@skyux/theme': skyuxVersion,
249
+ '@types/jasmine': '~3.10.0',
249
250
  // We must define Dragula deliberately so that StackBlitz runs NGCC against it.
250
251
  'ng2-dragula': '2.1.1',
251
252
  rxjs: '^7',
@@ -486,7 +487,7 @@ body {
486
487
  }
487
488
  getComponentSelector(componentClassName, sourceCode) {
488
489
  const found = sourceCode.find((file) => {
489
- return file.rawContents.indexOf(componentClassName) > -1;
490
+ return file.rawContents.indexOf(`class ${componentClassName}`) > -1;
490
491
  });
491
492
  const trimmed = found.rawContents.replace(/\s/g, '');
492
493
  return trimmed.split(`selector:'`)[1].split(`'`)[0];
@@ -1335,8 +1336,11 @@ class SkyDocsTypeDefinitionsFormatService {
1335
1336
  */
1336
1337
  getFormattedMethodName(definition) {
1337
1338
  let formatted = '';
1339
+ if (definition.isStatic) {
1340
+ formatted += `${definition.parentName}.`;
1341
+ }
1338
1342
  if (definition.deprecationWarning !== undefined) {
1339
- formatted += `<strike>${definition.name}</strike>`;
1343
+ formatted = `<strike>${formatted}${definition.name}</strike>`;
1340
1344
  }
1341
1345
  else {
1342
1346
  formatted += definition.name;
@@ -1354,7 +1358,11 @@ class SkyDocsTypeDefinitionsFormatService {
1354
1358
  return formatted;
1355
1359
  }
1356
1360
  if (type.callSignature) {
1357
- return this.getFormattedCallSignature(type.callSignature, config);
1361
+ let formattedSignature = this.getFormattedCallSignature(type.callSignature, config);
1362
+ if (type.type === 'array') {
1363
+ formattedSignature = `(${formattedSignature})[]`;
1364
+ }
1365
+ return formattedSignature;
1358
1366
  }
1359
1367
  if (type.unionTypes) {
1360
1368
  return this.getFormattedUnion(type, config);
@@ -1725,56 +1733,72 @@ class SkyDocsInterfaceDefinitionComponent {
1725
1733
  }
1726
1734
  }
1727
1735
  SkyDocsInterfaceDefinitionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkyDocsInterfaceDefinitionComponent, deps: [{ token: SkyDocsTypeDefinitionsFormatService }], target: i0.ɵɵFactoryTarget.Component });
1728
- SkyDocsInterfaceDefinitionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SkyDocsInterfaceDefinitionComponent, selector: "sky-docs-interface-definition", inputs: { config: "config" }, ngImport: i0, template: "<div\n *ngIf=\"config\"\n class=\"sky-docs-interface-definition sky-docs-type-definition-wrapper\"\n>\n <sky-docs-heading-anchor headingLevel=\"3\" [anchorId]=\"config.anchorId\">\n {{ config.name }}\n </sky-docs-heading-anchor>\n\n <sky-docs-safe-html\n *ngIf=\"config.description\"\n class=\"sky-docs-interface-definition-description\"\n [innerHtml]=\"config.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-property-definitions\n *ngIf=\"config.properties\"\n [config]=\"{ properties: config.properties }\"\n [showOptionalStatus]=\"false\"\n ></sky-docs-property-definitions>\n</div>\n", components: [{ type: SkyDocsHeadingAnchorComponent, selector: "sky-docs-heading-anchor", inputs: ["anchorId", "headingLevel"] }, { type: SkyDocsSafeHtmlComponent, selector: "sky-docs-safe-html", inputs: ["innerHtml"] }, { type: i3$1.λ2, selector: "sky-code-block", inputs: ["code", "fileName", "languageType", "hideCopyToClipboard", "hideHeader"] }, { type: SkyDocsPropertyDefinitionsComponent, selector: "sky-docs-property-definitions", inputs: ["config", "propertyType", "showOptionalStatus"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "skyDocsMarkdown": SkyDocsMarkdownPipe, "skyDocsTypeAnchorLinks": SkyDocsTypeAnchorLinksPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1736
+ SkyDocsInterfaceDefinitionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SkyDocsInterfaceDefinitionComponent, selector: "sky-docs-interface-definition", inputs: { config: "config" }, ngImport: i0, template: "<div\n *ngIf=\"config\"\n class=\"sky-docs-interface-definition sky-docs-type-definition-wrapper\"\n>\n <sky-docs-heading-anchor headingLevel=\"3\" [anchorId]=\"config.anchorId\">\n {{ config.name }}\n </sky-docs-heading-anchor>\n\n <sky-docs-safe-html\n *ngIf=\"config.description\"\n class=\"sky-docs-interface-definition-description\"\n [innerHtml]=\"config.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-property-definitions\n *ngIf=\"config.properties?.length\"\n [config]=\"{ properties: config.properties }\"\n [showOptionalStatus]=\"false\"\n ></sky-docs-property-definitions>\n</div>\n", components: [{ type: SkyDocsHeadingAnchorComponent, selector: "sky-docs-heading-anchor", inputs: ["anchorId", "headingLevel"] }, { type: SkyDocsSafeHtmlComponent, selector: "sky-docs-safe-html", inputs: ["innerHtml"] }, { type: i3$1.λ2, selector: "sky-code-block", inputs: ["code", "fileName", "languageType", "hideCopyToClipboard", "hideHeader"] }, { type: SkyDocsPropertyDefinitionsComponent, selector: "sky-docs-property-definitions", inputs: ["config", "propertyType", "showOptionalStatus"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "skyDocsMarkdown": SkyDocsMarkdownPipe, "skyDocsTypeAnchorLinks": SkyDocsTypeAnchorLinksPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1729
1737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkyDocsInterfaceDefinitionComponent, decorators: [{
1730
1738
  type: Component,
1731
- args: [{ selector: 'sky-docs-interface-definition', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"config\"\n class=\"sky-docs-interface-definition sky-docs-type-definition-wrapper\"\n>\n <sky-docs-heading-anchor headingLevel=\"3\" [anchorId]=\"config.anchorId\">\n {{ config.name }}\n </sky-docs-heading-anchor>\n\n <sky-docs-safe-html\n *ngIf=\"config.description\"\n class=\"sky-docs-interface-definition-description\"\n [innerHtml]=\"config.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-property-definitions\n *ngIf=\"config.properties\"\n [config]=\"{ properties: config.properties }\"\n [showOptionalStatus]=\"false\"\n ></sky-docs-property-definitions>\n</div>\n" }]
1739
+ args: [{ selector: 'sky-docs-interface-definition', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"config\"\n class=\"sky-docs-interface-definition sky-docs-type-definition-wrapper\"\n>\n <sky-docs-heading-anchor headingLevel=\"3\" [anchorId]=\"config.anchorId\">\n {{ config.name }}\n </sky-docs-heading-anchor>\n\n <sky-docs-safe-html\n *ngIf=\"config.description\"\n class=\"sky-docs-interface-definition-description\"\n [innerHtml]=\"config.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-property-definitions\n *ngIf=\"config.properties?.length\"\n [config]=\"{ properties: config.properties }\"\n [showOptionalStatus]=\"false\"\n ></sky-docs-property-definitions>\n</div>\n" }]
1732
1740
  }], ctorParameters: function () { return [{ type: SkyDocsTypeDefinitionsFormatService }]; }, propDecorators: { config: [{
1733
1741
  type: Input
1734
1742
  }] } });
1735
1743
 
1744
+ var _SkyDocsMethodDefinitionsComponent__config, _SkyDocsMethodDefinitionsComponent_changeDetector, _SkyDocsMethodDefinitionsComponent_formatService, _SkyDocsMethodDefinitionsComponent_mediaQueryService;
1736
1745
  class SkyDocsMethodDefinitionsComponent {
1737
1746
  constructor(changeDetector, formatService, mediaQueryService) {
1738
- this.changeDetector = changeDetector;
1739
- this.formatService = formatService;
1740
- this.mediaQueryService = mediaQueryService;
1741
1747
  this.deprecationWarningPrefix = `<span class="sky-text-warning"></span>**Deprecated.** `;
1742
1748
  this.isMobile = true;
1749
+ _SkyDocsMethodDefinitionsComponent__config.set(this, void 0);
1750
+ _SkyDocsMethodDefinitionsComponent_changeDetector.set(this, void 0);
1751
+ _SkyDocsMethodDefinitionsComponent_formatService.set(this, void 0);
1752
+ _SkyDocsMethodDefinitionsComponent_mediaQueryService.set(this, void 0);
1753
+ __classPrivateFieldSet(this, _SkyDocsMethodDefinitionsComponent_changeDetector, changeDetector, "f");
1754
+ __classPrivateFieldSet(this, _SkyDocsMethodDefinitionsComponent_formatService, formatService, "f");
1755
+ __classPrivateFieldSet(this, _SkyDocsMethodDefinitionsComponent_mediaQueryService, mediaQueryService, "f");
1743
1756
  }
1744
1757
  set config(value) {
1745
- this._config = value;
1758
+ __classPrivateFieldSet(this, _SkyDocsMethodDefinitionsComponent__config, value, "f");
1746
1759
  this.updateView();
1747
1760
  }
1748
1761
  get config() {
1749
- return this._config || {};
1762
+ return __classPrivateFieldGet(this, _SkyDocsMethodDefinitionsComponent__config, "f") || {};
1750
1763
  }
1751
1764
  ngOnInit() {
1752
- this.mediaQueryService.subscribe((breakpoints) => {
1765
+ __classPrivateFieldGet(this, _SkyDocsMethodDefinitionsComponent_mediaQueryService, "f").subscribe((breakpoints) => {
1753
1766
  this.isMobile = breakpoints <= SkyMediaBreakpoints.sm;
1754
- this.changeDetector.markForCheck();
1767
+ __classPrivateFieldGet(this, _SkyDocsMethodDefinitionsComponent_changeDetector, "f").markForCheck();
1755
1768
  });
1756
1769
  }
1757
1770
  updateView() {
1758
- var _a, _b;
1759
- this.methods = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.methods) === null || _b === void 0 ? void 0 : _b.map((method) => {
1760
- const vm = {
1761
- callSignature: method.type.callSignature,
1762
- codeExample: method.codeExample,
1763
- codeExampleLanguage: method.codeExampleLanguage,
1764
- deprecationWarning: method.deprecationWarning,
1765
- description: method.description,
1766
- formattedName: this.formatService.getFormattedMethodName(method),
1767
- sourceCode: this.formatService.getMethodSourceCode(method),
1768
- };
1769
- return vm;
1770
- });
1771
+ var _a;
1772
+ if (((_a = this.config.methods) === null || _a === void 0 ? void 0 : _a.length) > 0) {
1773
+ this.methods = [];
1774
+ this.staticMethods = [];
1775
+ for (let method of this.config.methods) {
1776
+ const vm = {
1777
+ callSignature: method.type.callSignature,
1778
+ codeExample: method.codeExample,
1779
+ codeExampleLanguage: method.codeExampleLanguage,
1780
+ deprecationWarning: method.deprecationWarning,
1781
+ description: method.description,
1782
+ formattedName: __classPrivateFieldGet(this, _SkyDocsMethodDefinitionsComponent_formatService, "f").getFormattedMethodName(method),
1783
+ sourceCode: __classPrivateFieldGet(this, _SkyDocsMethodDefinitionsComponent_formatService, "f").getMethodSourceCode(method),
1784
+ isStatic: method.isStatic,
1785
+ };
1786
+ if (vm.isStatic) {
1787
+ this.staticMethods.push(vm);
1788
+ }
1789
+ else {
1790
+ this.methods.push(vm);
1791
+ }
1792
+ }
1793
+ }
1771
1794
  }
1772
1795
  }
1796
+ _SkyDocsMethodDefinitionsComponent__config = new WeakMap(), _SkyDocsMethodDefinitionsComponent_changeDetector = new WeakMap(), _SkyDocsMethodDefinitionsComponent_formatService = new WeakMap(), _SkyDocsMethodDefinitionsComponent_mediaQueryService = new WeakMap();
1773
1797
  SkyDocsMethodDefinitionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkyDocsMethodDefinitionsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: SkyDocsTypeDefinitionsFormatService }, { token: i2$4.SkyMediaQueryService }], target: i0.ɵɵFactoryTarget.Component });
1774
- SkyDocsMethodDefinitionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SkyDocsMethodDefinitionsComponent, selector: "sky-docs-method-definitions", inputs: { config: "config" }, ngImport: i0, template: "<div *ngIf=\"methods\" class=\"sky-docs-method-definitions\">\n <table *ngIf=\"!isMobile; else mobileTemplate\" class=\"sky-docs-table\">\n <tr class=\"sky-docs-table-row\">\n <th\n class=\"sky-docs-table-column-header sky-docs-table-column-header-name\"\n >\n Methods\n </th>\n <th\n class=\"\n sky-docs-table-column-header sky-docs-table-column-header-description\n \"\n >\n Description\n </th>\n </tr>\n <tr *ngFor=\"let method of methods\" class=\"sky-docs-table-row\">\n <td\n class=\"sky-docs-table-cell sky-docs-method-definitions-table-cell-name\"\n >\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n <td\n class=\"\n sky-docs-table-cell sky-docs-method-definitions-table-cell-description\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n </tr>\n </table>\n\n <ng-template #mobileTemplate>\n <dl class=\"sky-docs-method-definition-list\">\n <div\n *ngFor=\"let method of methods\"\n class=\"sky-docs-method-definition-list-item\"\n >\n <dt class=\"sky-field-label\">Methods</dt>\n <dd class=\"sky-docs-method-definitions-dd-name\">\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n <dt class=\"sky-field-label\">Description</dt>\n <dd class=\"sky-docs-method-definitions-dd-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n </div>\n </dl>\n </ng-template>\n</div>\n\n<ng-template let-method #nameTemplate>\n <sky-code\n ><span\n [innerHtml]=\"\n method.formattedName | skyDocsTypeAnchorLinks: 'no-code-tags'\n \"\n ></span\n ></sky-code>\n</ng-template>\n\n<ng-template let-method #descriptionTemplate>\n <sky-docs-safe-html\n *ngIf=\"method.deprecationWarning !== undefined\"\n class=\"sky-docs-method-definition-deprecation-warning\"\n [innerHtml]=\"\n deprecationWarningPrefix + method.deprecationWarning\n | skyDocsTypeAnchorLinks\n | skyDocsMarkdown\n \"\n ></sky-docs-safe-html>\n\n <sky-docs-safe-html\n *ngIf=\"method.description\"\n class=\"sky-docs-method-definition-description\"\n [innerHtml]=\"method.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"method.sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"method.sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-call-signature-definition\n *ngIf=\"method.callSignature\"\n [config]=\"method.callSignature\"\n ></sky-docs-call-signature-definition>\n\n <ng-container *ngIf=\"method.codeExample\">\n <h4 class=\"sky-docs-method-definition-heading\">Example</h4>\n <sky-code-block\n *ngIf=\"method.codeExample\"\n class=\"sky-docs-code-block\"\n languageType=\"method.codeExampleLanguage\"\n [code]=\"method.codeExample\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n </ng-container>\n</ng-template>\n", styles: [":host{margin:15px 0}.sky-docs-method-definitions{width:100%;max-width:100%;overflow:auto}.sky-docs-table-column-header-name{width:25%}.sky-docs-method-definition-label-optional{color:#686c73}.sky-docs-method-definition-list{margin:0}.sky-docs-method-definition-list-item{border-bottom:1px dotted #cdcfd2;margin:10px 0}.sky-docs-method-definition-list-item .sky-field-label{margin:10px 0}\n"], components: [{ type: i3$1.λ1, selector: "sky-code" }, { type: SkyDocsSafeHtmlComponent, selector: "sky-docs-safe-html", inputs: ["innerHtml"] }, { type: i3$1.λ2, selector: "sky-code-block", inputs: ["code", "fileName", "languageType", "hideCopyToClipboard", "hideHeader"] }, { type: SkyDocsCallSignatureDefinitionComponent, selector: "sky-docs-call-signature-definition", inputs: ["config"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "skyDocsTypeAnchorLinks": SkyDocsTypeAnchorLinksPipe, "skyDocsMarkdown": SkyDocsMarkdownPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1798
+ SkyDocsMethodDefinitionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SkyDocsMethodDefinitionsComponent, selector: "sky-docs-method-definitions", inputs: { config: "config" }, ngImport: i0, template: "<div\n *ngIf=\"methods?.length > 0 || staticMethods?.length > 0\"\n class=\"sky-docs-method-definitions\"\n>\n <ng-container *ngIf=\"!isMobile; else mobileTemplate\">\n <table\n class=\"sky-docs-table sky-docs-static-method-definitions\"\n *ngIf=\"staticMethods?.length > 0\"\n >\n <tr class=\"sky-docs-table-row\">\n <th\n class=\"sky-docs-table-column-header sky-docs-table-column-header-name\"\n >\n Static methods\n </th>\n <th\n class=\"\n sky-docs-table-column-header\n sky-docs-table-column-header-description\n \"\n >\n Description\n </th>\n </tr>\n <tr *ngFor=\"let method of staticMethods\" class=\"sky-docs-table-row\">\n <td\n class=\"\n sky-docs-table-cell sky-docs-method-definitions-table-cell-name\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n <td\n class=\"\n sky-docs-table-cell\n sky-docs-method-definitions-table-cell-description\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n </tr>\n </table>\n <table\n class=\"sky-docs-table sky-docs-standard-method-definitions\"\n *ngIf=\"methods?.length > 0\"\n >\n <tr class=\"sky-docs-table-row\">\n <th\n class=\"sky-docs-table-column-header sky-docs-table-column-header-name\"\n >\n Methods\n </th>\n <th\n class=\"\n sky-docs-table-column-header\n sky-docs-table-column-header-description\n \"\n >\n Description\n </th>\n </tr>\n <tr *ngFor=\"let method of methods\" class=\"sky-docs-table-row\">\n <td\n class=\"\n sky-docs-table-cell sky-docs-method-definitions-table-cell-name\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n <td\n class=\"\n sky-docs-table-cell\n sky-docs-method-definitions-table-cell-description\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n </tr>\n </table>\n </ng-container>\n\n <ng-template #mobileTemplate>\n <dl\n class=\"sky-docs-method-definition-list sky-docs-static-method-definitions\"\n *ngIf=\"staticMethods?.length > 0\"\n >\n <div\n *ngFor=\"let method of staticMethods\"\n class=\"sky-docs-method-definition-list-item\"\n >\n <dt class=\"sky-field-label\">Static methods</dt>\n <dd class=\"sky-docs-method-definitions-dd-name\">\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n <dt class=\"sky-field-label\">Description</dt>\n <dd class=\"sky-docs-method-definitions-dd-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n </div>\n </dl>\n <dl\n class=\"\n sky-docs-method-definition-list sky-docs-standard-method-definitions\n \"\n *ngIf=\"methods?.length > 0\"\n >\n <div\n *ngFor=\"let method of methods\"\n class=\"sky-docs-method-definition-list-item\"\n >\n <dt class=\"sky-field-label\">Methods</dt>\n <dd class=\"sky-docs-method-definitions-dd-name\">\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n <dt class=\"sky-field-label\">Description</dt>\n <dd class=\"sky-docs-method-definitions-dd-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n </div>\n </dl>\n </ng-template>\n</div>\n\n<ng-template let-method #nameTemplate>\n <sky-code\n ><span\n [innerHtml]=\"\n method.formattedName | skyDocsTypeAnchorLinks: 'no-code-tags'\n \"\n ></span\n ></sky-code>\n</ng-template>\n\n<ng-template let-method #descriptionTemplate>\n <sky-docs-safe-html\n *ngIf=\"method.deprecationWarning !== undefined\"\n class=\"sky-docs-method-definition-deprecation-warning\"\n [innerHtml]=\"\n deprecationWarningPrefix + method.deprecationWarning\n | skyDocsTypeAnchorLinks\n | skyDocsMarkdown\n \"\n ></sky-docs-safe-html>\n\n <sky-docs-safe-html\n *ngIf=\"method.description\"\n class=\"sky-docs-method-definition-description\"\n [innerHtml]=\"method.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"method.sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"method.sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-call-signature-definition\n *ngIf=\"method.callSignature\"\n [config]=\"method.callSignature\"\n ></sky-docs-call-signature-definition>\n\n <ng-container *ngIf=\"method.codeExample\">\n <h4 class=\"sky-docs-method-definition-heading\">Example</h4>\n <sky-code-block\n *ngIf=\"method.codeExample\"\n class=\"sky-docs-code-block\"\n languageType=\"method.codeExampleLanguage\"\n [code]=\"method.codeExample\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n </ng-container>\n</ng-template>\n", styles: [":host{margin:15px 0}.sky-docs-method-definitions{width:100%;max-width:100%;overflow:auto}.sky-docs-table-column-header-name{width:25%}.sky-docs-method-definition-label-optional{color:#686c73}.sky-docs-method-definition-list{margin:0}.sky-docs-method-definition-list-item{border-bottom:1px dotted #cdcfd2;margin:10px 0}.sky-docs-method-definition-list-item .sky-field-label{margin:10px 0}\n"], components: [{ type: i3$1.λ1, selector: "sky-code" }, { type: SkyDocsSafeHtmlComponent, selector: "sky-docs-safe-html", inputs: ["innerHtml"] }, { type: i3$1.λ2, selector: "sky-code-block", inputs: ["code", "fileName", "languageType", "hideCopyToClipboard", "hideHeader"] }, { type: SkyDocsCallSignatureDefinitionComponent, selector: "sky-docs-call-signature-definition", inputs: ["config"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "skyDocsTypeAnchorLinks": SkyDocsTypeAnchorLinksPipe, "skyDocsMarkdown": SkyDocsMarkdownPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1775
1799
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkyDocsMethodDefinitionsComponent, decorators: [{
1776
1800
  type: Component,
1777
- args: [{ selector: 'sky-docs-method-definitions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"methods\" class=\"sky-docs-method-definitions\">\n <table *ngIf=\"!isMobile; else mobileTemplate\" class=\"sky-docs-table\">\n <tr class=\"sky-docs-table-row\">\n <th\n class=\"sky-docs-table-column-header sky-docs-table-column-header-name\"\n >\n Methods\n </th>\n <th\n class=\"\n sky-docs-table-column-header sky-docs-table-column-header-description\n \"\n >\n Description\n </th>\n </tr>\n <tr *ngFor=\"let method of methods\" class=\"sky-docs-table-row\">\n <td\n class=\"sky-docs-table-cell sky-docs-method-definitions-table-cell-name\"\n >\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n <td\n class=\"\n sky-docs-table-cell sky-docs-method-definitions-table-cell-description\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n </tr>\n </table>\n\n <ng-template #mobileTemplate>\n <dl class=\"sky-docs-method-definition-list\">\n <div\n *ngFor=\"let method of methods\"\n class=\"sky-docs-method-definition-list-item\"\n >\n <dt class=\"sky-field-label\">Methods</dt>\n <dd class=\"sky-docs-method-definitions-dd-name\">\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n <dt class=\"sky-field-label\">Description</dt>\n <dd class=\"sky-docs-method-definitions-dd-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n </div>\n </dl>\n </ng-template>\n</div>\n\n<ng-template let-method #nameTemplate>\n <sky-code\n ><span\n [innerHtml]=\"\n method.formattedName | skyDocsTypeAnchorLinks: 'no-code-tags'\n \"\n ></span\n ></sky-code>\n</ng-template>\n\n<ng-template let-method #descriptionTemplate>\n <sky-docs-safe-html\n *ngIf=\"method.deprecationWarning !== undefined\"\n class=\"sky-docs-method-definition-deprecation-warning\"\n [innerHtml]=\"\n deprecationWarningPrefix + method.deprecationWarning\n | skyDocsTypeAnchorLinks\n | skyDocsMarkdown\n \"\n ></sky-docs-safe-html>\n\n <sky-docs-safe-html\n *ngIf=\"method.description\"\n class=\"sky-docs-method-definition-description\"\n [innerHtml]=\"method.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"method.sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"method.sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-call-signature-definition\n *ngIf=\"method.callSignature\"\n [config]=\"method.callSignature\"\n ></sky-docs-call-signature-definition>\n\n <ng-container *ngIf=\"method.codeExample\">\n <h4 class=\"sky-docs-method-definition-heading\">Example</h4>\n <sky-code-block\n *ngIf=\"method.codeExample\"\n class=\"sky-docs-code-block\"\n languageType=\"method.codeExampleLanguage\"\n [code]=\"method.codeExample\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n </ng-container>\n</ng-template>\n", styles: [":host{margin:15px 0}.sky-docs-method-definitions{width:100%;max-width:100%;overflow:auto}.sky-docs-table-column-header-name{width:25%}.sky-docs-method-definition-label-optional{color:#686c73}.sky-docs-method-definition-list{margin:0}.sky-docs-method-definition-list-item{border-bottom:1px dotted #cdcfd2;margin:10px 0}.sky-docs-method-definition-list-item .sky-field-label{margin:10px 0}\n"] }]
1801
+ args: [{ selector: 'sky-docs-method-definitions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"methods?.length > 0 || staticMethods?.length > 0\"\n class=\"sky-docs-method-definitions\"\n>\n <ng-container *ngIf=\"!isMobile; else mobileTemplate\">\n <table\n class=\"sky-docs-table sky-docs-static-method-definitions\"\n *ngIf=\"staticMethods?.length > 0\"\n >\n <tr class=\"sky-docs-table-row\">\n <th\n class=\"sky-docs-table-column-header sky-docs-table-column-header-name\"\n >\n Static methods\n </th>\n <th\n class=\"\n sky-docs-table-column-header\n sky-docs-table-column-header-description\n \"\n >\n Description\n </th>\n </tr>\n <tr *ngFor=\"let method of staticMethods\" class=\"sky-docs-table-row\">\n <td\n class=\"\n sky-docs-table-cell sky-docs-method-definitions-table-cell-name\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n <td\n class=\"\n sky-docs-table-cell\n sky-docs-method-definitions-table-cell-description\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n </tr>\n </table>\n <table\n class=\"sky-docs-table sky-docs-standard-method-definitions\"\n *ngIf=\"methods?.length > 0\"\n >\n <tr class=\"sky-docs-table-row\">\n <th\n class=\"sky-docs-table-column-header sky-docs-table-column-header-name\"\n >\n Methods\n </th>\n <th\n class=\"\n sky-docs-table-column-header\n sky-docs-table-column-header-description\n \"\n >\n Description\n </th>\n </tr>\n <tr *ngFor=\"let method of methods\" class=\"sky-docs-table-row\">\n <td\n class=\"\n sky-docs-table-cell sky-docs-method-definitions-table-cell-name\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n <td\n class=\"\n sky-docs-table-cell\n sky-docs-method-definitions-table-cell-description\n \"\n >\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </td>\n </tr>\n </table>\n </ng-container>\n\n <ng-template #mobileTemplate>\n <dl\n class=\"sky-docs-method-definition-list sky-docs-static-method-definitions\"\n *ngIf=\"staticMethods?.length > 0\"\n >\n <div\n *ngFor=\"let method of staticMethods\"\n class=\"sky-docs-method-definition-list-item\"\n >\n <dt class=\"sky-field-label\">Static methods</dt>\n <dd class=\"sky-docs-method-definitions-dd-name\">\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n <dt class=\"sky-field-label\">Description</dt>\n <dd class=\"sky-docs-method-definitions-dd-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n </div>\n </dl>\n <dl\n class=\"\n sky-docs-method-definition-list sky-docs-standard-method-definitions\n \"\n *ngIf=\"methods?.length > 0\"\n >\n <div\n *ngFor=\"let method of methods\"\n class=\"sky-docs-method-definition-list-item\"\n >\n <dt class=\"sky-field-label\">Methods</dt>\n <dd class=\"sky-docs-method-definitions-dd-name\">\n <ng-template\n [ngTemplateOutlet]=\"nameTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n <dt class=\"sky-field-label\">Description</dt>\n <dd class=\"sky-docs-method-definitions-dd-description\">\n <ng-template\n [ngTemplateOutlet]=\"descriptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: method }\"\n ></ng-template>\n </dd>\n </div>\n </dl>\n </ng-template>\n</div>\n\n<ng-template let-method #nameTemplate>\n <sky-code\n ><span\n [innerHtml]=\"\n method.formattedName | skyDocsTypeAnchorLinks: 'no-code-tags'\n \"\n ></span\n ></sky-code>\n</ng-template>\n\n<ng-template let-method #descriptionTemplate>\n <sky-docs-safe-html\n *ngIf=\"method.deprecationWarning !== undefined\"\n class=\"sky-docs-method-definition-deprecation-warning\"\n [innerHtml]=\"\n deprecationWarningPrefix + method.deprecationWarning\n | skyDocsTypeAnchorLinks\n | skyDocsMarkdown\n \"\n ></sky-docs-safe-html>\n\n <sky-docs-safe-html\n *ngIf=\"method.description\"\n class=\"sky-docs-method-definition-description\"\n [innerHtml]=\"method.description | skyDocsTypeAnchorLinks | skyDocsMarkdown\"\n ></sky-docs-safe-html>\n\n <sky-code-block\n *ngIf=\"method.sourceCode\"\n class=\"sky-docs-code-block\"\n languageType=\"typescript\"\n [code]=\"method.sourceCode\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n\n <sky-docs-call-signature-definition\n *ngIf=\"method.callSignature\"\n [config]=\"method.callSignature\"\n ></sky-docs-call-signature-definition>\n\n <ng-container *ngIf=\"method.codeExample\">\n <h4 class=\"sky-docs-method-definition-heading\">Example</h4>\n <sky-code-block\n *ngIf=\"method.codeExample\"\n class=\"sky-docs-code-block\"\n languageType=\"method.codeExampleLanguage\"\n [code]=\"method.codeExample\"\n [hideHeader]=\"true\"\n ></sky-code-block>\n </ng-container>\n</ng-template>\n", styles: [":host{margin:15px 0}.sky-docs-method-definitions{width:100%;max-width:100%;overflow:auto}.sky-docs-table-column-header-name{width:25%}.sky-docs-method-definition-label-optional{color:#686c73}.sky-docs-method-definition-list{margin:0}.sky-docs-method-definition-list-item{border-bottom:1px dotted #cdcfd2;margin:10px 0}.sky-docs-method-definition-list-item .sky-field-label{margin:10px 0}\n"] }]
1778
1802
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: SkyDocsTypeDefinitionsFormatService }, { type: i2$4.SkyMediaQueryService }]; }, propDecorators: { config: [{
1779
1803
  type: Input
1780
1804
  }] } });
@@ -2293,6 +2317,7 @@ class SkyDocsTypeDocAdapterService {
2293
2317
  name: this.getPropertyName(child),
2294
2318
  type: this.getTypeDefinition(child),
2295
2319
  isStatic: !!((_a = child.flags) === null || _a === void 0 ? void 0 : _a.isStatic),
2320
+ parentName: entry.name,
2296
2321
  };
2297
2322
  // Comments for methods are stored in a different location.
2298
2323
  const comment = child.signatures[0].comment;
@@ -2359,7 +2384,7 @@ class SkyDocsTypeDocAdapterService {
2359
2384
  });
2360
2385
  }
2361
2386
  getTypeDefinition(child) {
2362
- var _a;
2387
+ var _a, _b, _c;
2363
2388
  let definition;
2364
2389
  const kindString = child.kindString;
2365
2390
  switch (kindString) {
@@ -2387,8 +2412,11 @@ class SkyDocsTypeDocAdapterService {
2387
2412
  definition.unionTypes = child.type.types.map((t) => this.getTypeDefinition({ type: t }));
2388
2413
  }
2389
2414
  // Convert reflection types.
2390
- if (child.type.type === 'reflection') {
2391
- const declaration = child.type.declaration;
2415
+ if (child.type.type === 'reflection' ||
2416
+ ((_b = child.type.elementType) === null || _b === void 0 ? void 0 : _b.type) === 'reflection') {
2417
+ const declaration = ((_c = child.type.elementType) === null || _c === void 0 ? void 0 : _c.type) === 'reflection'
2418
+ ? child.type.elementType.declaration
2419
+ : child.type.declaration;
2392
2420
  /*istanbul ignore else */
2393
2421
  if (declaration) {
2394
2422
  if (declaration.signatures) {