@lenne.tech/ng-base 14.0.4 → 14.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/base-components/base-components.module.d.ts +20 -17
  2. package/base-components/components/model-form/model-form.component.d.ts +9 -4
  3. package/base-components/components/model-form-sub/model-form-sub.component.d.ts +7 -3
  4. package/base-components/components/model-table/model-table.component.d.ts +14 -5
  5. package/base-components/components/refence-input/refence-input.component.d.ts +10 -4
  6. package/{shared → base-components}/directives/back-button.directive.d.ts +1 -1
  7. package/{src → base-components}/directives/context-menu.directive.d.ts +0 -0
  8. package/{shared → base-components}/directives/sort.directive.d.ts +2 -2
  9. package/base-components/public-api.d.ts +3 -0
  10. package/esm2020/base-components/base-components.module.mjs +16 -1
  11. package/esm2020/base-components/components/model-form/model-form.component.mjs +87 -58
  12. package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +9 -3
  13. package/esm2020/base-components/components/model-table/model-table.component.mjs +30 -13
  14. package/esm2020/base-components/components/refence-input/refence-input.component.mjs +28 -22
  15. package/esm2020/base-components/components/tags/tags.component.mjs +2 -2
  16. package/esm2020/base-components/components/upload-image/upload-image.component.mjs +3 -3
  17. package/esm2020/{shared → base-components}/directives/back-button.directive.mjs +2 -2
  18. package/esm2020/base-components/directives/context-menu.directive.mjs +108 -0
  19. package/esm2020/base-components/directives/sort.directive.mjs +54 -0
  20. package/esm2020/base-components/public-api.mjs +5 -1
  21. package/esm2020/public-api.mjs +1 -2
  22. package/esm2020/shared/classes/graphql-meta.class.mjs +52 -28
  23. package/esm2020/shared/classes/graphql-type.class.mjs +2 -1
  24. package/esm2020/shared/classes/sort.class.mjs +1 -8
  25. package/esm2020/shared/public-api.mjs +2 -4
  26. package/esm2020/shared/services/auth.service.mjs +7 -1
  27. package/esm2020/shared/services/cms.service.mjs +75 -0
  28. package/esm2020/shared/services/graphql.service.mjs +30 -36
  29. package/esm2020/src/base.module.mjs +1 -5
  30. package/fesm2015/lenne.tech-ng-base-base-components.mjs +361 -112
  31. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
  32. package/fesm2015/lenne.tech-ng-base-shared.mjs +209 -190
  33. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
  34. package/fesm2015/lenne.tech-ng-base.mjs +2 -113
  35. package/fesm2015/lenne.tech-ng-base.mjs.map +1 -1
  36. package/fesm2020/lenne.tech-ng-base-base-components.mjs +340 -97
  37. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
  38. package/fesm2020/lenne.tech-ng-base-shared.mjs +207 -188
  39. package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
  40. package/fesm2020/lenne.tech-ng-base.mjs +2 -112
  41. package/fesm2020/lenne.tech-ng-base.mjs.map +1 -1
  42. package/package.json +1 -1
  43. package/public-api.d.ts +0 -1
  44. package/shared/classes/graphql-meta.class.d.ts +7 -4
  45. package/shared/classes/graphql-type.class.d.ts +1 -0
  46. package/shared/classes/sort.class.d.ts +0 -7
  47. package/shared/public-api.d.ts +1 -2
  48. package/shared/services/cms.service.d.ts +23 -0
  49. package/shared/services/graphql.service.d.ts +4 -4
  50. package/src/base.module.d.ts +9 -10
  51. package/esm2020/shared/directives/sort.directive.mjs +0 -54
  52. package/esm2020/src/directives/context-menu.directive.mjs +0 -109
@@ -3,7 +3,6 @@ import { Injectable } from '@angular/core';
3
3
  import { GraphQLRequestType } from '../enums/graphql-request-type.enum';
4
4
  import { Observable, throwError } from 'rxjs';
5
5
  import { GraphQLEnum } from '../classes/graphql-enum.class';
6
- import { GraphQLType } from '../classes/graphql-type.class';
7
6
  import { sha256 } from 'js-sha256';
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "apollo-angular";
@@ -73,7 +72,7 @@ export class GraphQLService {
73
72
  fieldsData.usedFields.sort();
74
73
  fieldsData.schemaFields.sort();
75
74
  const filtered = fieldsData.schemaFields.filter((field) => !fieldsData.usedFields.includes(field));
76
- const unused = this.graphQLTypeCollectionToStringArray(allowedFields).filter((field) => !fieldsData.usedFields.includes(field));
75
+ const unused = this.graphQLTypeToStringArray(allowedFields).filter((field) => !fieldsData.usedFields.includes(field));
77
76
  console.log({ fieldsData, filtered, unused });
78
77
  }
79
78
  fields = fieldsData.fieldsString;
@@ -99,7 +98,7 @@ export class GraphQLService {
99
98
  argsData.usedArgs.sort();
100
99
  argsData.schemaArgs.sort();
101
100
  const filtered = argsData.schemaArgs.filter((field) => !argsData.usedArgs.includes(field));
102
- const unused = this.graphQLTypeCollectionToStringArray(allowedArgs)
101
+ const unused = this.graphQLTypeToStringArray(allowedArgs)
103
102
  .sort()
104
103
  .filter((field) => !argsData.usedArgs.includes(field));
105
104
  console.log({ argsData, filtered, unused });
@@ -166,25 +165,21 @@ export class GraphQLService {
166
165
  /**
167
166
  * Get fields / args from IGraphQLTypeCollection
168
167
  */
169
- graphQLTypeCollectionToStringArray(collection, current = '', result = [], cacheNode = []) {
170
- if (collection) {
171
- if (collection instanceof GraphQLType) {
172
- result.push(current);
173
- }
174
- else {
175
- if (current?.includes('.')) {
176
- cacheNode.push(current.split('.')[1]);
177
- }
178
- else if (current) {
179
- cacheNode.push(current);
180
- }
181
- for (const key of Object.keys(collection)) {
182
- if (current === key || cacheNode.includes(key)) {
183
- continue;
184
- }
185
- this.graphQLTypeCollectionToStringArray(collection[key], current ? current + '.' + key : key, result, cacheNode);
186
- }
168
+ graphQLTypeToStringArray(graphQLType, current = '', result = [], cacheNode = []) {
169
+ if (!graphQLType) {
170
+ return result;
171
+ }
172
+ if (current?.includes('.')) {
173
+ cacheNode.push(current.split('.')[1]);
174
+ }
175
+ else if (current) {
176
+ cacheNode.push(current);
177
+ }
178
+ for (const key of Object.keys(graphQLType.fields)) {
179
+ if (current === key || cacheNode.includes(key)) {
180
+ continue;
187
181
  }
182
+ this.graphQLTypeToStringArray(graphQLType.fields[key], current ? current + '.' + key : key, result, cacheNode);
188
183
  }
189
184
  return result;
190
185
  }
@@ -209,18 +204,18 @@ export class GraphQLService {
209
204
  const result = [];
210
205
  // Process array
211
206
  if (Array.isArray(args)) {
212
- const allowedKeys = allowed ? Object.keys(allowed) : null;
207
+ const allowedKeys = allowed ? Object.keys(allowed.fields) : null;
213
208
  for (const item of args) {
214
209
  let key = null;
215
210
  if (allowed) {
216
- if (allowed.length < 1) {
211
+ if (!allowedKeys || allowedKeys.length < 1) {
217
212
  break;
218
213
  }
219
- key = allowedKeys?.shift();
214
+ key = allowedKeys.shift();
220
215
  }
221
216
  // Process value
222
217
  result.push(this.prepareArguments(item, {
223
- allowed: key ? allowed[key] : null,
218
+ allowed: key ? allowed.fields[key] : null,
224
219
  level: level + 1,
225
220
  parent: parent + key + '.',
226
221
  schemaArgs,
@@ -252,7 +247,7 @@ export class GraphQLService {
252
247
  schemaArgs.push(currentKey);
253
248
  // If the allowed key handling is enabled and the current key is not included in the list of allowed keys,
254
249
  // the current key will be skipped
255
- if (allowed && !allowed[key]) {
250
+ if (allowed && !allowed.fields[key]) {
256
251
  continue;
257
252
  }
258
253
  // Skip value if not exists
@@ -275,7 +270,7 @@ export class GraphQLService {
275
270
  result.push(key +
276
271
  ': [' +
277
272
  value.map((item) => this.prepareArguments(item, {
278
- allowed: allowed[key],
273
+ allowed: allowed.fields[key],
279
274
  level: level + 1,
280
275
  parent: currentKey + '.',
281
276
  schemaArgs,
@@ -293,7 +288,7 @@ export class GraphQLService {
293
288
  // Value is a string
294
289
  else if (typeof value === 'string') {
295
290
  // Enum (doesn't need quotation marks)
296
- if (allowed[key].isEnum) {
291
+ if (allowed.fields[key].isEnum) {
297
292
  additionalResult += value;
298
293
  }
299
294
  // String
@@ -308,7 +303,7 @@ export class GraphQLService {
308
303
  // Others
309
304
  else {
310
305
  additionalResult += this.prepareArguments(value, {
311
- allowed: allowed[key],
306
+ allowed: allowed.fields[key],
312
307
  level: level + 1,
313
308
  parent: currentKey + '.',
314
309
  schemaArgs,
@@ -357,8 +352,7 @@ export class GraphQLService {
357
352
  }
358
353
  // Process string
359
354
  if (typeof fields === 'string') {
360
- if (allowed &&
361
- ((typeof allowed === 'string' && allowed !== fields) || (typeof allowed === 'object' && !allowed[fields]))) {
355
+ if (allowed && !allowed.fields[fields]) {
362
356
  return { fieldsString, schemaFields, usedFields };
363
357
  }
364
358
  return { fieldsString: '\n' + ' '.repeat(spaces).repeat(tab) + fields, schemaFields, usedFields };
@@ -381,14 +375,14 @@ export class GraphQLService {
381
375
  }
382
376
  const currentPath = parent + item;
383
377
  schemaFields.push(currentPath);
384
- if (allowed && !allowed?.[item]) {
378
+ if (allowed && !allowed.fields[item]) {
385
379
  continue;
386
380
  }
387
381
  usedFields.push(currentPath);
388
382
  fieldsString =
389
383
  fieldsString +
390
384
  this.prepareFields(item, {
391
- allowed: typeof allowed?.[item] === 'object' && !(allowed?.[item] instanceof GraphQLType) ? allowed?.[item] : item,
385
+ allowed: null,
392
386
  parent: currentPath + '.',
393
387
  spaces,
394
388
  schemaFields,
@@ -402,7 +396,7 @@ export class GraphQLService {
402
396
  for (const [key, val] of Object.entries(fields)) {
403
397
  const currentPath = parent + key;
404
398
  schemaFields.push(currentPath);
405
- if (allowed && !allowed[key]) {
399
+ if (allowed && !allowed.fields[key]) {
406
400
  continue;
407
401
  }
408
402
  usedFields.push(currentPath);
@@ -418,7 +412,7 @@ export class GraphQLService {
418
412
  ' ' +
419
413
  '{' +
420
414
  this.prepareFields(val, {
421
- allowed: typeof allowed?.[key] === 'object' && !(allowed?.[key] instanceof GraphQLType) ? allowed?.[key] : key,
415
+ allowed: allowed.fields[key],
422
416
  parent: currentPath + '.',
423
417
  spaces,
424
418
  schemaFields,
@@ -443,4 +437,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
443
437
  providedIn: 'root',
444
438
  }]
445
439
  }], ctorParameters: function () { return [{ type: i1.Apollo }, { type: i2.GraphQLMetaService }]; } });
446
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQUVuQzs7R0FFRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBQ3pCOztPQUVHO0lBQ0gsWUFBc0IsTUFBYyxFQUFZLGtCQUFzQztRQUFoRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVksdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFMUY7O09BRUc7SUFDSSxPQUFPLENBQUMsT0FBZSxFQUFFLFVBQTJCLEVBQUU7UUFDM0Qsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUN4QztRQUVELGFBQWE7UUFDYixNQUFNLE1BQU0sR0FBRztZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsTUFBTSxFQUFFLElBQUk7WUFDWixHQUFHLEVBQUUsS0FBSztZQUNWLEtBQUssRUFBRSxJQUFJO1lBQ1gsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7WUFDOUIsR0FBRyxPQUFPO1NBQ1gsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUU7WUFDMUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUMzQztRQUVELHFDQUFxQztRQUNyQyxJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNyQztRQUVELE1BQU07UUFDTixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUVELGVBQWU7UUFDZixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbkMsV0FBVztZQUNYLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RFLGlCQUFpQjtnQkFDakIsSUFBSSxNQUFNLENBQUM7Z0JBQ1gsSUFBSSxhQUFhLENBQUM7Z0JBRWxCLFdBQVc7Z0JBQ1gsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUN2QjtnQkFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7b0JBQ2pCLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFFL0QsV0FBVztvQkFDWCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7cUJBQ2hDO29CQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTt3QkFDbkQsT0FBTyxFQUFFLGFBQWE7cUJBQ3ZCLENBQUMsQ0FBQztvQkFFSCxrQkFBa0I7b0JBQ2xCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUM3QixVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUMvQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNuRyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUMxRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDbEQsQ0FBQzt3QkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO3FCQUMvQztvQkFFRCxNQUFNLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztpQkFDbEM7Z0JBRUQsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNyQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBQy9CO2dCQUVELGFBQWE7Z0JBQ2IsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUN6QjtnQkFFRCxtQkFBbUI7Z0JBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUVqRSxtQkFBbUI7Z0JBQ25CLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztpQkFDOUI7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQ3ZELE9BQU8sRUFBRSxXQUFXO2lCQUNyQixDQUFDLENBQUM7Z0JBRUgsZ0JBQWdCO2dCQUNoQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDekIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDM0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLFdBQVcsQ0FBQzt5QkFDaEUsSUFBSSxFQUFFO3lCQUNOLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUM3QztnQkFFRCxNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQztnQkFFeEMsTUFBTTtnQkFDTixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3BFO2dCQUVELGtCQUFrQjtnQkFDbEIsTUFBTSxZQUFZLEdBQUcsTUFBTTtvQkFDekIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQzVELENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFFdEQsTUFBTTtnQkFDTixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7aUJBQy9CO2dCQUVELE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUM7Z0JBRXBDLE1BQU07Z0JBQ04sSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLElBQUksQ0FBQztnQkFDVCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLENBQUMsUUFBUSxFQUFFO29CQUMvQyxJQUFJLEdBQUcsUUFBUSxDQUFDO29CQUNoQixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDckM7cUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLFlBQVksRUFBRTtvQkFDMUQsSUFBSSxHQUFHLFdBQVcsQ0FBQztvQkFDbkIsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNuQixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDckM7Z0JBRUEsSUFBSSxDQUFDLE1BQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQzNDLENBQUMsTUFBVyxFQUFFLEVBQUU7b0JBQ2QsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUVuRixjQUFjO29CQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO3dCQUNqQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN2QjtvQkFFRCxvQkFBb0I7eUJBQ2YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUM1QixVQUFVLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDaEIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztxQkFDSDtvQkFFRCxXQUFXO3lCQUNOO3dCQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDekM7b0JBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLFlBQVksRUFBRTt3QkFDbkQsT0FBTzt3QkFDUCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ3ZCO2dCQUNILENBQUMsRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNiLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sa0NBQWtDLENBQzFDLFVBQWtDLEVBQ2xDLE9BQU8sR0FBRyxFQUFFLEVBQ1osTUFBTSxHQUFHLEVBQUUsRUFDWCxTQUFTLEdBQUcsRUFBRTtRQUVkLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxVQUFVLFlBQVksV0FBVyxFQUFFO2dCQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNMLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNLElBQUksT0FBTyxFQUFFO29CQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN6QjtnQkFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3pDLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUM5QyxTQUFTO3FCQUNWO29CQUNELElBQUksQ0FBQyxrQ0FBa0MsQ0FDckMsVUFBVSxDQUFDLEdBQUcsQ0FBMkIsRUFDekMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUNuQyxNQUFNLEVBQ04sU0FBUyxDQUNWLENBQUM7aUJBQ0g7YUFDRjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sZ0JBQWdCLENBQ3hCLElBQVMsRUFDVCxVQU1JLEVBQUU7UUFFTix3QkFBd0I7UUFDeEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRztZQUN2RCxPQUFPLEVBQUUsSUFBSTtZQUNiLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxFQUFFLEVBQUU7WUFDVixVQUFVLEVBQUUsRUFBRTtZQUNkLFFBQVEsRUFBRSxFQUFFO1lBQ1osR0FBRyxPQUFPO1NBQ1gsQ0FBQztRQUVGLGFBQWE7UUFDYixJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDakQ7UUFFRCxZQUFZO1FBQ1osTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLGdCQUFnQjtRQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUU7Z0JBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztnQkFDZixJQUFJLE9BQU8sRUFBRTtvQkFDWCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUN0QixNQUFNO3FCQUNQO29CQUNELEdBQUcsR0FBRyxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7aUJBQzVCO2dCQUVELGdCQUFnQjtnQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO29CQUMxQixPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ2xDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQztvQkFDaEIsTUFBTSxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRztvQkFDMUIsVUFBVTtvQkFDVixRQUFRO2lCQUNULENBQUMsQ0FBQyxVQUFVLENBQ2QsQ0FBQzthQUNIO1lBRUQsb0NBQW9DO1lBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDakIsbURBQW1EO2dCQUNuRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ2YsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO2lCQUM1RTtnQkFFRCx1REFBdUQ7cUJBQ2xEO29CQUNILE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztpQkFDNUU7YUFDRjtTQUNGO1FBRUQsaUJBQWlCO2FBQ1osSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDakMsd0JBQXdCO1lBQ3hCLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUNuRDtZQUNELDZCQUE2QjtZQUM3QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0MsOEJBQThCO2dCQUM5QixNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUU1QiwwR0FBMEc7Z0JBQzFHLGtDQUFrQztnQkFDbEMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzVCLFNBQVM7aUJBQ1Y7Z0JBRUQsMkJBQTJCO2dCQUMzQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtvQkFDekMsU0FBUztpQkFDVjtnQkFFRCw4QkFBOEI7Z0JBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRTFCLHNCQUFzQjtnQkFDdEIsSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFO29CQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQyxTQUFTO2lCQUNWO2dCQUVELElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRTtvQkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEQsU0FBUztpQkFDVjtnQkFFRCxnQkFBZ0I7cUJBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM3QixNQUFNLENBQUMsSUFBSSxDQUNULEdBQUc7d0JBQ0QsS0FBSzt3QkFDTCxLQUFLLENBQUMsR0FBRyxDQUNQLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFOzRCQUMxQixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQzs0QkFDckIsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDOzRCQUNoQixNQUFNLEVBQUUsVUFBVSxHQUFHLEdBQUc7NEJBQ3hCLFVBQVU7NEJBQ1YsUUFBUTt5QkFDVCxDQUFDLENBQUMsVUFBVSxDQUNoQjt3QkFDRCxHQUFHLENBQ04sQ0FBQztvQkFDRixTQUFTO2lCQUNWO2dCQUVELG1DQUFtQztnQkFDbkMsSUFBSSxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUVsQyx5QkFBeUI7Z0JBQ3pCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxlQUFlLEVBQUU7b0JBQzFGLGdCQUFnQixJQUFJLE1BQU8sS0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7aUJBQzNEO2dCQUVELG9CQUFvQjtxQkFDZixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDbEMsc0NBQXNDO29CQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7d0JBQ3ZCLGdCQUFnQixJQUFJLEtBQUssQ0FBQztxQkFDM0I7b0JBRUQsU0FBUzt5QkFDSjt3QkFDSCxnQkFBZ0IsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDN0U7aUJBQ0Y7Z0JBRUQsd0NBQXdDO3FCQUNuQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7b0JBQ2hFLGdCQUFnQixJQUFJLEtBQUssQ0FBQztpQkFDM0I7Z0JBRUQsU0FBUztxQkFDSjtvQkFDSCxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO3dCQUMvQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQzt3QkFDckIsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDO3dCQUNoQixNQUFNLEVBQUUsVUFBVSxHQUFHLEdBQUc7d0JBQ3hCLFVBQVU7d0JBQ1YsUUFBUTtxQkFDVCxDQUFDLENBQUMsVUFBVSxDQUFDO2lCQUNmO2dCQUVELHFDQUFxQztnQkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQy9CO1lBRUQscUNBQXFDO1lBQ3JDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDakIsbURBQW1EO2dCQUNuRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ2YsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO2lCQUM1RTtnQkFFRCxzREFBc0Q7cUJBQ2pEO29CQUNILE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztpQkFDNUU7YUFDRjtTQUNGO1FBRUQscURBQXFEO2FBQ2hEO1lBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLGFBQWEsQ0FDckIsTUFBVyxFQUNYLFVBT0ksRUFBRTtRQUVOLFNBQVM7UUFDVCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRztZQUNqRSxPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxFQUFFO1lBQ1YsWUFBWSxFQUFFLEVBQUU7WUFDaEIsTUFBTSxFQUFFLENBQUM7WUFDVCxHQUFHLEVBQUUsQ0FBQztZQUNOLFVBQVUsRUFBRSxFQUFFO1lBQ2QsR0FBRyxPQUFPO1NBQ1gsQ0FBQztRQUVGLHFCQUFxQjtRQUNyQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFFdEIsZUFBZTtRQUNmLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztTQUNuRDtRQUVELGlCQUFpQjtRQUNqQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUM5QixJQUNFLE9BQU87Z0JBQ1AsQ0FBQyxDQUFDLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUMxRztnQkFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUNuRDtZQUNELE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUM7U0FDbkc7UUFFRCxnQkFBZ0I7YUFDWCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUU7Z0JBQ3pCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO29CQUM1QixZQUFZO3dCQUNWLFlBQVk7NEJBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0NBQ3ZCLE9BQU87Z0NBQ1AsTUFBTTtnQ0FDTixNQUFNO2dDQUNOLFlBQVk7Z0NBQ1osR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO2dDQUNaLFVBQVU7NkJBQ1gsQ0FBQyxDQUFDLFlBQVksQ0FBQztvQkFDbEIsU0FBUztpQkFDVjtnQkFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMvQixTQUFTO2lCQUNWO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzdCLFlBQVk7b0JBQ1YsWUFBWTt3QkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTs0QkFDdkIsT0FBTyxFQUNMLE9BQU8sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7NEJBQzNHLE1BQU0sRUFBRSxXQUFXLEdBQUcsR0FBRzs0QkFDekIsTUFBTTs0QkFDTixZQUFZOzRCQUNaLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQzs0QkFDWixVQUFVO3lCQUNYLENBQUMsQ0FBQyxZQUFZLENBQUM7YUFDbkI7U0FDRjtRQUVELGlCQUFpQjthQUNaLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ25DLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMvQyxNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNqQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDNUIsU0FBUztpQkFDVjtnQkFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUN2RCxZQUFZLEdBQUcsWUFBWSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzNFO3FCQUFNO29CQUNMLFlBQVk7d0JBQ1YsWUFBWTs0QkFDWixJQUFJOzRCQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDOUIsR0FBRzs0QkFDSCxHQUFHOzRCQUNILEdBQUc7NEJBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7Z0NBQ3RCLE9BQU8sRUFDTCxPQUFPLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dDQUN2RyxNQUFNLEVBQUUsV0FBVyxHQUFHLEdBQUc7Z0NBQ3pCLE1BQU07Z0NBQ04sWUFBWTtnQ0FDWixHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0NBQ1osVUFBVTs2QkFDWCxDQUFDLENBQUMsWUFBWTs0QkFDZixJQUFJOzRCQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDOUIsR0FBRyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzsyR0EzZ0JVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcG9sbG8sIGdxbCB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElHcmFwaFFMT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmFwaFFMUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9lbnVtcy9ncmFwaHFsLXJlcXVlc3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyYXBoUUxNZXRhU2VydmljZSB9IGZyb20gJy4vZ3JhcGhxbC1tZXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JhcGhRTEVudW0gfSBmcm9tICcuLi9jbGFzc2VzL2dyYXBocWwtZW51bS5jbGFzcyc7XG5pbXBvcnQgeyBHcmFwaFFMVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC10eXBlLmNsYXNzJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyYXBocWwtdHlwZS1jb2xsZWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tICdqcy1zaGEyNTYnO1xuXG4vKipcbiAqIEdyYXBoUUwgc2VydmljZVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR3JhcGhRTFNlcnZpY2Uge1xuICAvKipcbiAgICogSW5jbHVkZSBzZXJ2aWNlc1xuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGFwb2xsbzogQXBvbGxvLCBwcm90ZWN0ZWQgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHVibGljIGdyYXBoUWwoZ3JhcGhxbDogc3RyaW5nLCBvcHRpb25zOiBJR3JhcGhRTE9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgLy8gQ2hlY2sgYXJndW1lbnRzXG4gICAgaWYgKCFncmFwaHFsKSB7XG4gICAgICB0aHJvd0Vycm9yKCdNaXNzaW5nIGdyYXBocWwgYXJndW1lbnQnKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgYXJndW1lbnRzOiBudWxsLFxuICAgICAgZmllbGRzOiBudWxsLFxuICAgICAgbG9nOiBmYWxzZSxcbiAgICAgIG1vZGVsOiBudWxsLFxuICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLlFVRVJZLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gQ29udmVydCBjbGFzcyB0byBPYmplY3QgZm9yIGFyZ3VtZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmFyZ3VtZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uZmlnLmFyZ3VtZW50cyA9IG5ldyBjb25maWcuYXJndW1lbnRzKCk7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBjbGFzcyB0byBPYmplY3QgZm9yIGZpZWxkc1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmZpZWxkcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uZmlnLmZpZWxkcyA9IG5ldyBjb25maWcuZmllbGRzKCk7XG4gICAgfVxuXG4gICAgLy8gTG9nXG4gICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgIGNvbnNvbGUubG9nKHsgY29uZmlnIH0pO1xuICAgIH1cblxuICAgIC8vIFNlbmQgcmVxdWVzdFxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgLy8gR2V0IG1ldGFcbiAgICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoeyBsb2c6IGNvbmZpZy5sb2cgfSkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICAgIC8vIFByZXBhcmUgZmllbGRzXG4gICAgICAgIGxldCBmaWVsZHM7XG4gICAgICAgIGxldCBhbGxvd2VkRmllbGRzO1xuXG4gICAgICAgIC8vIExvZyBtZXRhXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBtZXRhIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5maWVsZHMpIHtcbiAgICAgICAgICBhbGxvd2VkRmllbGRzID0gbWV0YS5nZXRGaWVsZHMoZ3JhcGhxbCwgeyB0eXBlOiBjb25maWcudHlwZSB9KTtcblxuICAgICAgICAgIC8vIExvZyBtZXRhXG4gICAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHsgYWxsb3dlZEZpZWxkcyB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaWVsZHNEYXRhID0gdGhpcy5wcmVwYXJlRmllbGRzKGNvbmZpZy5maWVsZHMsIHtcbiAgICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRGaWVsZHMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBMb2cgZmllbGRzIGRhdGFcbiAgICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgICAgZmllbGRzRGF0YS51c2VkRmllbGRzLnNvcnQoKTtcbiAgICAgICAgICAgIGZpZWxkc0RhdGEuc2NoZW1hRmllbGRzLnNvcnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gZmllbGRzRGF0YS5zY2hlbWFGaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gIWZpZWxkc0RhdGEudXNlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZCkpO1xuICAgICAgICAgICAgY29uc3QgdW51c2VkID0gdGhpcy5ncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KGFsbG93ZWRGaWVsZHMpLmZpbHRlcihcbiAgICAgICAgICAgICAgKGZpZWxkKSA9PiAhZmllbGRzRGF0YS51c2VkRmllbGRzLmluY2x1ZGVzKGZpZWxkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHsgZmllbGRzRGF0YSwgZmlsdGVyZWQsIHVudXNlZCB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWVsZHMgPSBmaWVsZHNEYXRhLmZpZWxkc1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZHMgJiYgIWZpZWxkcy5zdGFydHNXaXRoKCd7JykpIHtcbiAgICAgICAgICBmaWVsZHMgPSAneycgKyBmaWVsZHMgKyAnXFxufSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2cgZmllbGRzXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBmaWVsZHMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgYWxsb3dlZCBhcmdzXG4gICAgICAgIGNvbnN0IGFsbG93ZWRBcmdzID0gbWV0YS5nZXRBcmdzKGdyYXBocWwsIHsgdHlwZTogY29uZmlnLnR5cGUgfSk7XG5cbiAgICAgICAgLy8gTG9nIGFsbG93ZWQgYXJnc1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgYWxsb3dlZEFyZ3MgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzRGF0YSA9IHRoaXMucHJlcGFyZUFyZ3VtZW50cyhjb25maWcuYXJndW1lbnRzLCB7XG4gICAgICAgICAgYWxsb3dlZDogYWxsb3dlZEFyZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIExvZyBhcmdzIGRhdGFcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBhcmdzRGF0YS51c2VkQXJncy5zb3J0KCk7XG4gICAgICAgICAgYXJnc0RhdGEuc2NoZW1hQXJncy5zb3J0KCk7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBhcmdzRGF0YS5zY2hlbWFBcmdzLmZpbHRlcigoZmllbGQpID0+ICFhcmdzRGF0YS51c2VkQXJncy5pbmNsdWRlcyhmaWVsZCkpO1xuICAgICAgICAgIGNvbnN0IHVudXNlZCA9IHRoaXMuZ3JhcGhRTFR5cGVDb2xsZWN0aW9uVG9TdHJpbmdBcnJheShhbGxvd2VkQXJncylcbiAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiAhYXJnc0RhdGEudXNlZEFyZ3MuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGFyZ3NEYXRhLCBmaWx0ZXJlZCwgdW51c2VkIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3NEYXRhPy5hcmdzU3RyaW5nIHx8ICcnO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZ3JhcGhRTDogZ3JhcGhxbCwgYXJncywgZmllbGRzLCB0eXBlOiBjb25maWcudHlwZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgcmVxdWVzdFxuICAgICAgICBjb25zdCBkb2N1bWVudE5vZGUgPSBmaWVsZHNcbiAgICAgICAgICA/IGdxbChjb25maWcudHlwZSArICd7XFxuJyArIGdyYXBocWwgKyBhcmdzICsgZmllbGRzICsgJ1xcbn0nKVxuICAgICAgICAgIDogZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyAnXFxufScpO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZG9jdW1lbnROb2RlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdDogYW55ID0ge307XG4gICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgcmVxdWVzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmdW5jO1xuICAgICAgICBpZiAoY29uZmlnLnR5cGUgPT09IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTikge1xuICAgICAgICAgIGZ1bmMgPSAnbXV0YXRlJztcbiAgICAgICAgICByZXF1ZXN0W2NvbmZpZy50eXBlXSA9IGRvY3VtZW50Tm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gR3JhcGhRTFJlcXVlc3RUeXBlLlNVQlNDUklQVElPTikge1xuICAgICAgICAgIGZ1bmMgPSAnc3Vic2NyaWJlJztcbiAgICAgICAgICByZXF1ZXN0LnF1ZXJ5ID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZ1bmMgPSBjb25maWcudHlwZTtcbiAgICAgICAgICByZXF1ZXN0W2NvbmZpZy50eXBlXSA9IGRvY3VtZW50Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzLmFwb2xsbyBhcyBhbnkpW2Z1bmNdKHJlcXVlc3QpLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQ/LmRhdGE/LltncmFwaHFsXSAhPT0gdW5kZWZpbmVkID8gcmVzdWx0LmRhdGFbZ3JhcGhxbF0gOiByZXN1bHQ7XG5cbiAgICAgICAgICAgIC8vIERpcmVjdCBkYXRhXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5tb2RlbCkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1hcCBkYXRhIGFzIGFycmF5XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICAgICAgICBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5tb2RlbC5tYXAoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGFcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29uZmlnLm1vZGVsLm1hcChkYXRhKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maWcudHlwZSAhPT0gR3JhcGhRTFJlcXVlc3RUeXBlLlNVQlNDUklQVElPTikge1xuICAgICAgICAgICAgICAvLyBEb25lXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRzIC8gYXJncyBmcm9tIElHcmFwaFFMVHlwZUNvbGxlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KFxuICAgIGNvbGxlY3Rpb246IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sXG4gICAgY3VycmVudCA9ICcnLFxuICAgIHJlc3VsdCA9IFtdLFxuICAgIGNhY2hlTm9kZSA9IFtdXG4gICkge1xuICAgIGlmIChjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiBpbnN0YW5jZW9mIEdyYXBoUUxUeXBlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGN1cnJlbnQ/LmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICBjYWNoZU5vZGUucHVzaChjdXJyZW50LnNwbGl0KCcuJylbMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICBjYWNoZU5vZGUucHVzaChjdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBrZXkgfHwgY2FjaGVOb2RlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoXG4gICAgICAgICAgICBjb2xsZWN0aW9uW2tleV0gYXMgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbixcbiAgICAgICAgICAgIGN1cnJlbnQgPyBjdXJyZW50ICsgJy4nICsga2V5IDoga2V5LFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY2FjaGVOb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYXJndW1lbnRzIGZvciBHcmFwaFFMIHJlcXVlc3RcbiAgICovXG4gIHByb3RlY3RlZCBwcmVwYXJlQXJndW1lbnRzKFxuICAgIGFyZ3M6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBhbGxvd2VkPzogYW55O1xuICAgICAgbGV2ZWw/OiBudW1iZXI7XG4gICAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgICBzY2hlbWFBcmdzPzogc3RyaW5nW107XG4gICAgICB1c2VkQXJncz86IHN0cmluZ1tdO1xuICAgIH0gPSB7fVxuICApOiB7IGFyZ3NTdHJpbmc6IHN0cmluZzsgc2NoZW1hQXJnczogc3RyaW5nW107IHVzZWRBcmdzOiBzdHJpbmdbXSB9IHtcbiAgICAvLyBJbml0IGNvbmZpZyB2YXJpYWJsZXNcbiAgICBjb25zdCB7IGFsbG93ZWQsIGxldmVsLCBwYXJlbnQsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH0gPSB7XG4gICAgICBhbGxvd2VkOiBudWxsLFxuICAgICAgbGV2ZWw6IDEsXG4gICAgICBwYXJlbnQ6ICcnLFxuICAgICAgc2NoZW1hQXJnczogW10sXG4gICAgICB1c2VkQXJnczogW10sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBhcmdzXG4gICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCB8fCBhcmdzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICB9XG5cbiAgICAvLyBJbml0IGFyZ3NcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSBhbGxvd2VkID8gT2JqZWN0LmtleXMoYWxsb3dlZCkgOiBudWxsO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFyZ3MpIHtcbiAgICAgICAgbGV0IGtleSA9IG51bGw7XG4gICAgICAgIGlmIChhbGxvd2VkKSB7XG4gICAgICAgICAgaWYgKGFsbG93ZWQubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleSA9IGFsbG93ZWRLZXlzPy5zaGlmdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyB2YWx1ZVxuICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICB0aGlzLnByZXBhcmVBcmd1bWVudHMoaXRlbSwge1xuICAgICAgICAgICAgYWxsb3dlZDoga2V5ID8gYWxsb3dlZFtrZXldIDogbnVsbCxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudCArIGtleSArICcuJyxcbiAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICB9KS5hcmdzU3RyaW5nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuY2Fwc3VsYXRpb24gb2YgdGhlIGFycmF5IHJlc3VsdFxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ29tcGxldGUgcmVzdWx0LCBlbmNhcHN1bGF0ZWQgdmlhIHJvdW5kIGJyYWNrZXRzXG4gICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcoJyArIHJlc3VsdC5qb2luKCcsICcpICsgJyknLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVlcGVyIHJlc3VsdCBwYXJ0LCBlbmNhcHN1bGF0ZWQgdmlhIHNxdWFyZSBicmFja2V0c1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnWycgKyByZXN1bHQuam9pbignLCAnKSArICddJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgb2JqZWN0XG4gICAgZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBDaGVjayBvYmplY3QgaXMgZW1wdHlcbiAgICAgIGlmIChhcmdzICYmIE9iamVjdC5rZXlzKGFyZ3MpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJncykgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJ3t9Jywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgIH1cbiAgICAgIC8vIFByb2Nlc3MgYWxsIG9iamVjdCBlbnRyaWVzXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmdzKSkge1xuICAgICAgICAvLyBJbml0IGRhdGEgZm9yIGN1cnJlbnQgZW50cnlcbiAgICAgICAgY29uc3QgY3VycmVudEtleSA9IHBhcmVudCArIGtleTtcbiAgICAgICAgc2NoZW1hQXJncy5wdXNoKGN1cnJlbnRLZXkpO1xuXG4gICAgICAgIC8vIElmIHRoZSBhbGxvd2VkIGtleSBoYW5kbGluZyBpcyBlbmFibGVkIGFuZCB0aGUgY3VycmVudCBrZXkgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIGFsbG93ZWQga2V5cyxcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQga2V5IHdpbGwgYmUgc2tpcHBlZFxuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZFtrZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTa2lwIHZhbHVlIGlmIG5vdCBleGlzdHNcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBjdXJyZW50IGtleSB0byBtZXRhZGF0YVxuICAgICAgICB1c2VkQXJncy5wdXNoKGN1cnJlbnRLZXkpO1xuXG4gICAgICAgIC8vIFByb2Nlc3MgR3JhcGhRTEVudW1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgR3JhcGhRTEVudW0pIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkgKyAnOicgKyB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAncGFzc3dvcmQnKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5ICsgJzonICsgYFwiJHtzaGEyNTYodmFsdWUgYXMgc3RyaW5nKX1cImApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBhcnJheVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICAgJzogWycgK1xuICAgICAgICAgICAgICB2YWx1ZS5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVBcmd1bWVudHMoaXRlbSwge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3VycmVudEtleSArICcuJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hQXJncyxcbiAgICAgICAgICAgICAgICAgICAgdXNlZEFyZ3MsXG4gICAgICAgICAgICAgICAgICB9KS5hcmdzU3RyaW5nXG4gICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAnXSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlcGFyZSBhZGRpdGlvbmFsIHJlc3VsdCBzdHJpbmdcbiAgICAgICAgbGV0IGFkZGl0aW9uYWxSZXN1bHQgPSBrZXkgKyAnOiAnO1xuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEgZGF0ZSBvYmplY3RcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSBgXCJcIlwiJHsodmFsdWUgYXMgRGF0ZSkudG9TdHJpbmcoKX1cIlwiXCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBzdHJpbmdcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIC8vIEVudW0gKGRvZXNuJ3QgbmVlZCBxdW90YXRpb24gbWFya3MpXG4gICAgICAgICAgaWYgKGFsbG93ZWRba2V5XS5pc0VudW0pIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RyaW5nXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IGBcIiR7dmFsdWUucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKX1cImA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBzaW1wbGUgYm9vbGVhbiBvciBhIG51bWJlclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyc1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHRoaXMucHJlcGFyZUFyZ3VtZW50cyh2YWx1ZSwge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZFtrZXldLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgIHBhcmVudDogY3VycmVudEtleSArICcuJyxcbiAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICB9KS5hcmdzU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHVzaCBkZWVwZXIgcGFydCBpbnRvIHJlc3VsdCBhcnJheVxuICAgICAgICByZXN1bHQucHVzaChhZGRpdGlvbmFsUmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5jYXBzdWxhdGlvbiBvZiB0aGUgb2JqZWN0IHJlc3VsdFxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ29tcGxldGUgcmVzdWx0LCBlbmNhcHN1bGF0ZWQgdmlhIHJvdW5kIGJyYWNrZXRzXG4gICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcoJyArIHJlc3VsdC5qb2luKCcsICcpICsgJyknLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVlcGVyIHJlc3VsdCBwYXJ0LCBlbmNhcHN1bGF0ZWQgdmlhIGN1cmx5IGJyYWNrZXRzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICd7JyArIHJlc3VsdC5qb2luKCcsICcpICsgJ30nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBhbmQgcHJvY2VzcyBvdGhlciAvIHVua25vd24gdmFsdWVzIGFzIEpTT05cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGZpZWxkcyBmb3IgR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlcGFyZUZpZWxkcyhcbiAgICBmaWVsZHM6IGFueSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBhbGxvd2VkPzogYW55O1xuICAgICAgc2NoZW1hRmllbGRzPzogc3RyaW5nW107XG4gICAgICB1c2VkRmllbGRzPzogc3RyaW5nW107XG4gICAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgICBzcGFjZXM/OiBudW1iZXI7XG4gICAgICB0YWI/OiBudW1iZXI7XG4gICAgfSA9IHt9XG4gICk6IHsgc2NoZW1hRmllbGRzOiBzdHJpbmdbXTsgZmllbGRzU3RyaW5nOiBzdHJpbmc7IHVzZWRGaWVsZHM6IHN0cmluZ1tdIH0ge1xuICAgIC8vIENvbmZpZ1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgcGFyZW50LCBzY2hlbWFGaWVsZHMsIHNwYWNlcywgdGFiLCB1c2VkRmllbGRzIH0gPSB7XG4gICAgICBhbGxvd2VkOiBudWxsLFxuICAgICAgcGFyZW50OiAnJyxcbiAgICAgIHNjaGVtYUZpZWxkczogW10sXG4gICAgICBzcGFjZXM6IDIsXG4gICAgICB0YWI6IDEsXG4gICAgICB1c2VkRmllbGRzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEluaXQgZmllbGRzIHN0cmluZ1xuICAgIGxldCBmaWVsZHNTdHJpbmcgPSAnJztcblxuICAgIC8vIENoZWNrIGZpZWxkc1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBmaWVsZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGFsbG93ZWQgJiZcbiAgICAgICAgKCh0eXBlb2YgYWxsb3dlZCA9PT0gJ3N0cmluZycgJiYgYWxsb3dlZCAhPT0gZmllbGRzKSB8fCAodHlwZW9mIGFsbG93ZWQgPT09ICdvYmplY3QnICYmICFhbGxvd2VkW2ZpZWxkc10pKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmc6ICdcXG4nICsgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICsgZmllbGRzLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGFycmF5XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmllbGRzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUZpZWxkcyhpdGVtLCB7XG4gICAgICAgICAgICAgIGFsbG93ZWQsXG4gICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICAgIH0pLmZpZWxkc1N0cmluZztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudCArIGl0ZW07XG4gICAgICAgIHNjaGVtYUZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgaWYgKGFsbG93ZWQgJiYgIWFsbG93ZWQ/LltpdGVtXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHVzZWRGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHMoaXRlbSwge1xuICAgICAgICAgICAgYWxsb3dlZDpcbiAgICAgICAgICAgICAgdHlwZW9mIGFsbG93ZWQ/LltpdGVtXSA9PT0gJ29iamVjdCcgJiYgIShhbGxvd2VkPy5baXRlbV0gaW5zdGFuY2VvZiBHcmFwaFFMVHlwZSkgPyBhbGxvd2VkPy5baXRlbV0gOiBpdGVtLFxuICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50UGF0aCArICcuJyxcbiAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgfSkuZmllbGRzU3RyaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgb2JqZWN0XG4gICAgZWxzZSBpZiAodHlwZW9mIGZpZWxkcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB1c2VkRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKHZhbCkubGVuZ3RoKSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID0gZmllbGRzU3RyaW5nICsgJ1xcbicgKyAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgKyBrZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgK1xuICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAneycgK1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRmllbGRzKHZhbCwge1xuICAgICAgICAgICAgICBhbGxvd2VkOlxuICAgICAgICAgICAgICAgIHR5cGVvZiBhbGxvd2VkPy5ba2V5XSA9PT0gJ29iamVjdCcgJiYgIShhbGxvd2VkPy5ba2V5XSBpbnN0YW5jZW9mIEdyYXBoUUxUeXBlKSA/IGFsbG93ZWQ/LltrZXldIDoga2V5LFxuICAgICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRQYXRoICsgJy4nLFxuICAgICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgICAgdGFiOiB0YWIgKyAxLFxuICAgICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgICAgfSkuZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArXG4gICAgICAgICAgICAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gcmVzdWx0XG4gICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgfVxufVxuIl19
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUc1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBRW5DOztHQUVHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFDekI7O09BRUc7SUFDSCxZQUFzQixNQUFjLEVBQVksa0JBQXNDO1FBQWhFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBWSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUcsQ0FBQztJQUUxRjs7T0FFRztJQUNJLE9BQU8sQ0FBQyxPQUFlLEVBQUUsVUFBMkIsRUFBRTtRQUMzRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsYUFBYTtRQUNiLE1BQU0sTUFBTSxHQUFHO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLEVBQUUsSUFBSTtZQUNaLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLElBQUk7WUFDWCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsS0FBSztZQUM5QixHQUFHLE9BQU87U0FDWCxDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLElBQUksT0FBTyxNQUFNLENBQUMsU0FB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WTtnQ0FDWixHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0NBQ1osVUFBVTs2QkFDWCxDQUFDLENBQUMsWUFBWTs0QkFDZixJQUFJOzRCQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDOUIsR0FBRyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzsyR0F6ZlUsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsbywgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUdyYXBoUUxPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyYXBoUUxSZXF1ZXN0VHlwZSB9IGZyb20gJy4uL2VudW1zL2dyYXBocWwtcmVxdWVzdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGFTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLW1ldGEuc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaFFMRW51bSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC1lbnVtLmNsYXNzJztcbmltcG9ydCB7IEdyYXBoUUxUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9ncmFwaHFsLXR5cGUuY2xhc3MnO1xuaW1wb3J0IHsgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC10eXBlLWNvbGxlY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ2pzLXNoYTI1Nic7XG5cbi8qKlxuICogR3JhcGhRTCBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmFwaFFMU2VydmljZSB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIHNlcnZpY2VzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBvbGxvOiBBcG9sbG8sIHByb3RlY3RlZCBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSkge31cblxuICAvKipcbiAgICogR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwdWJsaWMgZ3JhcGhRbChncmFwaHFsOiBzdHJpbmcsIG9wdGlvbnM6IElHcmFwaFFMT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyBDaGVjayBhcmd1bWVudHNcbiAgICBpZiAoIWdyYXBocWwpIHtcbiAgICAgIHRocm93RXJyb3IoJ01pc3NpbmcgZ3JhcGhxbCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIC8vIEdldCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBhcmd1bWVudHM6IG51bGwsXG4gICAgICBmaWVsZHM6IG51bGwsXG4gICAgICBsb2c6IGZhbHNlLFxuICAgICAgbW9kZWw6IG51bGwsXG4gICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgYXJndW1lbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuYXJndW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuYXJndW1lbnRzID0gbmV3IGNvbmZpZy5hcmd1bWVudHMoKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgZmllbGRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmllbGRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuZmllbGRzID0gbmV3IGNvbmZpZy5maWVsZHMoKTtcbiAgICB9XG5cbiAgICAvLyBMb2dcbiAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgY29uc29sZS5sb2coeyBjb25maWcgfSk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCByZXF1ZXN0XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAvLyBHZXQgbWV0YVxuICAgICAgdGhpcy5ncmFwaFFMTWV0YVNlcnZpY2UuZ2V0TWV0YSh7IGxvZzogY29uZmlnLmxvZyB9KS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWVsZHNcbiAgICAgICAgbGV0IGZpZWxkcztcbiAgICAgICAgbGV0IGFsbG93ZWRGaWVsZHM7XG5cbiAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IG1ldGEgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmZpZWxkcykge1xuICAgICAgICAgIGFsbG93ZWRGaWVsZHMgPSBtZXRhLmdldEZpZWxkcyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkRmllbGRzIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpZWxkc0RhdGEgPSB0aGlzLnByZXBhcmVGaWVsZHMoY29uZmlnLmZpZWxkcywge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZEZpZWxkcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIExvZyBmaWVsZHMgZGF0YVxuICAgICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgICBmaWVsZHNEYXRhLnVzZWRGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgZmllbGRzRGF0YS5zY2hlbWFGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWVsZHNEYXRhLnNjaGVtYUZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhZmllbGRzRGF0YS51c2VkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlVG9TdHJpbmdBcnJheShhbGxvd2VkRmllbGRzKS5maWx0ZXIoXG4gICAgICAgICAgICAgIChmaWVsZCkgPT4gIWZpZWxkc0RhdGEudXNlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh7IGZpZWxkc0RhdGEsIGZpbHRlcmVkLCB1bnVzZWQgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmllbGRzID0gZmllbGRzRGF0YS5maWVsZHNTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRzICYmICFmaWVsZHMuc3RhcnRzV2l0aCgneycpKSB7XG4gICAgICAgICAgZmllbGRzID0gJ3snICsgZmllbGRzICsgJ1xcbn0nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTG9nIGZpZWxkc1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZmllbGRzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGFsbG93ZWQgYXJnc1xuICAgICAgICBjb25zdCBhbGxvd2VkQXJncyA9IG1ldGEuZ2V0QXJncyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgIC8vIExvZyBhbGxvd2VkIGFyZ3NcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGFsbG93ZWRBcmdzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnc0RhdGEgPSB0aGlzLnByZXBhcmVBcmd1bWVudHMoY29uZmlnLmFyZ3VtZW50cywge1xuICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRBcmdzLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2cgYXJncyBkYXRhXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgYXJnc0RhdGEudXNlZEFyZ3Muc29ydCgpO1xuICAgICAgICAgIGFyZ3NEYXRhLnNjaGVtYUFyZ3Muc29ydCgpO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gYXJnc0RhdGEuc2NoZW1hQXJncy5maWx0ZXIoKGZpZWxkKSA9PiAhYXJnc0RhdGEudXNlZEFyZ3MuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlVG9TdHJpbmdBcnJheShhbGxvd2VkQXJncylcbiAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiAhYXJnc0RhdGEudXNlZEFyZ3MuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGFyZ3NEYXRhLCBmaWx0ZXJlZCwgdW51c2VkIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3NEYXRhPy5hcmdzU3RyaW5nIHx8ICcnO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZ3JhcGhRTDogZ3JhcGhxbCwgYXJncywgZmllbGRzLCB0eXBlOiBjb25maWcudHlwZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgcmVxdWVzdFxuICAgICAgICBjb25zdCBkb2N1bWVudE5vZGUgPSBmaWVsZHNcbiAgICAgICAgICA/IGdxbChjb25maWcudHlwZSArICd7XFxuJyArIGdyYXBocWwgKyBhcmdzICsgZmllbGRzICsgJ1xcbn0nKVxuICAgICAgICAgIDogZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyAnXFxufScpO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgZG9jdW1lbnROb2RlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdDogYW55ID0ge307XG4gICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuXG4gICAgICAgIC8vIExvZ1xuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgcmVxdWVzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmdW5jO1xuICAgICAgICBpZiAoY29uZmlnLnR5cGUgPT09IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTikge1xuICAgICAgICAgIGZ1bmMgPSAnbXV0YXRlJztcbiAgICAgICAgICByZXF1ZXN0W2NvbmZpZy50eXBlXSA9IGRvY3VtZW50Tm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gR3JhcGhRTFJlcXVlc3RUeXBlLlNVQlNDUklQVElPTikge1xuICAgICAgICAgIGZ1bmMgPSAnc3Vic2NyaWJlJztcbiAgICAgICAgICByZXF1ZXN0LnF1ZXJ5ID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZ1bmMgPSBjb25maWcudHlwZTtcbiAgICAgICAgICByZXF1ZXN0W2NvbmZpZy50eXBlXSA9IGRvY3VtZW50Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzLmFwb2xsbyBhcyBhbnkpW2Z1bmNdKHJlcXVlc3QpLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQ/LmRhdGE/LltncmFwaHFsXSAhPT0gdW5kZWZpbmVkID8gcmVzdWx0LmRhdGFbZ3JhcGhxbF0gOiByZXN1bHQ7XG5cbiAgICAgICAgICAgIC8vIERpcmVjdCBkYXRhXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5tb2RlbCkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1hcCBkYXRhIGFzIGFycmF5XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICAgICAgICBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5tb2RlbC5tYXAoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGFcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29uZmlnLm1vZGVsLm1hcChkYXRhKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maWcudHlwZSAhPT0gR3JhcGhRTFJlcXVlc3RUeXBlLlNVQlNDUklQVElPTikge1xuICAgICAgICAgICAgICAvLyBEb25lXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRzIC8gYXJncyBmcm9tIElHcmFwaFFMVHlwZUNvbGxlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBncmFwaFFMVHlwZVRvU3RyaW5nQXJyYXkoZ3JhcGhRTFR5cGU6IEdyYXBoUUxUeXBlLCBjdXJyZW50ID0gJycsIHJlc3VsdCA9IFtdLCBjYWNoZU5vZGUgPSBbXSkge1xuICAgIGlmICghZ3JhcGhRTFR5cGUpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChjdXJyZW50Py5pbmNsdWRlcygnLicpKSB7XG4gICAgICBjYWNoZU5vZGUucHVzaChjdXJyZW50LnNwbGl0KCcuJylbMV0pO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgY2FjaGVOb2RlLnB1c2goY3VycmVudCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGdyYXBoUUxUeXBlLmZpZWxkcykpIHtcbiAgICAgIGlmIChjdXJyZW50ID09PSBrZXkgfHwgY2FjaGVOb2RlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmdyYXBoUUxUeXBlVG9TdHJpbmdBcnJheShncmFwaFFMVHlwZS5maWVsZHNba2V5XSwgY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBrZXkgOiBrZXksIHJlc3VsdCwgY2FjaGVOb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGFyZ3VtZW50cyBmb3IgR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcHJlcGFyZUFyZ3VtZW50cyhcbiAgICBhcmdzOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgYWxsb3dlZD86IEdyYXBoUUxUeXBlO1xuICAgICAgbGV2ZWw/OiBudW1iZXI7XG4gICAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgICBzY2hlbWFBcmdzPzogc3RyaW5nW107XG4gICAgICB1c2VkQXJncz86IHN0cmluZ1tdO1xuICAgIH0gPSB7fVxuICApOiB7IGFyZ3NTdHJpbmc6IHN0cmluZzsgc2NoZW1hQXJnczogc3RyaW5nW107IHVzZWRBcmdzOiBzdHJpbmdbXSB9IHtcbiAgICAvLyBJbml0IGNvbmZpZyB2YXJpYWJsZXNcbiAgICBjb25zdCB7IGFsbG93ZWQsIGxldmVsLCBwYXJlbnQsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH0gPSB7XG4gICAgICBhbGxvd2VkOiBudWxsLFxuICAgICAgbGV2ZWw6IDEsXG4gICAgICBwYXJlbnQ6ICcnLFxuICAgICAgc2NoZW1hQXJnczogW10sXG4gICAgICB1c2VkQXJnczogW10sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBhcmdzXG4gICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCB8fCBhcmdzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICB9XG5cbiAgICAvLyBJbml0IGFyZ3NcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSBhbGxvd2VkID8gT2JqZWN0LmtleXMoYWxsb3dlZC5maWVsZHMpIDogbnVsbDtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcmdzKSB7XG4gICAgICAgIGxldCBrZXkgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgICAgIGlmICghYWxsb3dlZEtleXMgfHwgYWxsb3dlZEtleXMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtleSA9IGFsbG93ZWRLZXlzLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIHZhbHVlXG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgIHRoaXMucHJlcGFyZUFyZ3VtZW50cyhpdGVtLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBrZXkgPyBhbGxvd2VkLmZpZWxkc1trZXldIDogbnVsbCxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICBwYXJlbnQ6IHBhcmVudCArIGtleSArICcuJyxcbiAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICB9KS5hcmdzU3RyaW5nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuY2Fwc3VsYXRpb24gb2YgdGhlIGFycmF5IHJlc3VsdFxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ29tcGxldGUgcmVzdWx0LCBlbmNhcHN1bGF0ZWQgdmlhIHJvdW5kIGJyYWNrZXRzXG4gICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcoJyArIHJlc3VsdC5qb2luKCcsICcpICsgJyknLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVlcGVyIHJlc3VsdCBwYXJ0LCBlbmNhcHN1bGF0ZWQgdmlhIHNxdWFyZSBicmFja2V0c1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnWycgKyByZXN1bHQuam9pbignLCAnKSArICddJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgb2JqZWN0XG4gICAgZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBDaGVjayBvYmplY3QgaXMgZW1wdHlcbiAgICAgIGlmIChhcmdzICYmIE9iamVjdC5rZXlzKGFyZ3MpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXJncykgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJ3t9Jywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgIH1cbiAgICAgIC8vIFByb2Nlc3MgYWxsIG9iamVjdCBlbnRyaWVzXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmdzKSkge1xuICAgICAgICAvLyBJbml0IGRhdGEgZm9yIGN1cnJlbnQgZW50cnlcbiAgICAgICAgY29uc3QgY3VycmVudEtleSA9IHBhcmVudCArIGtleTtcbiAgICAgICAgc2NoZW1hQXJncy5wdXNoKGN1cnJlbnRLZXkpO1xuXG4gICAgICAgIC8vIElmIHRoZSBhbGxvd2VkIGtleSBoYW5kbGluZyBpcyBlbmFibGVkIGFuZCB0aGUgY3VycmVudCBrZXkgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIGFsbG93ZWQga2V5cyxcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQga2V5IHdpbGwgYmUgc2tpcHBlZFxuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZC5maWVsZHNba2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2tpcCB2YWx1ZSBpZiBub3QgZXhpc3RzXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgY3VycmVudCBrZXkgdG8gbWV0YWRhdGFcbiAgICAgICAgdXNlZEFyZ3MucHVzaChjdXJyZW50S2V5KTtcblxuICAgICAgICAvLyBQcm9jZXNzIEdyYXBoUUxFbnVtXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEdyYXBoUUxFbnVtKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5ICsgJzonICsgdmFsdWUudmFsdWUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSArICc6JyArIGBcIiR7c2hhMjU2KHZhbHVlIGFzIHN0cmluZyl9XCJgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICc6IFsnICtcbiAgICAgICAgICAgICAgdmFsdWUubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXJndW1lbnRzKGl0ZW0sIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZC5maWVsZHNba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50S2V5ICsgJy4nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFBcmdzLFxuICAgICAgICAgICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICAgICAgICAgIH0pLmFyZ3NTdHJpbmdcbiAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICddJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmVwYXJlIGFkZGl0aW9uYWwgcmVzdWx0IHN0cmluZ1xuICAgICAgICBsZXQgYWRkaXRpb25hbFJlc3VsdCA9IGtleSArICc6ICc7XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBkYXRlIG9iamVjdFxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IGBcIlwiXCIkeyh2YWx1ZSBhcyBEYXRlKS50b1N0cmluZygpfVwiXCJcImA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIHN0cmluZ1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gRW51bSAoZG9lc24ndCBuZWVkIHF1b3RhdGlvbiBtYXJrcylcbiAgICAgICAgICBpZiAoYWxsb3dlZC5maWVsZHNba2V5XS5pc0VudW0pIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RyaW5nXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IGBcIiR7dmFsdWUucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKX1cImA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBzaW1wbGUgYm9vbGVhbiBvciBhIG51bWJlclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyc1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHRoaXMucHJlcGFyZUFyZ3VtZW50cyh2YWx1ZSwge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZC5maWVsZHNba2V5XSxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRLZXkgKyAnLicsXG4gICAgICAgICAgICBzY2hlbWFBcmdzLFxuICAgICAgICAgICAgdXNlZEFyZ3MsXG4gICAgICAgICAgfSkuYXJnc1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFB1c2ggZGVlcGVyIHBhcnQgaW50byByZXN1bHQgYXJyYXlcbiAgICAgICAgcmVzdWx0LnB1c2goYWRkaXRpb25hbFJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuY2Fwc3VsYXRpb24gb2YgdGhlIG9iamVjdCByZXN1bHRcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBsZXRlIHJlc3VsdCwgZW5jYXBzdWxhdGVkIHZpYSByb3VuZCBicmFja2V0c1xuICAgICAgICBpZiAobGV2ZWwgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnKCcgKyByZXN1bHQuam9pbignLCAnKSArICcpJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZXBlciByZXN1bHQgcGFydCwgZW5jYXBzdWxhdGVkIHZpYSBjdXJseSBicmFja2V0c1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAneycgKyByZXN1bHQuam9pbignLCAnKSArICd9Jywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYW5kIHByb2Nlc3Mgb3RoZXIgLyB1bmtub3duIHZhbHVlcyBhcyBKU09OXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiBKU09OLnN0cmluZ2lmeShhcmdzKSwgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBmaWVsZHMgZm9yIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVGaWVsZHMoXG4gICAgZmllbGRzOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgYWxsb3dlZD86IEdyYXBoUUxUeXBlO1xuICAgICAgc2NoZW1hRmllbGRzPzogc3RyaW5nW107XG4gICAgICB1c2VkRmllbGRzPzogc3RyaW5nW107XG4gICAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgICBzcGFjZXM/OiBudW1iZXI7XG4gICAgICB0YWI/OiBudW1iZXI7XG4gICAgfSA9IHt9XG4gICk6IHsgc2NoZW1hRmllbGRzOiBzdHJpbmdbXTsgZmllbGRzU3RyaW5nOiBzdHJpbmc7IHVzZWRGaWVsZHM6IHN0cmluZ1tdIH0ge1xuICAgIC8vIENvbmZpZ1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgcGFyZW50LCBzY2hlbWFGaWVsZHMsIHNwYWNlcywgdGFiLCB1c2VkRmllbGRzIH0gPSB7XG4gICAgICBhbGxvd2VkOiBudWxsLFxuICAgICAgcGFyZW50OiAnJyxcbiAgICAgIHNjaGVtYUZpZWxkczogW10sXG4gICAgICBzcGFjZXM6IDIsXG4gICAgICB0YWI6IDEsXG4gICAgICB1c2VkRmllbGRzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIEluaXQgZmllbGRzIHN0cmluZ1xuICAgIGxldCBmaWVsZHNTdHJpbmcgPSAnJztcblxuICAgIC8vIENoZWNrIGZpZWxkc1xuICAgIGlmICghZmllbGRzKSB7XG4gICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBmaWVsZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZC5maWVsZHNbZmllbGRzXSkge1xuICAgICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nOiAnXFxuJyArICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArIGZpZWxkcywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRzKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpZWxkcykge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHMoaXRlbSwge1xuICAgICAgICAgICAgICBhbGxvd2VkLCAvLyBpdGVtIGlzIG9iamVjdCBvciBhcnJheVxuICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgICAgc2NoZW1hRmllbGRzLFxuICAgICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgICB9KS5maWVsZHNTdHJpbmc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXJlbnQgKyBpdGVtO1xuICAgICAgICBzY2hlbWFGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkLmZpZWxkc1tpdGVtXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHVzZWRGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHMoaXRlbSwge1xuICAgICAgICAgICAgYWxsb3dlZDogbnVsbCwgLy8gaXRlbSBpcyBzdHJpbmdcbiAgICAgICAgICAgIHBhcmVudDogY3VycmVudFBhdGggKyAnLicsXG4gICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgIH0pLmZpZWxkc1N0cmluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIG9iamVjdFxuICAgIGVsc2UgaWYgKHR5cGVvZiBmaWVsZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudCArIGtleTtcbiAgICAgICAgc2NoZW1hRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZC5maWVsZHNba2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHVzZWRGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXModmFsKS5sZW5ndGgpIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPSBmaWVsZHNTdHJpbmcgKyAnXFxuJyArICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArIGtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArXG4gICAgICAgICAgICBrZXkgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICd7JyArXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHModmFsLCB7XG4gICAgICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWQuZmllbGRzW2tleV0sIC8vIHZhbCBpcyBvYmplY3Qgb3IgYXJyYXlcbiAgICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50UGF0aCArICcuJyxcbiAgICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICAgIH0pLmZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgK1xuICAgICAgICAgICAgJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gIH1cbn1cbiJdfQ==
@@ -2,7 +2,6 @@ import { APOLLO_OPTIONS, ApolloModule } from 'apollo-angular';
2
2
  import { HttpLink } from 'apollo-angular/http';
3
3
  import { NgModule } from '@angular/core';
4
4
  import { apolloOptionsFactory } from './factories/apollo-options.factory';
5
- import { ContextMenuDirective } from './directives/context-menu.directive';
6
5
  import { LazyLoadDirective } from './directives/lazy-load.directive';
7
6
  import { MatchHeightDirective } from './directives/match-height.directive';
8
7
  import { ResizableDirective } from './directives/resizable.directive';
@@ -15,7 +14,6 @@ import * as i0 from "@angular/core";
15
14
  // Imported and exported elements
16
15
  const elements = [
17
16
  // Directives
18
- ContextMenuDirective,
19
17
  LazyLoadDirective,
20
18
  MatchHeightDirective,
21
19
  ResizableDirective,
@@ -75,7 +73,6 @@ export class BaseModule {
75
73
  BaseModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: BaseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
76
74
  BaseModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: BaseModule, declarations: [
77
75
  // Directives
78
- ContextMenuDirective,
79
76
  LazyLoadDirective,
80
77
  MatchHeightDirective,
81
78
  ResizableDirective,
@@ -84,7 +81,6 @@ BaseModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14
84
81
  SafeHtmlPipe,
85
82
  DateAgoPipe], imports: [ApolloModule, HttpClientModule], exports: [
86
83
  // Directives
87
- ContextMenuDirective,
88
84
  LazyLoadDirective,
89
85
  MatchHeightDirective,
90
86
  ResizableDirective,
@@ -101,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
101
97
  exports: [...elements, ApolloModule, HttpClientModule],
102
98
  }]
103
99
  }] });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9iYXNlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQXVCLFFBQVEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFvQixrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFeEQsaUNBQWlDO0FBQ2pDLE1BQU0sUUFBUSxHQUFHO0lBQ2YsYUFBYTtJQUNiLG9CQUFvQjtJQUNwQixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUVsQixRQUFRO0lBQ1IsWUFBWTtJQUNaLFlBQVk7SUFDWixXQUFXO0NBQ1osQ0FBQztBQUVGOztHQUVHO0FBTUgsTUFBTSxPQUFPLFVBQVU7SUFDckI7O09BRUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFxQyxFQUFFLEVBQUUsY0FBZTtRQUNyRSxpQkFBaUI7UUFDakIsTUFBTSxNQUFNLEdBQUc7WUFDYixNQUFNLEVBQUUsRUFBRTtZQUNWLG9CQUFvQixFQUFFLE9BQU87WUFDN0IsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxJQUFJO1lBQ1oscUJBQXFCLEVBQUUsR0FBRztZQUMxQixZQUFZLEVBQUUsR0FBRztZQUNqQixXQUFXLEVBQUUsT0FBTztZQUNwQixHQUFHLGdCQUFnQjtTQUNwQixDQUFDO1FBRUYsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sU0FBUyxHQUFlO1lBQzVCO2dCQUNFLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFFBQVEsRUFBRSxNQUFNO2FBQ2pCO1NBQ0YsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixVQUFVLEVBQUUsb0JBQW9CO2dCQUNoQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUM7YUFDL0YsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQscUJBQXFCO1FBQ3JCLE9BQU87WUFDTCxRQUFRLEVBQUUsVUFBVTtZQUNwQixTQUFTO1NBQ1YsQ0FBQztJQUNKLENBQUM7O3VHQTlDVSxVQUFVO3dHQUFWLFVBQVU7UUFwQnJCLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsaUJBQWlCO1FBQ2pCLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFFbEIsUUFBUTtRQUNSLFlBQVk7UUFDWixZQUFZO1FBQ1osV0FBVyxhQU9ELFlBQVksRUFBRSxnQkFBZ0I7UUFoQnhDLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsaUJBQWlCO1FBQ2pCLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFFbEIsUUFBUTtRQUNSLFlBQVk7UUFDWixZQUFZO1FBQ1osV0FBVyxFQVNZLFlBQVksRUFBRSxnQkFBZ0I7d0dBRTFDLFVBQVUsWUFKWCxZQUFZLEVBQUUsZ0JBQWdCLEVBRWpCLFlBQVksRUFBRSxnQkFBZ0I7MkZBRTFDLFVBQVU7a0JBTHRCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDO29CQUN6QyxZQUFZLEVBQUUsUUFBUTtvQkFDdEIsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDO2lCQUN2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQT0xMT19PUFRJT05TLCBBcG9sbG9Nb2R1bGUgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQgeyBIdHRwTGluayB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyL2h0dHAnO1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGFwb2xsb09wdGlvbnNGYWN0b3J5IH0gZnJvbSAnLi9mYWN0b3JpZXMvYXBvbGxvLW9wdGlvbnMuZmFjdG9yeSc7XG5pbXBvcnQgeyBDb250ZXh0TWVudURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jb250ZXh0LW1lbnUuZGlyZWN0aXZlJztcbmltcG9ydCB7IExhenlMb2FkRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xhenktbG9hZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0Y2hIZWlnaHREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvbWF0Y2gtaGVpZ2h0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZXNpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbGxpcHNlc1BpcGUgfSBmcm9tICcuL3BpcGVzL2VsbGlwc2VzLnBpcGUnO1xuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnLi9waXBlcy9zYWZlLWh0bWwucGlwZSc7XG5pbXBvcnQgeyBEYXRlQWdvUGlwZSB9IGZyb20gJy4vcGlwZXMvZGF0ZS1hZ28ucGlwZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSwgQmFzZU1vZHVsZUNvbmZpZywgQkFTRV9NT0RVTEVfQ09ORklHLCBXc1NlcnZpY2UgfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG4vLyBJbXBvcnRlZCBhbmQgZXhwb3J0ZWQgZWxlbWVudHNcbmNvbnN0IGVsZW1lbnRzID0gW1xuICAvLyBEaXJlY3RpdmVzXG4gIENvbnRleHRNZW51RGlyZWN0aXZlLFxuICBMYXp5TG9hZERpcmVjdGl2ZSxcbiAgTWF0Y2hIZWlnaHREaXJlY3RpdmUsXG4gIFJlc2l6YWJsZURpcmVjdGl2ZSxcblxuICAvLyBQaXBlc1xuICBFbGxpcHNlc1BpcGUsXG4gIFNhZmVIdG1sUGlwZSxcbiAgRGF0ZUFnb1BpcGUsXG5dO1xuXG4vKipcbiAqIEJhc2UgbW9kdWxlXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtBcG9sbG9Nb2R1bGUsIEh0dHBDbGllbnRNb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IGVsZW1lbnRzLFxuICBleHBvcnRzOiBbLi4uZWxlbWVudHMsIEFwb2xsb01vZHVsZSwgSHR0cENsaWVudE1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VNb2R1bGUge1xuICAvKipcbiAgICogU2V0IGNvbmZpZ3VyYXRpb24gb2YgYmFzZSBtb2R1bGUgaW4gcm9vdCBtb2R1bGUgb2YgdGhlIGFwcFxuICAgKi9cbiAgc3RhdGljIGZvclJvb3QoYmFzZU1vZHVsZUNvbmZpZzogQmFzZU1vZHVsZUNvbmZpZyA9IHt9LCBBcHBBdXRoU2VydmljZT8pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEJhc2VNb2R1bGU+IHtcbiAgICAvLyBEZWZhdWx0IGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGFwaVVybDogJycsXG4gICAgICBhdXRoR3VhcmRSZWRpcmVjdFVybDogJy9hdXRoJyxcbiAgICAgIGxvZ2dpbmc6IGZhbHNlLFxuICAgICAgdmVyc2lvbjogbnVsbCxcbiAgICAgIHByZWZpeDogbnVsbCxcbiAgICAgIHNjcm9sbERldGVjdGlvbk9mZnNldDogMjAwLFxuICAgICAgc2Nyb2xsT2Zmc2V0OiAxMDAsXG4gICAgICBzdG9yYWdlVHlwZTogJ2xvY2FsJyxcbiAgICAgIC4uLmJhc2VNb2R1bGVDb25maWcsXG4gICAgfTtcblxuICAgIGlmIChjb25maWcubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ0NvbmZpZzonLCBjb25maWcpO1xuICAgIH1cblxuICAgIC8vIFByZXBhcmUgcHJvdmlkZXJzXG4gICAgY29uc3QgcHJvdmlkZXJzOiBQcm92aWRlcltdID0gW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBCQVNFX01PRFVMRV9DT05GSUcsXG4gICAgICAgIHVzZVZhbHVlOiBjb25maWcsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBBZGQgYXBvbGxvIGZlYXR1cmVzIGlmIEFQSSBVUkwgaXMgc2V0XG4gICAgaWYgKGJhc2VNb2R1bGVDb25maWcuYXBpVXJsKSB7XG4gICAgICBwcm92aWRlcnMucHVzaCh7XG4gICAgICAgIHByb3ZpZGU6IEFQT0xMT19PUFRJT05TLFxuICAgICAgICB1c2VGYWN0b3J5OiBhcG9sbG9PcHRpb25zRmFjdG9yeSxcbiAgICAgICAgZGVwczogW0JBU0VfTU9EVUxFX0NPTkZJRywgSHR0cExpbmssIEFwcEF1dGhTZXJ2aWNlID8gQXBwQXV0aFNlcnZpY2UgOiBBdXRoU2VydmljZSwgV3NTZXJ2aWNlXSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdhcGlVcmwgaXMgbWlzc2luZywgQXBvbGxvTGluayBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gcm9vdCBtb2R1bGVcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEJhc2VNb2R1bGUsXG4gICAgICBwcm92aWRlcnMsXG4gICAgfTtcbiAgfVxufVxuIl19
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9iYXNlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQXVCLFFBQVEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFvQixrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFeEQsaUNBQWlDO0FBQ2pDLE1BQU0sUUFBUSxHQUFHO0lBQ2YsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBRWxCLFFBQVE7SUFDUixZQUFZO0lBQ1osWUFBWTtJQUNaLFdBQVc7Q0FDWixDQUFDO0FBRUY7O0dBRUc7QUFNSCxNQUFNLE9BQU8sVUFBVTtJQUNyQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQXFDLEVBQUUsRUFBRSxjQUFlO1FBQ3JFLGlCQUFpQjtRQUNqQixNQUFNLE1BQU0sR0FBRztZQUNiLE1BQU0sRUFBRSxFQUFFO1lBQ1Ysb0JBQW9CLEVBQUUsT0FBTztZQUM3QixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLElBQUk7WUFDWixxQkFBcUIsRUFBRSxHQUFHO1lBQzFCLFlBQVksRUFBRSxHQUFHO1lBQ2pCLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLEdBQUcsZ0JBQWdCO1NBQ3BCLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDaEM7UUFFRCxvQkFBb0I7UUFDcEIsTUFBTSxTQUFTLEdBQWU7WUFDNUI7Z0JBQ0UsT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsUUFBUSxFQUFFLE1BQU07YUFDakI7U0FDRixDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFVBQVUsRUFBRSxvQkFBb0I7Z0JBQ2hDLElBQUksRUFBRSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQzthQUMvRixDQUFDLENBQUM7U0FDSjthQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7U0FDakU7UUFFRCxxQkFBcUI7UUFDckIsT0FBTztZQUNMLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFNBQVM7U0FDVixDQUFDO0lBQ0osQ0FBQzs7dUdBOUNVLFVBQVU7d0dBQVYsVUFBVTtRQW5CckIsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsa0JBQWtCO1FBRWxCLFFBQVE7UUFDUixZQUFZO1FBQ1osWUFBWTtRQUNaLFdBQVcsYUFPRCxZQUFZLEVBQUUsZ0JBQWdCO1FBZnhDLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsb0JBQW9CO1FBQ3BCLGtCQUFrQjtRQUVsQixRQUFRO1FBQ1IsWUFBWTtRQUNaLFlBQVk7UUFDWixXQUFXLEVBU1ksWUFBWSxFQUFFLGdCQUFnQjt3R0FFMUMsVUFBVSxZQUpYLFlBQVksRUFBRSxnQkFBZ0IsRUFFakIsWUFBWSxFQUFFLGdCQUFnQjsyRkFFMUMsVUFBVTtrQkFMdEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3pDLFlBQVksRUFBRSxRQUFRO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3ZEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBPTExPX09QVElPTlMsIEFwb2xsb01vZHVsZSB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEh0dHBMaW5rIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgYXBvbGxvT3B0aW9uc0ZhY3RvcnkgfSBmcm9tICcuL2ZhY3Rvcmllcy9hcG9sbG8tb3B0aW9ucy5mYWN0b3J5JztcbmltcG9ydCB7IExhenlMb2FkRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xhenktbG9hZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0Y2hIZWlnaHREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvbWF0Y2gtaGVpZ2h0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZXNpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbGxpcHNlc1BpcGUgfSBmcm9tICcuL3BpcGVzL2VsbGlwc2VzLnBpcGUnO1xuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnLi9waXBlcy9zYWZlLWh0bWwucGlwZSc7XG5pbXBvcnQgeyBEYXRlQWdvUGlwZSB9IGZyb20gJy4vcGlwZXMvZGF0ZS1hZ28ucGlwZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSwgQmFzZU1vZHVsZUNvbmZpZywgQkFTRV9NT0RVTEVfQ09ORklHLCBXc1NlcnZpY2UgfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG4vLyBJbXBvcnRlZCBhbmQgZXhwb3J0ZWQgZWxlbWVudHNcbmNvbnN0IGVsZW1lbnRzID0gW1xuICAvLyBEaXJlY3RpdmVzXG4gIExhenlMb2FkRGlyZWN0aXZlLFxuICBNYXRjaEhlaWdodERpcmVjdGl2ZSxcbiAgUmVzaXphYmxlRGlyZWN0aXZlLFxuXG4gIC8vIFBpcGVzXG4gIEVsbGlwc2VzUGlwZSxcbiAgU2FmZUh0bWxQaXBlLFxuICBEYXRlQWdvUGlwZSxcbl07XG5cbi8qKlxuICogQmFzZSBtb2R1bGVcbiAqL1xuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0Fwb2xsb01vZHVsZSwgSHR0cENsaWVudE1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogZWxlbWVudHMsXG4gIGV4cG9ydHM6IFsuLi5lbGVtZW50cywgQXBvbGxvTW9kdWxlLCBIdHRwQ2xpZW50TW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZU1vZHVsZSB7XG4gIC8qKlxuICAgKiBTZXQgY29uZmlndXJhdGlvbiBvZiBiYXNlIG1vZHVsZSBpbiByb290IG1vZHVsZSBvZiB0aGUgYXBwXG4gICAqL1xuICBzdGF0aWMgZm9yUm9vdChiYXNlTW9kdWxlQ29uZmlnOiBCYXNlTW9kdWxlQ29uZmlnID0ge30sIEFwcEF1dGhTZXJ2aWNlPyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QmFzZU1vZHVsZT4ge1xuICAgIC8vIERlZmF1bHQgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgYXBpVXJsOiAnJyxcbiAgICAgIGF1dGhHdWFyZFJlZGlyZWN0VXJsOiAnL2F1dGgnLFxuICAgICAgbG9nZ2luZzogZmFsc2UsXG4gICAgICB2ZXJzaW9uOiBudWxsLFxuICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgc2Nyb2xsRGV0ZWN0aW9uT2Zmc2V0OiAyMDAsXG4gICAgICBzY3JvbGxPZmZzZXQ6IDEwMCxcbiAgICAgIHN0b3JhZ2VUeXBlOiAnbG9jYWwnLFxuICAgICAgLi4uYmFzZU1vZHVsZUNvbmZpZyxcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnQ29uZmlnOicsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSBwcm92aWRlcnNcbiAgICBjb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IEJBU0VfTU9EVUxFX0NPTkZJRyxcbiAgICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIEFkZCBhcG9sbG8gZmVhdHVyZXMgaWYgQVBJIFVSTCBpcyBzZXRcbiAgICBpZiAoYmFzZU1vZHVsZUNvbmZpZy5hcGlVcmwpIHtcbiAgICAgIHByb3ZpZGVycy5wdXNoKHtcbiAgICAgICAgcHJvdmlkZTogQVBPTExPX09QVElPTlMsXG4gICAgICAgIHVzZUZhY3Rvcnk6IGFwb2xsb09wdGlvbnNGYWN0b3J5LFxuICAgICAgICBkZXBzOiBbQkFTRV9NT0RVTEVfQ09ORklHLCBIdHRwTGluaywgQXBwQXV0aFNlcnZpY2UgPyBBcHBBdXRoU2VydmljZSA6IEF1dGhTZXJ2aWNlLCBXc1NlcnZpY2VdLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjb25maWcubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ2FwaVVybCBpcyBtaXNzaW5nLCBBcG9sbG9MaW5rIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIC8vIFJldHVybiByb290IG1vZHVsZVxuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQmFzZU1vZHVsZSxcbiAgICAgIHByb3ZpZGVycyxcbiAgICB9O1xuICB9XG59XG4iXX0=