angular-odata 0.100.1 → 0.101.0

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 (58) hide show
  1. package/esm2020/lib/api.mjs +2 -2
  2. package/esm2020/lib/cache/cache.mjs +56 -4
  3. package/esm2020/lib/cache/memory.mjs +14 -4
  4. package/esm2020/lib/cache/storage.mjs +21 -2
  5. package/esm2020/lib/client.mjs +3 -3
  6. package/esm2020/lib/constants.mjs +2 -1
  7. package/esm2020/lib/models/collection.mjs +100 -39
  8. package/esm2020/lib/models/model.mjs +17 -2
  9. package/esm2020/lib/models/options.mjs +119 -81
  10. package/esm2020/lib/module.mjs +4 -4
  11. package/esm2020/lib/options.mjs +3 -8
  12. package/esm2020/lib/resources/query/expressions/syntax.mjs +1 -1
  13. package/esm2020/lib/resources/query/handlers.mjs +69 -1
  14. package/esm2020/lib/resources/resource.mjs +13 -9
  15. package/esm2020/lib/resources/responses/annotations.mjs +1 -1
  16. package/esm2020/lib/resources/responses/metadata.mjs +1 -1
  17. package/esm2020/lib/resources/responses/options.mjs +1 -1
  18. package/esm2020/lib/resources/responses/response.mjs +2 -2
  19. package/esm2020/lib/resources/types/batch.mjs +108 -97
  20. package/esm2020/lib/schema/callable.mjs +3 -3
  21. package/esm2020/lib/schema/enum-type.mjs +5 -2
  22. package/esm2020/lib/schema/parsers/callable.mjs +10 -20
  23. package/esm2020/lib/schema/parsers/enum-type.mjs +13 -16
  24. package/esm2020/lib/schema/parsers/structured-type.mjs +13 -25
  25. package/esm2020/lib/schema/structured-type.mjs +8 -4
  26. package/esm2020/lib/services/factory.mjs +3 -3
  27. package/esm2020/lib/types.mjs +1 -1
  28. package/esm2020/lib/utils/arrays.mjs +10 -0
  29. package/esm2020/lib/utils/enums.mjs +3 -3
  30. package/esm2020/lib/utils/objects.mjs +10 -5
  31. package/esm2020/lib/utils/types.mjs +5 -1
  32. package/fesm2015/angular-odata.mjs +2927 -2651
  33. package/fesm2015/angular-odata.mjs.map +1 -1
  34. package/fesm2020/angular-odata.mjs +2927 -2650
  35. package/fesm2020/angular-odata.mjs.map +1 -1
  36. package/lib/cache/cache.d.ts +62 -1
  37. package/lib/cache/memory.d.ts +10 -0
  38. package/lib/cache/storage.d.ts +19 -0
  39. package/lib/constants.d.ts +1 -0
  40. package/lib/models/collection.d.ts +9 -5
  41. package/lib/models/model.d.ts +6 -3
  42. package/lib/models/options.d.ts +11 -10
  43. package/lib/options.d.ts +3 -7
  44. package/lib/resources/query/handlers.d.ts +119 -0
  45. package/lib/resources/resource.d.ts +4 -4
  46. package/lib/resources/responses/options.d.ts +2 -2
  47. package/lib/resources/types/batch.d.ts +8 -11
  48. package/lib/schema/callable.d.ts +4 -4
  49. package/lib/schema/enum-type.d.ts +4 -4
  50. package/lib/schema/parsers/callable.d.ts +10 -10
  51. package/lib/schema/parsers/enum-type.d.ts +7 -7
  52. package/lib/schema/parsers/structured-type.d.ts +11 -11
  53. package/lib/schema/structured-type.d.ts +4 -4
  54. package/lib/types.d.ts +6 -8
  55. package/lib/utils/arrays.d.ts +3 -0
  56. package/lib/utils/enums.d.ts +2 -2
  57. package/lib/utils/types.d.ts +1 -0
  58. package/package.json +1 -1
@@ -25,10 +25,10 @@ export class ODataModule {
25
25
  };
26
26
  }
27
27
  }
28
- ODataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
29
- ODataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, imports: [HttpClientModule] });
30
- ODataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, providers: [ODataClient, ODataServiceFactory], imports: [[HttpClientModule]] });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ODataModule, decorators: [{
28
+ ODataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ODataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
29
+ ODataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ODataModule, imports: [HttpClientModule] });
30
+ ODataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ODataModule, providers: [ODataClient, ODataServiceFactory], imports: [[HttpClientModule]] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ODataModule, decorators: [{
32
32
  type: NgModule,
33
33
  args: [{
34
34
  imports: [HttpClientModule],
@@ -18,16 +18,11 @@ export class ODataApiOptions {
18
18
  this.nonParenthesisForEmptyParameterFunction =
19
19
  config.nonParenthesisForEmptyParameterFunction || false;
20
20
  }
21
- get helper() {
22
- return ODataHelper[this.version];
23
- }
24
- }
25
- export class ODataParserOptions {
26
- constructor(config) {
27
- this.version = config.version || DEFAULT_VERSION;
21
+ get parserOptions() {
22
+ return { version: this.version, ...this.accept };
28
23
  }
29
24
  get helper() {
30
25
  return ODataHelper[this.version];
31
26
  }
32
27
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGVBQWUsR0FDaEIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLE9BQU8sZUFBZTtJQTBFMUIsWUFBWSxNQUFrQjtRQS9COUIsU0FBSSxHQVNBLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUF1QnhDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxzQkFBc0IsQ0FBQztRQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksb0JBQW9CLENBQUM7UUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO1FBQ2hELElBQUksQ0FBQyx1Q0FBdUM7WUFDMUMsTUFBTSxDQUFDLHVDQUF1QyxJQUFJLEtBQUssQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFHN0IsWUFBWSxNQUFxQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBpT3B0aW9ucyxcbiAgRmV0Y2hQb2xpY3ksXG4gIE9EYXRhTWV0YWRhdGFUeXBlLFxuICBPRGF0YVZlcnNpb24sXG4gIE9wdGlvbnNIZWxwZXIsXG4gIFF1ZXJ5T3B0aW9uTmFtZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9GRVRDSF9QT0xJQ1ksXG4gIERFRkFVTFRfU1RSSVBfTUVUQURBVEEsXG4gIERFRkFVTFRfVkVSU0lPTixcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBPRGF0YUhlbHBlciB9IGZyb20gJy4vaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhQXBpT3B0aW9ucyBpbXBsZW1lbnRzIEFwaU9wdGlvbnMsIE9wdGlvbnNIZWxwZXIge1xuICAvKipcbiAgICogRGVmYXVsdCBPRGF0YSB2ZXJzaW9uXG4gICAqL1xuICB2ZXJzaW9uOiBPRGF0YVZlcnNpb247XG4gIC8qKlxuICAgKiBTZW5kIGVudW0gYXMgc3RyaW5nIGluIHRoZSByZXF1ZXN0XG4gICAqL1xuICBzdHJpbmdBc0VudW06IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdHJpcCBtZXRhZGF0YSBmcm9tIHRoZSByZXNwb25zZVxuICAgKi9cbiAgc3RyaXBNZXRhZGF0YTogT0RhdGFNZXRhZGF0YVR5cGU7XG4gIC8qKlxuICAgKiBDYWNoZSBmZXRjaCBwb2xpY3lcbiAgICovXG4gIGZldGNoUG9saWN5OiBGZXRjaFBvbGljeTtcbiAgLyoqXG4gICAqIEV4dHJhIHBhcmFtcyB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0XG4gICAqL1xuICBwYXJhbXM6IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICAvKipcbiAgICogRXh0cmEgaGVhZGVycyB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0XG4gICAqL1xuICBoZWFkZXJzOiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcbiAgLyoqXG4gICAqIEh0dHAgcmVxdWVzdCB3aXRoIGNyZWRlbnRpYWxzXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2VuZCBxdWVyeSBvcHRpb25zIGluIHRoZSByZXF1ZXN0IGJvZHlcbiAgICovXG4gIGJvZHlRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgLyoqXG4gICAqIEN1c3RvbWl6ZSBhY2NlcHQgaGVhZGVyIHdpdGggT0RhdGEgb3B0aW9uc1xuICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS1qc29uLWZvcm1hdC92NC4wMS9vZGF0YS1qc29uLWZvcm1hdC12NC4wMS5odG1sI3NlY19SZXF1ZXN0aW5ndGhlSlNPTkZvcm1hdFxuICAgKi9cbiAgYWNjZXB0Pzoge1xuICAgIGV4cG9uZW50aWFsRGVjaW1hbHM/OiBib29sZWFuO1xuICAgIGllZWU3NTRDb21wYXRpYmxlPzogYm9vbGVhbjtcbiAgICBtZXRhZGF0YT86IE9EYXRhTWV0YWRhdGFUeXBlO1xuICAgIHN0cmVhbWluZz86IGJvb2xlYW47XG4gIH07XG4gIGV0YWc6IHtcbiAgICAvKipcbiAgICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wL2VycmF0YTAyL29zL2NvbXBsZXRlL3BhcnQxLXByb3RvY29sL29kYXRhLXY0LjAtZXJyYXRhMDItb3MtcGFydDEtcHJvdG9jb2wtY29tcGxldGUuaHRtbCNfVG9jNDA2Mzk4MjI5XG4gICAgICovXG4gICAgaWZNYXRjaDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wL2VycmF0YTAyL29zL2NvbXBsZXRlL3BhcnQxLXByb3RvY29sL29kYXRhLXY0LjAtZXJyYXRhMDItb3MtcGFydDEtcHJvdG9jb2wtY29tcGxldGUuaHRtbCNfVG9jNDA2Mzk4MjMwXG4gICAgICovXG4gICAgaWZOb25lTWF0Y2g6IGJvb2xlYW47XG4gIH0gPSB7IGlmTWF0Y2g6IHRydWUsIGlmTm9uZU1hdGNoOiBmYWxzZSB9O1xuICBwcmVmZXI/OiB7XG4gICAgLyoqXG4gICAgICogQGxpbmsgaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMC9lcnJhdGEwMi9vcy9jb21wbGV0ZS9wYXJ0MS1wcm90b2NvbC9vZGF0YS12NC4wLWVycmF0YTAyLW9zLXBhcnQxLXByb3RvY29sLWNvbXBsZXRlLmh0bWwjX1RvYzQwNjM5ODIzOFxuICAgICAqL1xuICAgIG1heFBhZ2VTaXplPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAvZXJyYXRhMDIvb3MvY29tcGxldGUvcGFydDEtcHJvdG9jb2wvb2RhdGEtdjQuMC1lcnJhdGEwMi1vcy1wYXJ0MS1wcm90b2NvbC1jb21wbGV0ZS5odG1sI19Ub2M0MDYzOTgyNDBcbiAgICAgKi9cbiAgICByZXR1cm4/OiAncmVwcmVzZW50YXRpb24nIHwgJ21pbmltYWwnO1xuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAvZXJyYXRhMDIvb3MvY29tcGxldGUvcGFydDEtcHJvdG9jb2wvb2RhdGEtdjQuMC1lcnJhdGEwMi1vcy1wYXJ0MS1wcm90b2NvbC1jb21wbGV0ZS5odG1sI19Ub2M0MDYzOTgyMzZcbiAgICAgKi9cbiAgICBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAvZXJyYXRhMDIvb3MvY29tcGxldGUvcGFydDEtcHJvdG9jb2wvb2RhdGEtdjQuMC1lcnJhdGEwMi1vcy1wYXJ0MS1wcm90b2NvbC1jb21wbGV0ZS5odG1sI19Ub2M0MDYzOTgyMzdcbiAgICAgKi9cbiAgICBpbmNsdWRlQW5ub3RhdGlvbnM/OiBzdHJpbmc7XG4gIH07XG4gIGRlbGV0ZVJlZkJ5OiAncGF0aCcgfCAnaWQnO1xuICBub25QYXJlbnRoZXNpc0ZvckVtcHR5UGFyYW1ldGVyRnVuY3Rpb246IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBcGlPcHRpb25zKSB7XG4gICAgdGhpcy52ZXJzaW9uID0gY29uZmlnLnZlcnNpb24gfHwgREVGQVVMVF9WRVJTSU9OO1xuICAgIHRoaXMuc3RyaW5nQXNFbnVtID0gY29uZmlnLnN0cmluZ0FzRW51bSB8fCBmYWxzZTtcbiAgICB0aGlzLnBhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwge307XG4gICAgdGhpcy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIHRoaXMuc3RyaXBNZXRhZGF0YSA9IGNvbmZpZy5zdHJpcE1ldGFkYXRhIHx8IERFRkFVTFRfU1RSSVBfTUVUQURBVEE7XG4gICAgdGhpcy5mZXRjaFBvbGljeSA9IGNvbmZpZy5mZXRjaFBvbGljeSB8fCBERUZBVUxUX0ZFVENIX1BPTElDWTtcbiAgICB0aGlzLmJvZHlRdWVyeU9wdGlvbnMgPSBjb25maWcuYm9keVF1ZXJ5T3B0aW9ucyB8fCBbXTtcbiAgICB0aGlzLmFjY2VwdCA9IGNvbmZpZy5hY2NlcHQ7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmV0YWcsIGNvbmZpZy5ldGFnIHx8IHt9KTtcbiAgICB0aGlzLnByZWZlciA9IGNvbmZpZy5wcmVmZXI7XG4gICAgdGhpcy5kZWxldGVSZWZCeSA9IGNvbmZpZy5kZWxldGVSZWZCeSB8fCAncGF0aCc7XG4gICAgdGhpcy5ub25QYXJlbnRoZXNpc0ZvckVtcHR5UGFyYW1ldGVyRnVuY3Rpb24gPVxuICAgICAgY29uZmlnLm5vblBhcmVudGhlc2lzRm9yRW1wdHlQYXJhbWV0ZXJGdW5jdGlvbiB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBoZWxwZXIoKSB7XG4gICAgcmV0dXJuIE9EYXRhSGVscGVyW3RoaXMudmVyc2lvbl07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhUGFyc2VyT3B0aW9ucyBpbXBsZW1lbnRzIE9wdGlvbnNIZWxwZXIge1xuICB2ZXJzaW9uOiBPRGF0YVZlcnNpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBPcHRpb25zSGVscGVyKSB7XG4gICAgdGhpcy52ZXJzaW9uID0gY29uZmlnLnZlcnNpb24gfHwgREVGQVVMVF9WRVJTSU9OO1xuICB9XG5cbiAgZ2V0IGhlbHBlcigpIHtcbiAgICByZXR1cm4gT0RhdGFIZWxwZXJbdGhpcy52ZXJzaW9uXTtcbiAgfVxufVxuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGVBQWUsR0FDaEIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLE9BQU8sZUFBZTtJQTBFMUIsWUFBWSxNQUFrQjtRQS9COUIsU0FBSSxHQVNBLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUF1QnhDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsSUFBSSxzQkFBc0IsQ0FBQztRQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksb0JBQW9CLENBQUM7UUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO1FBQ2hELElBQUksQ0FBQyx1Q0FBdUM7WUFDMUMsTUFBTSxDQUFDLHVDQUF1QyxJQUFJLEtBQUssQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBpT3B0aW9ucyxcbiAgRmV0Y2hQb2xpY3ksXG4gIE9EYXRhTWV0YWRhdGFUeXBlLFxuICBPRGF0YVZlcnNpb24sXG4gIFBhcnNlck9wdGlvbnMsXG4gIFF1ZXJ5T3B0aW9uTmFtZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9GRVRDSF9QT0xJQ1ksXG4gIERFRkFVTFRfU1RSSVBfTUVUQURBVEEsXG4gIERFRkFVTFRfVkVSU0lPTixcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBPRGF0YUhlbHBlciB9IGZyb20gJy4vaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhQXBpT3B0aW9ucyBpbXBsZW1lbnRzIEFwaU9wdGlvbnMge1xuICAvKipcbiAgICogRGVmYXVsdCBPRGF0YSB2ZXJzaW9uXG4gICAqL1xuICB2ZXJzaW9uOiBPRGF0YVZlcnNpb247XG4gIC8qKlxuICAgKiBTZW5kIGVudW0gYXMgc3RyaW5nIGluIHRoZSByZXF1ZXN0XG4gICAqL1xuICBzdHJpbmdBc0VudW06IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdHJpcCBtZXRhZGF0YSBmcm9tIHRoZSByZXNwb25zZVxuICAgKi9cbiAgc3RyaXBNZXRhZGF0YTogT0RhdGFNZXRhZGF0YVR5cGU7XG4gIC8qKlxuICAgKiBDYWNoZSBmZXRjaCBwb2xpY3lcbiAgICovXG4gIGZldGNoUG9saWN5OiBGZXRjaFBvbGljeTtcbiAgLyoqXG4gICAqIEV4dHJhIHBhcmFtcyB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0XG4gICAqL1xuICBwYXJhbXM6IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICAvKipcbiAgICogRXh0cmEgaGVhZGVycyB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0XG4gICAqL1xuICBoZWFkZXJzOiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcbiAgLyoqXG4gICAqIEh0dHAgcmVxdWVzdCB3aXRoIGNyZWRlbnRpYWxzXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2VuZCBxdWVyeSBvcHRpb25zIGluIHRoZSByZXF1ZXN0IGJvZHlcbiAgICovXG4gIGJvZHlRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgLyoqXG4gICAqIEN1c3RvbWl6ZSBhY2NlcHQgaGVhZGVyIHdpdGggT0RhdGEgb3B0aW9uc1xuICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS1qc29uLWZvcm1hdC92NC4wMS9vZGF0YS1qc29uLWZvcm1hdC12NC4wMS5odG1sI3NlY19SZXF1ZXN0aW5ndGhlSlNPTkZvcm1hdFxuICAgKi9cbiAgYWNjZXB0Pzoge1xuICAgIGV4cG9uZW50aWFsRGVjaW1hbHM/OiBib29sZWFuO1xuICAgIGllZWU3NTRDb21wYXRpYmxlPzogYm9vbGVhbjtcbiAgICBtZXRhZGF0YT86IE9EYXRhTWV0YWRhdGFUeXBlO1xuICAgIHN0cmVhbWluZz86IGJvb2xlYW47XG4gIH07XG4gIGV0YWc6IHtcbiAgICAvKipcbiAgICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wL2VycmF0YTAyL29zL2NvbXBsZXRlL3BhcnQxLXByb3RvY29sL29kYXRhLXY0LjAtZXJyYXRhMDItb3MtcGFydDEtcHJvdG9jb2wtY29tcGxldGUuaHRtbCNfVG9jNDA2Mzk4MjI5XG4gICAgICovXG4gICAgaWZNYXRjaDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wL2VycmF0YTAyL29zL2NvbXBsZXRlL3BhcnQxLXByb3RvY29sL29kYXRhLXY0LjAtZXJyYXRhMDItb3MtcGFydDEtcHJvdG9jb2wtY29tcGxldGUuaHRtbCNfVG9jNDA2Mzk4MjMwXG4gICAgICovXG4gICAgaWZOb25lTWF0Y2g6IGJvb2xlYW47XG4gIH0gPSB7IGlmTWF0Y2g6IHRydWUsIGlmTm9uZU1hdGNoOiBmYWxzZSB9O1xuICBwcmVmZXI/OiB7XG4gICAgLyoqXG4gICAgICogQGxpbmsgaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMC9lcnJhdGEwMi9vcy9jb21wbGV0ZS9wYXJ0MS1wcm90b2NvbC9vZGF0YS12NC4wLWVycmF0YTAyLW9zLXBhcnQxLXByb3RvY29sLWNvbXBsZXRlLmh0bWwjX1RvYzQwNjM5ODIzOFxuICAgICAqL1xuICAgIG1heFBhZ2VTaXplPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAvZXJyYXRhMDIvb3MvY29tcGxldGUvcGFydDEtcHJvdG9jb2wvb2RhdGEtdjQuMC1lcnJhdGEwMi1vcy1wYXJ0MS1wcm90b2NvbC1jb21wbGV0ZS5odG1sI19Ub2M0MDYzOTgyNDBcbiAgICAgKi9cbiAgICByZXR1cm4/OiAncmVwcmVzZW50YXRpb24nIHwgJ21pbmltYWwnO1xuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAvZXJyYXRhMDIvb3MvY29tcGxldGUvcGFydDEtcHJvdG9jb2wvb2RhdGEtdjQuMC1lcnJhdGEwMi1vcy1wYXJ0MS1wcm90b2NvbC1jb21wbGV0ZS5odG1sI19Ub2M0MDYzOTgyMzZcbiAgICAgKi9cbiAgICBjb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEBsaW5rIGh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAvZXJyYXRhMDIvb3MvY29tcGxldGUvcGFydDEtcHJvdG9jb2wvb2RhdGEtdjQuMC1lcnJhdGEwMi1vcy1wYXJ0MS1wcm90b2NvbC1jb21wbGV0ZS5odG1sI19Ub2M0MDYzOTgyMzdcbiAgICAgKi9cbiAgICBpbmNsdWRlQW5ub3RhdGlvbnM/OiBzdHJpbmc7XG4gIH07XG4gIGRlbGV0ZVJlZkJ5OiAncGF0aCcgfCAnaWQnO1xuICBub25QYXJlbnRoZXNpc0ZvckVtcHR5UGFyYW1ldGVyRnVuY3Rpb246IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBcGlPcHRpb25zKSB7XG4gICAgdGhpcy52ZXJzaW9uID0gY29uZmlnLnZlcnNpb24gfHwgREVGQVVMVF9WRVJTSU9OO1xuICAgIHRoaXMuc3RyaW5nQXNFbnVtID0gY29uZmlnLnN0cmluZ0FzRW51bSB8fCBmYWxzZTtcbiAgICB0aGlzLnBhcmFtcyA9IGNvbmZpZy5wYXJhbXMgfHwge307XG4gICAgdGhpcy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIHRoaXMuc3RyaXBNZXRhZGF0YSA9IGNvbmZpZy5zdHJpcE1ldGFkYXRhIHx8IERFRkFVTFRfU1RSSVBfTUVUQURBVEE7XG4gICAgdGhpcy5mZXRjaFBvbGljeSA9IGNvbmZpZy5mZXRjaFBvbGljeSB8fCBERUZBVUxUX0ZFVENIX1BPTElDWTtcbiAgICB0aGlzLmJvZHlRdWVyeU9wdGlvbnMgPSBjb25maWcuYm9keVF1ZXJ5T3B0aW9ucyB8fCBbXTtcbiAgICB0aGlzLmFjY2VwdCA9IGNvbmZpZy5hY2NlcHQ7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmV0YWcsIGNvbmZpZy5ldGFnIHx8IHt9KTtcbiAgICB0aGlzLnByZWZlciA9IGNvbmZpZy5wcmVmZXI7XG4gICAgdGhpcy5kZWxldGVSZWZCeSA9IGNvbmZpZy5kZWxldGVSZWZCeSB8fCAncGF0aCc7XG4gICAgdGhpcy5ub25QYXJlbnRoZXNpc0ZvckVtcHR5UGFyYW1ldGVyRnVuY3Rpb24gPVxuICAgICAgY29uZmlnLm5vblBhcmVudGhlc2lzRm9yRW1wdHlQYXJhbWV0ZXJGdW5jdGlvbiB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBwYXJzZXJPcHRpb25zKCk6IFBhcnNlck9wdGlvbnMge1xuICAgIHJldHVybiB7IHZlcnNpb246IHRoaXMudmVyc2lvbiwgLi4udGhpcy5hY2NlcHQgfTtcbiAgfVxuXG4gIGdldCBoZWxwZXIoKSB7XG4gICAgcmV0dXJuIE9EYXRhSGVscGVyW3RoaXMudmVyc2lvbl07XG4gIH1cbn1cbiJdfQ==
@@ -401,4 +401,4 @@ export class ODataSyntax {
401
401
  }
402
402
  applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
403
403
  export const syntax = new ODataSyntax();
404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBaUI1QyxNQUFNLE9BQU8sS0FBSztJQUNoQixZQUFtQixPQUFlLEVBQUU7UUFBakIsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUFHLENBQUM7SUFFeEMsTUFBTSxDQUFDLE9BQU8sQ0FBbUIsT0FBZSxFQUFFO1FBQ2hELE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxHQUFHLENBQUMsTUFBUyxFQUFFLEdBQW9CO1FBQ2pDLElBQUksSUFBSSxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUF1QixFQUFFLEVBQUUsQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ3ZDO2FBQ0ksSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQ3hCLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQzthQUNJLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDbkMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDdEI7YUFDSSxJQUFJLEdB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RSxLQUFVLEVBQUUsS0FBYztRQUN0QyxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sY0FBYztDQUFNO0FBTWpDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7SUFDMUIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixlQUFlO0NBQ2hCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBd0IsSUFBSSxjQUFjLEVBQU8sQ0FBQztBQUV4RSxNQUFNLE9BQU8sY0FBYztDQUFNO0FBV2pDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7SUFDMUIsNEJBQTRCO0lBQzVCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsWUFBWTtJQUNaLG9CQUFvQjtDQUNyQixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXdCLElBQUksY0FBYyxFQUFPLENBQUM7QUFFeEUsTUFBTSxPQUFPLFdBQVc7Q0FBTTtBQUU5QixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFFM0QsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFxQixJQUFJLFdBQVcsRUFBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5Q3VzdG9tVHlwZSB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgbm9ybWFsaXplVmFsdWUgfSBmcm9tICcuLi9idWlsZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJhYmxlIHtcbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmc7XG4gIHRvU3RyaW5nKCk6IHN0cmluZztcbiAgdG9KU09OKCk6IGFueTtcbiAgY2xvbmUoKTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgRmllbGQ8VCBleHRlbmRzIG9iamVjdD4gaW1wbGVtZW50cyBQcm94eUhhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gJycpIHt9XG5cbiAgc3RhdGljIGZhY3Rvcnk8VCBleHRlbmRzIG9iamVjdD4obmFtZTogc3RyaW5nID0gJycpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5KHsgX25hbWU6IG5hbWUgfSBhcyBULCBuZXcgRmllbGQ8VD4oKSk7XG4gIH1cblxuICBnZXQodGFyZ2V0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCk6IGFueSB7XG4gICAgbGV0IG5hbWUgPSAodGFyZ2V0IGFzIGFueSlbJ19uYW1lJ107XG4gICAgaWYgKGtleSA9PT0gJ3JlbmRlcicpIHtcbiAgICAgIHJldHVybiAoeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgcHJlZml4ID8gYCR7cHJlZml4fS8ke25hbWV9YCA6IG5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGtleSA9PT0gJ2Nsb25lJykge1xuICAgICAgcmV0dXJuICgpID0+IEZpZWxkLmZhY3RvcnkobmFtZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGtleSA9PT0gU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gICAgICByZXR1cm4gKCkgPT4gJ0ZpZWxkJztcbiAgICB9XG4gICAgZWxzZSBpZiAoa2V5ID09PSAndG9KU09OJykge1xuICAgICAgcmV0dXJuICgpID0+ICh7XG4gICAgICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lID8gYCR7bmFtZX0vJHtrZXkgYXMgc3RyaW5nfWAgOiBrZXk7XG4gICAgICByZXR1cm4gbmV3IFByb3h5KHsgX25hbWU6IG5hbWUgfSBhcyBhbnksIHRoaXMpO1xuICAgIH1cbiAgfVxuICBcbiAgaGFzKHRhcmdldDogVCwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBbJ3RvSlNPTicsICdjbG9uZScsICdyZW5kZXInXS5pbmNsdWRlcyhrZXkpIHx8IGtleSBpbiB0YXJnZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlNaXhpbnMoZGVyaXZlZEN0b3I6IGFueSwgY29uc3RydWN0b3JzOiBhbnlbXSkge1xuICBjb25zdHJ1Y3RvcnMuZm9yRWFjaCgoYmFzZUN0b3IpID0+IHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiYXNlQ3Rvci5wcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgZGVyaXZlZEN0b3IucHJvdG90eXBlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2VDdG9yLnByb3RvdHlwZSwgbmFtZSkgfHxcbiAgICAgICAgICBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihcbiAgdmFsdWU6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgbm9ybWFsaXplLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlKHN5bnRheCksIHsgYWxpYXNlcywgbm9ybWFsaXplLCBwcmVmaXggfSk7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHZhbHVlLnJlbmRlciAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiByZW5kZXIodmFsdWUucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSksIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBub3JtYWxpemUsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXgsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSA6IHZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb248VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSxcbiAgICBwcm90ZWN0ZWQgZXNjYXBlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbZmllbGQsIC4uLnZhbHVlc10gPSB0aGlzLnZhbHVlcztcblxuICAgIGZpZWxkID0gcmVuZGVyKGZpZWxkLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgIGZpZWxkLFxuICAgICAgLi4udmFsdWVzLm1hcCgodikgPT5cbiAgICAgICAgcmVuZGVyKHYsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXgsIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgfSlcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSgke3BhcmFtcy5qb2luKCcsICcpfSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPihcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLm5vcm1hbGl6ZSxcbiAgICAgIHRoaXMuZXNjYXBlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGNvbmNhdChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29uY2F0JywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBjb250YWlucyhmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29udGFpbnMnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGVuZHNXaXRoKGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdlbmRzd2l0aCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgaW5kZXhPZihmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaW5kZXhvZicsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgbGVuZ3RoKHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdsZW5ndGgnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3RhcnRzV2l0aChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc3RhcnRzd2l0aCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3ViU3RyaW5nKGZpZWxkOiBhbnksIHN0YXJ0OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXMgPSBbZmllbGQsIHN0YXJ0XTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N1YnN0cmluZycsIHZhbHVlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4ge1xuICBoYXNTdWJzZXQoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXQnLCBbczEsIHMyXSk7XG4gIH1cbiAgaGFzU3Vic2VxdWVuY2UoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXF1ZW5jZScsIFtzMSwgczJdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nRnVuY3Rpb25zPFQ+IHtcbiAgbWF0Y2hlc1BhdHRlcm4odmFsdWU6IFQgfCBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21hdGNoZXNQYXR0ZXJuJywgW3ZhbHVlLCBwYXR0ZXJuXSk7XG4gIH1cbiAgdG9Mb3dlcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvbG93ZXInLCBbdmFsdWVdKTtcbiAgfVxuICB0b1VwcGVyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG91cHBlcicsIFt2YWx1ZV0pO1xuICB9XG4gIHRyaW0odmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0cmltJywgW3ZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+IHtcbiAgZGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIGRheSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF5JywgW3ZhbHVlXSk7XG4gIH1cbiAgZnJhY3Rpb25hbHNlY29uZHModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2ZyYWN0aW9uYWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgaG91cih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaG91cicsIFt2YWx1ZV0pO1xuICB9XG4gIG1heGRhdGV0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtYXhkYXRldGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1pbmRhdGV0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtaW5kYXRldGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1pbnV0ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWludXRlJywgW3ZhbHVlXSk7XG4gIH1cbiAgbW9udGgodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21vbnRoJywgW3ZhbHVlXSk7XG4gIH1cbiAgbm93KCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ25vdycsIFtdKTtcbiAgfVxuICBzZWNvbmQodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3NlY29uZCcsIFt2YWx1ZV0pO1xuICB9XG4gIHRpbWUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbG9mZnNldG1pbnV0ZXModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsb2Zmc2V0bWludXRlcycsIFt2YWx1ZV0pO1xuICB9XG4gIHRvdGFsc2Vjb25kcyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG90YWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgeWVhcih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigneWVhcicsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljRnVuY3Rpb25zPFQ+IHtcbiAgY2VpbGluZyh2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NlaWxpbmcnLCBbdmFsdWVdKTtcbiAgfVxuICBmbG9vcih2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Zsb29yJywgW3ZhbHVlXSk7XG4gIH1cbiAgcm91bmQodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdyb3VuZCcsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlRnVuY3Rpb25zPFQ+IHtcbiAgY2FzdCh2YWx1ZTogVCB8IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc3QnLCBbdmFsdWUsIHR5cGVdKTtcbiAgfVxuXG4gIGlzb2YodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdpc29mJywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0Z1bmN0aW9uczxUPiB7XG4gIGdlb0Rpc3RhbmNlKHZhbHVlOiBULCBwb2ludDogc3RyaW5nLCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmRpc3RhbmNlJywgW3ZhbHVlLCBwb2ludF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2VvSW50ZXJzZWN0cyh2YWx1ZTogVCwgcG9seWdvbjogc3RyaW5nLCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmludGVyc2VjdHMnLCBbdmFsdWUsIHBvbHlnb25dLCBub3JtYWxpemUpO1xuICB9XG4gIGdlb0xlbmd0aChsaW5lOiBULCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmxlbmd0aCcsIFtsaW5lXSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge1xuICBjYXNlKGNvbmRpdGlvbjogVCB8IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc2UnLCBbY29uZGl0aW9uLCB2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVyYXRvcjxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3A6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZVxuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnT3BlcmF0b3InO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByaWdodCA9IEFycmF5LmlzQXJyYXkocmlnaHQpXG4gICAgICAgID8gYCgke3JpZ2h0XG4gICAgICAgICAgICAubWFwKCh2KSA9PlxuICAgICAgICAgICAgICByZW5kZXIodiwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJywnKX0pYFxuICAgICAgICA6IHJlbmRlcihyaWdodCwge1xuICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHt0aGlzLm9wfSAke3JpZ2h0fWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLm9wfSgke2xlZnR9KWA7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKFxuICAgICAgdGhpcy5vcCxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLm5vcm1hbGl6ZVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvZ2ljYWxPcGVyYXRvcnM8VD4ge1xuICBlcShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdlcScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbmUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGd0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2d0JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdnZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbHQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbHQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGxlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2xlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICAvKlxuICBhbmQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignYW5kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBvcihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdvcicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgKi9cbiAgbm90KHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdub3QnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG4gIGhhcyhsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdoYXMnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGluKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2luJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY09wZXJhdG9yczxUPiB7XG4gIGFkZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdhZGQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIHN1YihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdzdWInLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG11bChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtdWwnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGRpdihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdkaXYnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1vZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtb2QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lZyh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignLScsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwaW5nPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBncm91cDogUmVuZGVyYWJsZSkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdHcm91cGluZyc7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcih0aGlzLmdyb3VwLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pfSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBHcm91cGluZyhPYmplY3RzLmNsb25lKHRoaXMuZ3JvdXApKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBhbGlhcz86IHN0cmluZ1xuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGFtYmRhJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMsXG4gICAgICBhbGlhczogdGhpcy5hbGlhcyxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSk7XG4gICAgbGV0IGFsaWFzID0gdGhpcy5hbGlhcyB8fCBsZWZ0LnNwbGl0KCcvJykucG9wKCkudG9Mb3dlckNhc2UoKVswXTtcbiAgICByZXR1cm4gYCR7bGVmdH0vJHt0aGlzLm9wfSgke2FsaWFzfToke3JlbmRlcihyaWdodCwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICAgIHByZWZpeDogYWxpYXMsXG4gICAgfSl9KWA7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYShcbiAgICAgIHRoaXMub3AsXG4gICAgICB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IE9iamVjdHMuY2xvbmUodikpLFxuICAgICAgdGhpcy5hbGlhc1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYU9wZXJhdG9yczxUPiB7XG4gIGFueShmaWVsZDogVCwgdmFsdWU6IGFueSwgYWxpYXM/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYSgnYW55JywgW2ZpZWxkLCB2YWx1ZV0sIGFsaWFzKTtcbiAgfVxuXG4gIGFsbChmaWVsZDogVCwgdmFsdWU6IGFueSwgYWxpYXM/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYSgnYWxsJywgW2ZpZWxkLCB2YWx1ZV0sIGFsaWFzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFPcGVyYXRvcnM8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFPcGVyYXRvcnM8VD5cbiAgZXh0ZW5kcyBMb2dpY2FsT3BlcmF0b3JzPFQ+LFxuICAgIEFyaXRobWV0aWNPcGVyYXRvcnM8VD4sXG4gICAgTGFtYmRhT3BlcmF0b3JzPFQ+IHt9XG5cbmFwcGx5TWl4aW5zKE9EYXRhT3BlcmF0b3JzLCBbXG4gIExvZ2ljYWxPcGVyYXRvcnMsXG4gIEFyaXRobWV0aWNPcGVyYXRvcnMsXG4gIExhbWJkYU9wZXJhdG9ycyxcbl0pO1xuZXhwb3J0IGNvbnN0IG9wZXJhdG9yczogT0RhdGFPcGVyYXRvcnM8YW55PiA9IG5ldyBPRGF0YU9wZXJhdG9yczxhbnk+KCk7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUZ1bmN0aW9uczxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YUZ1bmN0aW9uczxUPlxuICBleHRlbmRzIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnM8VD4sXG4gICAgQ29sbGVjdGlvbkZ1bmN0aW9uczxUPixcbiAgICBTdHJpbmdGdW5jdGlvbnM8VD4sXG4gICAgRGF0ZUFuZFRpbWVGdW5jdGlvbnM8VD4sXG4gICAgQXJpdGhtZXRpY0Z1bmN0aW9uczxUPixcbiAgICBUeXBlRnVuY3Rpb25zPFQ+LFxuICAgIEdlb0Z1bmN0aW9uczxUPixcbiAgICBDb25kaXRpb25hbEZ1bmN0aW9uczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YUZ1bmN0aW9ucywgW1xuICBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zLFxuICBDb2xsZWN0aW9uRnVuY3Rpb25zLFxuICBTdHJpbmdGdW5jdGlvbnMsXG4gIERhdGVBbmRUaW1lRnVuY3Rpb25zLFxuICBBcml0aG1ldGljRnVuY3Rpb25zLFxuICBUeXBlRnVuY3Rpb25zLFxuICBHZW9GdW5jdGlvbnMsXG4gIENvbmRpdGlvbmFsRnVuY3Rpb25zLFxuXSk7XG5leHBvcnQgY29uc3QgZnVuY3Rpb25zOiBPRGF0YUZ1bmN0aW9uczxhbnk+ID0gbmV3IE9EYXRhRnVuY3Rpb25zPGFueT4oKTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhU3ludGF4PFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhU3ludGF4PFQ+IGV4dGVuZHMgT0RhdGFPcGVyYXRvcnM8VD4sIE9EYXRhRnVuY3Rpb25zPFQ+IHt9XG5hcHBseU1peGlucyhPRGF0YVN5bnRheCwgW09EYXRhT3BlcmF0b3JzLCBPRGF0YUZ1bmN0aW9uc10pO1xuXG5leHBvcnQgY29uc3Qgc3ludGF4OiBPRGF0YVN5bnRheDxhbnk+ID0gbmV3IE9EYXRhU3ludGF4PGFueT4oKTtcbiJdfQ==
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBaUI1QyxNQUFNLE9BQU8sS0FBSztJQUNoQixZQUFtQixPQUFlLEVBQUU7UUFBakIsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUFHLENBQUM7SUFFeEMsTUFBTSxDQUFDLE9BQU8sQ0FBbUIsT0FBZSxFQUFFO1FBQ2hELE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxHQUFHLENBQUMsTUFBUyxFQUFFLEdBQW9CO1FBQ2pDLElBQUksSUFBSSxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUF1QixFQUFFLEVBQUUsQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDckMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDdEI7YUFBTSxJQUFJLEdB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RSxLQUFVLEVBQUUsS0FBYztRQUN0QyxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sY0FBYztDQUFNO0FBTWpDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7SUFDMUIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixlQUFlO0NBQ2hCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBd0IsSUFBSSxjQUFjLEVBQU8sQ0FBQztBQUV4RSxNQUFNLE9BQU8sY0FBYztDQUFNO0FBV2pDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7SUFDMUIsNEJBQTRCO0lBQzVCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsWUFBWTtJQUNaLG9CQUFvQjtDQUNyQixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXdCLElBQUksY0FBYyxFQUFPLENBQUM7QUFFeEUsTUFBTSxPQUFPLFdBQVc7Q0FBTTtBQUU5QixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFFM0QsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFxQixJQUFJLFdBQVcsRUFBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5Q3VzdG9tVHlwZSB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgbm9ybWFsaXplVmFsdWUgfSBmcm9tICcuLi9idWlsZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJhYmxlIHtcbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmc7XG4gIHRvU3RyaW5nKCk6IHN0cmluZztcbiAgdG9KU09OKCk6IGFueTtcbiAgY2xvbmUoKTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgRmllbGQ8VCBleHRlbmRzIG9iamVjdD4gaW1wbGVtZW50cyBQcm94eUhhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nID0gJycpIHt9XG5cbiAgc3RhdGljIGZhY3Rvcnk8VCBleHRlbmRzIG9iamVjdD4obmFtZTogc3RyaW5nID0gJycpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5KHsgX25hbWU6IG5hbWUgfSBhcyBULCBuZXcgRmllbGQ8VD4oKSk7XG4gIH1cblxuICBnZXQodGFyZ2V0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCk6IGFueSB7XG4gICAgbGV0IG5hbWUgPSAodGFyZ2V0IGFzIGFueSlbJ19uYW1lJ107XG4gICAgaWYgKGtleSA9PT0gJ3JlbmRlcicpIHtcbiAgICAgIHJldHVybiAoeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgcHJlZml4ID8gYCR7cHJlZml4fS8ke25hbWV9YCA6IG5hbWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdjbG9uZScpIHtcbiAgICAgIHJldHVybiAoKSA9PiBGaWVsZC5mYWN0b3J5KG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiAgICAgIHJldHVybiAoKSA9PiAnRmllbGQnO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9KU09OJykge1xuICAgICAgcmV0dXJuICgpID0+ICh7XG4gICAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lID8gYCR7bmFtZX0vJHtrZXkgYXMgc3RyaW5nfWAgOiBrZXk7XG4gICAgICByZXR1cm4gbmV3IFByb3h5KHsgX25hbWU6IG5hbWUgfSBhcyBhbnksIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhcyh0YXJnZXQ6IFQsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gWyd0b0pTT04nLCAnY2xvbmUnLCAncmVuZGVyJ10uaW5jbHVkZXMoa2V5KSB8fCBrZXkgaW4gdGFyZ2V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yOiBhbnksIGNvbnN0cnVjdG9yczogYW55W10pIHtcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZUN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlQ3Rvci5wcm90b3R5cGUsIG5hbWUpIHx8XG4gICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoXG4gIHZhbHVlOiBhbnksXG4gIHtcbiAgICBhbGlhc2VzLFxuICAgIG5vcm1hbGl6ZSxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIG5vcm1hbGl6ZT86IGJvb2xlYW47XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHJlbmRlcih2YWx1ZShzeW50YXgpLCB7IGFsaWFzZXMsIG5vcm1hbGl6ZSwgcHJlZml4IH0pO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB2YWx1ZS5yZW5kZXIgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlLnJlbmRlcih7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pLCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgbm9ybWFsaXplLFxuICAgICAgZXNjYXBlLFxuICAgICAgcHJlZml4LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemUgPyBub3JtYWxpemVWYWx1ZSh2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSkgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUsXG4gICAgcHJvdGVjdGVkIGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdGdW5jdGlvbic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2ZpZWxkLCAuLi52YWx1ZXNdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBmaWVsZCA9IHJlbmRlcihmaWVsZCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KTtcbiAgICBjb25zdCBwYXJhbXMgPSBbXG4gICAgICBmaWVsZCxcbiAgICAgIC4uLnZhbHVlcy5tYXAoKHYpID0+XG4gICAgICAgIHJlbmRlcih2LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4LCBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplIH0pXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0oJHtwYXJhbXMuam9pbignLCAnKX0pYDtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IE9iamVjdHMuY2xvbmUodikpLFxuICAgICAgdGhpcy5ub3JtYWxpemUsXG4gICAgICB0aGlzLmVzY2FwZVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnM8VD4ge1xuICBjb25jYXQoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbmNhdCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgY29udGFpbnMoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbnRhaW5zJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBlbmRzV2l0aChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZW5kc3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGluZGV4T2YoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2luZGV4b2YnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGxlbmd0aCh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbGVuZ3RoJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIHN0YXJ0c1dpdGgoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N0YXJ0c3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIHN1YlN0cmluZyhmaWVsZDogYW55LCBzdGFydDogbnVtYmVyLCBsZW5ndGg/OiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzID0gW2ZpZWxkLCBzdGFydF07XG4gICAgaWYgKGxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZXMucHVzaChsZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzdWJzdHJpbmcnLCB2YWx1ZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+IHtcbiAgaGFzU3Vic2V0KHMxOiBULCBzMjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaGFzc3Vic2V0JywgW3MxLCBzMl0pO1xuICB9XG4gIGhhc1N1YnNlcXVlbmNlKHMxOiBULCBzMjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaGFzc3Vic2VxdWVuY2UnLCBbczEsIHMyXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0Z1bmN0aW9uczxUPiB7XG4gIG1hdGNoZXNQYXR0ZXJuKHZhbHVlOiBUIHwgc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtYXRjaGVzUGF0dGVybicsIFt2YWx1ZSwgcGF0dGVybl0pO1xuICB9XG4gIHRvTG93ZXIodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b2xvd2VyJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG9VcHBlcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdXBwZXInLCBbdmFsdWVdKTtcbiAgfVxuICB0cmltKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndHJpbScsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPiB7XG4gIGRhdGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RhdGUnLCBbdmFsdWVdKTtcbiAgfVxuICBkYXkodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RheScsIFt2YWx1ZV0pO1xuICB9XG4gIGZyYWN0aW9uYWxzZWNvbmRzKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmcmFjdGlvbmFsc2Vjb25kcycsIFt2YWx1ZV0pO1xuICB9XG4gIGhvdXIodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hvdXInLCBbdmFsdWVdKTtcbiAgfVxuICBtYXhkYXRldGltZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF4ZGF0ZXRpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICBtaW5kYXRldGltZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWluZGF0ZXRpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICBtaW51dGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbnV0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1vbnRoKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtb250aCcsIFt2YWx1ZV0pO1xuICB9XG4gIG5vdygpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdub3cnLCBbXSk7XG4gIH1cbiAgc2Vjb25kKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzZWNvbmQnLCBbdmFsdWVdKTtcbiAgfVxuICB0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG90YWxvZmZzZXRtaW51dGVzKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbG9mZnNldG1pbnV0ZXMnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbHNlY29uZHModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsc2Vjb25kcycsIFt2YWx1ZV0pO1xuICB9XG4gIHllYXIodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3llYXInLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY0Z1bmN0aW9uczxUPiB7XG4gIGNlaWxpbmcodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjZWlsaW5nJywgW3ZhbHVlXSk7XG4gIH1cbiAgZmxvb3IodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmbG9vcicsIFt2YWx1ZV0pO1xuICB9XG4gIHJvdW5kKHZhbHVlOiBUIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigncm91bmQnLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZUZ1bmN0aW9uczxUPiB7XG4gIGNhc3QodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXN0JywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cblxuICBpc29mKHZhbHVlOiBUIHwgc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaXNvZicsIFt2YWx1ZSwgdHlwZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW9GdW5jdGlvbnM8VD4ge1xuICBnZW9EaXN0YW5jZSh2YWx1ZTogVCwgcG9pbnQ6IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5kaXN0YW5jZScsIFt2YWx1ZSwgcG9pbnRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlb0ludGVyc2VjdHModmFsdWU6IFQsIHBvbHlnb246IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5pbnRlcnNlY3RzJywgW3ZhbHVlLCBwb2x5Z29uXSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZW9MZW5ndGgobGluZTogVCwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5sZW5ndGgnLCBbbGluZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHtcbiAgY2FzZShjb25kaXRpb246IFQgfCBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXNlJywgW2NvbmRpdGlvbiwgdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmF0b3I8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG9wOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWVcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ09wZXJhdG9yJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMsXG4gICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSk6IHN0cmluZyB7XG4gICAgbGV0IFtsZWZ0LCByaWdodF0gPSB0aGlzLnZhbHVlcztcblxuICAgIGxlZnQgPSByZW5kZXIobGVmdCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KTtcbiAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmlnaHQgPSBBcnJheS5pc0FycmF5KHJpZ2h0KVxuICAgICAgICA/IGAoJHtyaWdodFxuICAgICAgICAgICAgLm1hcCgodikgPT5cbiAgICAgICAgICAgICAgcmVuZGVyKHYsIHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKCcsJyl9KWBcbiAgICAgICAgOiByZW5kZXIocmlnaHQsIHtcbiAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgICAgICAgIH0pO1xuICAgICAgcmV0dXJuIGAke2xlZnR9ICR7dGhpcy5vcH0gJHtyaWdodH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5vcH0oJHtsZWZ0fSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcihcbiAgICAgIHRoaXMub3AsXG4gICAgICB0aGlzLnZhbHVlcy5tYXAoKHYpID0+IE9iamVjdHMuY2xvbmUodikpLFxuICAgICAgdGhpcy5ub3JtYWxpemVcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dpY2FsT3BlcmF0b3JzPFQ+IHtcbiAgZXEobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZXEnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ25lJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBndChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdndCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2UobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZ2UnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGx0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2x0JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBsZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdsZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgLypcbiAgYW5kKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2FuZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgb3IobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignb3InLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gICovXG4gIG5vdCh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcjxUPignbm90JywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuICBoYXMobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignaGFzJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBpbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdpbicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFyaXRobWV0aWNPcGVyYXRvcnM8VD4ge1xuICBhZGQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcjxUPignYWRkJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBzdWIobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignc3ViJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBtdWwobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbXVsJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBkaXYobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZGl2JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBtb2QobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbW9kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBuZWcodmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJy0nLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHcm91cGluZzxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZ3JvdXA6IFJlbmRlcmFibGUpIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnR3JvdXBpbmcnO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLnRvSlNPTigpLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAoJHtyZW5kZXIodGhpcy5ncm91cCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KX0pYDtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgR3JvdXBpbmcoT2JqZWN0cy5jbG9uZSh0aGlzLmdyb3VwKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYTxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3A6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgYWxpYXM/OiBzdHJpbmdcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0xhbWJkYSc7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgYWxpYXM6IHRoaXMuYWxpYXMsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGxldCBhbGlhcyA9IHRoaXMuYWxpYXMgfHwgbGVmdC5zcGxpdCgnLycpLnBvcCgpLnRvTG93ZXJDYXNlKClbMF07XG4gICAgcmV0dXJuIGAke2xlZnR9LyR7dGhpcy5vcH0oJHthbGlhc306JHtyZW5kZXIocmlnaHQsIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXg6IGFsaWFzLFxuICAgIH0pfSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoXG4gICAgICB0aGlzLm9wLFxuICAgICAgdGhpcy52YWx1ZXMubWFwKCh2KSA9PiBPYmplY3RzLmNsb25lKHYpKSxcbiAgICAgIHRoaXMuYWxpYXNcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFPcGVyYXRvcnM8VD4ge1xuICBhbnkoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FueScsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cblxuICBhbGwoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FsbCcsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhT3BlcmF0b3JzPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhT3BlcmF0b3JzPFQ+XG4gIGV4dGVuZHMgTG9naWNhbE9wZXJhdG9yczxUPixcbiAgICBBcml0aG1ldGljT3BlcmF0b3JzPFQ+LFxuICAgIExhbWJkYU9wZXJhdG9yczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YU9wZXJhdG9ycywgW1xuICBMb2dpY2FsT3BlcmF0b3JzLFxuICBBcml0aG1ldGljT3BlcmF0b3JzLFxuICBMYW1iZGFPcGVyYXRvcnMsXG5dKTtcbmV4cG9ydCBjb25zdCBvcGVyYXRvcnM6IE9EYXRhT3BlcmF0b3JzPGFueT4gPSBuZXcgT0RhdGFPcGVyYXRvcnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFGdW5jdGlvbnM8VD5cbiAgZXh0ZW5kcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4sXG4gICAgU3RyaW5nRnVuY3Rpb25zPFQ+LFxuICAgIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+LFxuICAgIEFyaXRobWV0aWNGdW5jdGlvbnM8VD4sXG4gICAgVHlwZUZ1bmN0aW9uczxUPixcbiAgICBHZW9GdW5jdGlvbnM8VD4sXG4gICAgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFGdW5jdGlvbnMsIFtcbiAgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgQ29sbGVjdGlvbkZ1bmN0aW9ucyxcbiAgU3RyaW5nRnVuY3Rpb25zLFxuICBEYXRlQW5kVGltZUZ1bmN0aW9ucyxcbiAgQXJpdGhtZXRpY0Z1bmN0aW9ucyxcbiAgVHlwZUZ1bmN0aW9ucyxcbiAgR2VvRnVuY3Rpb25zLFxuICBDb25kaXRpb25hbEZ1bmN0aW9ucyxcbl0pO1xuZXhwb3J0IGNvbnN0IGZ1bmN0aW9uczogT0RhdGFGdW5jdGlvbnM8YW55PiA9IG5ldyBPRGF0YUZ1bmN0aW9uczxhbnk+KCk7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVN5bnRheDxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YVN5bnRheDxUPiBleHRlbmRzIE9EYXRhT3BlcmF0b3JzPFQ+LCBPRGF0YUZ1bmN0aW9uczxUPiB7fVxuYXBwbHlNaXhpbnMoT0RhdGFTeW50YXgsIFtPRGF0YU9wZXJhdG9ycywgT0RhdGFGdW5jdGlvbnNdKTtcblxuZXhwb3J0IGNvbnN0IHN5bnRheDogT0RhdGFTeW50YXg8YW55PiA9IG5ldyBPRGF0YVN5bnRheDxhbnk+KCk7XG4iXX0=
@@ -9,16 +9,32 @@ export class ODataQueryOptionHandler {
9
9
  this.o = o;
10
10
  this.n = n;
11
11
  }
12
+ /**
13
+ * The name of the managed odata query option.
14
+ */
12
15
  get name() {
13
16
  return this.n;
14
17
  }
18
+ /**
19
+ * Converts the managed odata query option to a json object.
20
+ * @returns {any}
21
+ */
15
22
  toJSON() {
16
23
  return this.o.get(this.n);
17
24
  }
25
+ /**
26
+ * Returns a boolean indicating if the managed odata query option is empty.
27
+ * @returns True if the managed odata query option is empty.
28
+ */
18
29
  empty() {
19
30
  return Types.isEmpty(this.o.get(this.n));
20
31
  }
21
32
  //#region Primitive Value
33
+ /**
34
+ * Get or Set the value of the managed odata query option.
35
+ * @param v The value to set.
36
+ * @returns
37
+ */
22
38
  value(v) {
23
39
  if (v !== undefined)
24
40
  this.o.set(this.n, v);
@@ -31,15 +47,28 @@ export class ODataQueryOptionHandler {
31
47
  this.o.set(this.n, this.o.has(this.n) ? [this.o.get(this.n)] : []);
32
48
  return this.o.get(this.n);
33
49
  }
50
+ /**
51
+ * Push value to the managed odata query option.
52
+ * @param value Value to push
53
+ */
34
54
  push(value) {
35
55
  this.assertArray().push(value);
36
56
  }
57
+ /**
58
+ * Remove value from the managed odata query option.
59
+ * @param value Value to remove
60
+ */
37
61
  remove(value) {
38
62
  this.o.set(this.n, this.assertArray().filter((v) => v !== value));
39
63
  // If only one... down to value
40
64
  if (this.o.get(this.n).length === 1)
41
65
  this.o.set(this.n, this.o.get(this.n)[0]);
42
66
  }
67
+ /**
68
+ * Return value at index of the managed odata query option.
69
+ * @param index Index of the value
70
+ * @returns The value
71
+ */
43
72
  at(index) {
44
73
  return this.assertArray()[index];
45
74
  }
@@ -58,14 +87,29 @@ export class ODataQueryOptionHandler {
58
87
  }
59
88
  return obj;
60
89
  }
90
+ /**
91
+ * Set the value for path in the managed odata query option.
92
+ * @param path Path for set the value
93
+ * @param value Value to set
94
+ */
61
95
  set(path, value) {
62
96
  let obj = this.assertObject(true);
63
97
  Objects.set(obj, path, value);
64
98
  }
99
+ /**
100
+ * Get the value for path from the managed odata query option.
101
+ * @param path The path from get the value
102
+ * @param def Default if not found
103
+ * @returns
104
+ */
65
105
  get(path, def) {
66
106
  let obj = this.assertObject(false) || {};
67
107
  return Objects.get(obj, path, def);
68
108
  }
109
+ /**
110
+ * Unset the value for path in the managed odata query option.
111
+ * @param path
112
+ */
69
113
  unset(path) {
70
114
  let obj = this.assertObject(true);
71
115
  Objects.unset(obj, path);
@@ -75,15 +119,28 @@ export class ODataQueryOptionHandler {
75
119
  this.o.set(this.n, this.o.get(this.n)[0]);
76
120
  }
77
121
  }
122
+ /**
123
+ * Test if the managed odata query option has the value.
124
+ * @param path The path fot test if the value is set
125
+ * @returns Boolean indicating if the value is set
126
+ */
78
127
  has(path) {
79
128
  let obj = this.assertObject(false) || {};
80
129
  return Objects.has(obj, path);
81
130
  }
131
+ /**
132
+ * Merge values from object into the managed odata query option.
133
+ * @param values Object to merge
134
+ * @returns
135
+ */
82
136
  assign(values) {
83
137
  let obj = this.assertObject(true);
84
138
  return Objects.merge(obj, values);
85
139
  }
86
140
  //#endregion
141
+ /**
142
+ * Clear the managed odata query option.
143
+ */
87
144
  clear() {
88
145
  this.o.delete(this.n);
89
146
  }
@@ -161,6 +218,10 @@ export class ODataQueryOptionsHandler {
161
218
  skiptoken(opts) {
162
219
  return this.options.option(QueryOptionNames.skiptoken, opts);
163
220
  }
221
+ /**
222
+ * Shortcut for set $top, $skip, $skiptoken.
223
+ * @param param0 skip or top or skiptoken
224
+ */
164
225
  paging({ skip, skiptoken, top, } = {}) {
165
226
  if (skiptoken !== undefined)
166
227
  this.skiptoken(skiptoken);
@@ -169,11 +230,18 @@ export class ODataQueryOptionsHandler {
169
230
  if (top !== undefined)
170
231
  this.top(top);
171
232
  }
233
+ /**
234
+ * Shortcut for clear pagination by unset $top, $skip, $skiptoken.
235
+ */
172
236
  clearPaging() {
173
237
  this.skip().clear();
174
238
  this.top().clear();
175
239
  this.skiptoken().clear();
176
240
  }
241
+ /**
242
+ * Apply the given query options to the current query.
243
+ * @param query The query to be applied.
244
+ */
177
245
  apply(query) {
178
246
  if (query.select !== undefined) {
179
247
  this.options.option(QueryOptionNames.select, query.select);
@@ -196,4 +264,4 @@ export class ODataQueryOptionsHandler {
196
264
  this.paging(query);
197
265
  }
198
266
  }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsS0FBSyxFQU1MLGNBQWMsR0FDZixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsZ0JBQWdCLEdBR2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3hELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDVSxDQUE2QixFQUM3QixDQUFtQjtRQURuQixNQUFDLEdBQUQsQ0FBQyxDQUE0QjtRQUM3QixNQUFDLEdBQUQsQ0FBQyxDQUFrQjtJQUMxQixDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHlCQUF5QjtJQUN6QixLQUFLLENBQUMsQ0FBTztRQUNYLElBQUksQ0FBQyxL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TSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBhbGlhcyxcbiAgRXhwYW5kLFxuICBGaWx0ZXIsXG4gIE9yZGVyQnksXG4gIFNlbGVjdCxcbiAgVHJhbnNmb3JtLFxuICBub3JtYWxpemVWYWx1ZSxcbn0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7XG4gIENvbXB1dGVFeHByZXNzaW9uLFxuICBGaWx0ZXJDb25uZWN0b3IsXG4gIEZpbHRlckV4cHJlc3Npb24sXG4gIE9yZGVyQnlFeHByZXNzaW9uLFxuICBTZWFyY2hDb25uZWN0b3IsXG4gIFNlYXJjaEV4cHJlc3Npb24sXG4gIE9EYXRhRnVuY3Rpb25zLFxuICBPRGF0YU9wZXJhdG9ycyxcbn0gZnJvbSAnLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBFeHBhbmRFeHByZXNzaW9uIH0gZnJvbSAnLi9leHByZXNzaW9ucy9leHBhbmQnO1xuaW1wb3J0IHsgU2VsZWN0RXhwcmVzc2lvbiB9IGZyb20gJy4vZXhwcmVzc2lvbnMvc2VsZWN0JztcbmltcG9ydCB0eXBlIHsgT0RhdGFRdWVyeUFyZ3VtZW50cywgT0RhdGFRdWVyeU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG86IE1hcDxRdWVyeU9wdGlvbk5hbWVzLCBhbnk+LFxuICAgIHByaXZhdGUgbjogUXVlcnlPcHRpb25OYW1lc1xuICApIHt9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubjtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG5cbiAgZW1wdHkoKSB7XG4gICAgcmV0dXJuIFR5cGVzLmlzRW1wdHkodGhpcy5vLmdldCh0aGlzLm4pKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBQcmltaXRpdmUgVmFsdWVcbiAgdmFsdWUodj86IGFueSkge1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHRoaXMuby5zZXQodGhpcy5uLCB2KTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBBcnJheSBWYWx1ZVxuICBwcml2YXRlIGFzc2VydEFycmF5KCk6IGFueVtdIHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSlcbiAgICAgIHRoaXMuby5zZXQodGhpcy5uLCB0aGlzLm8uaGFzKHRoaXMubikgPyBbdGhpcy5vLmdldCh0aGlzLm4pXSA6IFtdKTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG5cbiAgcHVzaCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5hc3NlcnRBcnJheSgpLnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm8uc2V0KFxuICAgICAgdGhpcy5uLFxuICAgICAgdGhpcy5hc3NlcnRBcnJheSgpLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpXG4gICAgKTtcbiAgICAvLyBJZiBvbmx5IG9uZS4uLiBkb3duIHRvIHZhbHVlXG4gICAgaWYgKHRoaXMuby5nZXQodGhpcy5uKS5sZW5ndGggPT09IDEpXG4gICAgICB0aGlzLm8uc2V0KHRoaXMubiwgdGhpcy5vLmdldCh0aGlzLm4pWzBdKTtcbiAgfVxuXG4gIGF0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpW2luZGV4XTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSGFzaE1hcCBWYWx1ZVxuICBwcml2YXRlIGFzc2VydE9iamVjdChjcmVhdGU6IGJvb2xlYW4pOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKFxuICAgICAgIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSAmJlxuICAgICAgVHlwZXMuaXNQbGFpbk9iamVjdCh0aGlzLm8uZ2V0KHRoaXMubikpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICAgIH1cbiAgICBsZXQgYXJyID0gdGhpcy5hc3NlcnRBcnJheSgpO1xuICAgIGxldCBvYmogPSBhcnIuZmluZCgodikgPT4gVHlwZXMuaXNQbGFpbk9iamVjdCh2KSk7XG4gICAgaWYgKCFvYmogJiYgY3JlYXRlKSB7XG4gICAgICBvYmogPSB7fTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBzZXQocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIE9iamVjdHMuc2V0KG9iaiwgcGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0KHBhdGg6IHN0cmluZywgZGVmPzogYW55KTogYW55IHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QoZmFsc2UpIHx8IHt9O1xuICAgIHJldHVybiBPYmplY3RzLmdldChvYmosIHBhdGgsIGRlZik7XG4gIH1cblxuICB1bnNldChwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgT2JqZWN0cy51bnNldChvYmosIHBhdGgpO1xuXG4gICAgaWYgKFR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSkge1xuICAgICAgdGhpcy5vLnNldChcbiAgICAgICAgdGhpcy5uLFxuICAgICAgICB0aGlzLm8uZ2V0KHRoaXMubikuZmlsdGVyKCh2OiBhbnkpID0+ICFUeXBlcy5pc0VtcHR5KHYpKVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLm8uZ2V0KHRoaXMubikubGVuZ3RoID09PSAxKVxuICAgICAgICB0aGlzLm8uc2V0KHRoaXMubiwgdGhpcy5vLmdldCh0aGlzLm4pWzBdKTtcbiAgICB9XG4gIH1cblxuICBoYXMocGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KGZhbHNlKSB8fCB7fTtcbiAgICByZXR1cm4gT2JqZWN0cy5oYXMob2JqLCBwYXRoKTtcbiAgfVxuXG4gIGFzc2lnbih2YWx1ZXM6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIHJldHVybiBPYmplY3RzLm1lcmdlKG9iaiwgdmFsdWVzKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLm8uZGVsZXRlKHRoaXMubik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvcHRpb25zOiBPRGF0YVF1ZXJ5T3B0aW9uczxUPikge31cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG9kYXRhIGFsaWFzIHBhcmFtZXRlclxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1BhcmFtZXRlckFsaWFzZXNcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgYWxpYXNcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGFsaWFzXG4gICAqIEByZXR1cm5zIFRoZSBhbGlhc1xuICAgKi9cbiAgYWxpYXModmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBhbGlhcyh2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIHRoZSBnaXZlbiB2YWx1ZSB0byBhIHZhbGlkIG9kYXRhIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gbm9ybWFsaXplXG4gICAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHZhbHVlXG4gICAqL1xuICBub3JtYWxpemUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBzZWxlY3QoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogeyBzOiBUOyBlOiAoKSA9PiBTZWxlY3RFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogU2VsZWN0RXhwcmVzc2lvbjxUPlxuICAgICkgPT4gU2VsZWN0RXhwcmVzc2lvbjxUPlxuICApOiBTZWxlY3RFeHByZXNzaW9uPFQ+O1xuICBzZWxlY3Qob3B0czogU2VsZWN0PFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VsZWN0KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LFxuICAgICAgICBTZWxlY3RFeHByZXNzaW9uLnNlbGVjdChcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxTZWxlY3Q8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIGV4cGFuZChcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7IHM6IFQ7IGU6ICgpID0+IEV4cGFuZEV4cHJlc3Npb248VD4gfSxcbiAgICAgIGN1cnJlbnQ/OiBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICk6IEV4cGFuZEV4cHJlc3Npb248VD47XG4gIGV4cGFuZChvcHRzOiBFeHBhbmQ8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZXhwYW5kKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5leHBhbmQsXG4gICAgICAgIEV4cGFuZEV4cHJlc3Npb24uZXhwYW5kKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5leHBhbmQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPEV4cGFuZDxUPj4oUXVlcnlPcHRpb25OYW1lcy5leHBhbmQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25jb21wdXRlXG4gICAqL1xuICBjb21wdXRlKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgczogVDtcbiAgICAgICAgZTogKCkgPT4gQ29tcHV0ZUV4cHJlc3Npb248VD47XG4gICAgICAgIG86IE9EYXRhT3BlcmF0b3JzPFQ+O1xuICAgICAgICBmOiBPRGF0YUZ1bmN0aW9uczxUPjtcbiAgICAgIH0sXG4gICAgICBjdXJyZW50PzogQ29tcHV0ZUV4cHJlc3Npb248VD5cbiAgICApID0+IENvbXB1dGVFeHByZXNzaW9uPFQ+XG4gICk6IENvbXB1dGVFeHByZXNzaW9uPFQ+O1xuICBjb21wdXRlKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSxcbiAgICAgICAgQ29tcHV0ZUV4cHJlc3Npb24uY29tcHV0ZShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmNvbXB1dGUsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25mb3JtYXRcbiAgICovXG4gIGZvcm1hdChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmZvcm1hdCwgb3B0cyk7XG4gIH1cblxuICB0cmFuc2Zvcm0ob3B0czogVHJhbnNmb3JtPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRyYW5zZm9ybSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKG9wdHM/OiBUcmFuc2Zvcm08VD4pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPFRyYW5zZm9ybTxUPj4oUXVlcnlPcHRpb25OYW1lcy50cmFuc2Zvcm0sIG9wdHMpO1xuICB9XG5cbiAgc2VhcmNoKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgZTogKGNvbm5lY3RvcjogU2VhcmNoQ29ubmVjdG9yKSA9PiBTZWFyY2hFeHByZXNzaW9uPFQ+O1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnQ/OiBTZWFyY2hFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBTZWFyY2hFeHByZXNzaW9uPFQ+XG4gICk6IFNlYXJjaEV4cHJlc3Npb248VD47XG4gIHNlYXJjaChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VhcmNoKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWFyY2gob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsXG4gICAgICAgIFNlYXJjaEV4cHJlc3Npb24uc2VhcmNoKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIG9wdHMpO1xuICB9XG5cbiAgZmlsdGVyKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgczogVDtcbiAgICAgICAgZTogKGNvbm5lY3Rvcj86IEZpbHRlckNvbm5lY3RvcikgPT4gRmlsdGVyRXhwcmVzc2lvbjxUPjtcbiAgICAgICAgbzogT0RhdGFPcGVyYXRvcnM8VD47XG4gICAgICAgIGY6IE9EYXRhRnVuY3Rpb25zPFQ+O1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnQ/OiBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICk6IEZpbHRlckV4cHJlc3Npb248VD47XG4gIGZpbHRlcihvcHRzOiBGaWx0ZXI8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmaWx0ZXIob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsXG4gICAgICAgIEZpbHRlckV4cHJlc3Npb24uZmlsdGVyKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPEZpbHRlcjxUPj4oUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsIG9wdHMpO1xuICB9XG5cbiAgb3JkZXJCeShcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7IHM6IFQ7IGU6ICgpID0+IE9yZGVyQnlFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogT3JkZXJCeUV4cHJlc3Npb248VD5cbiAgICApID0+IE9yZGVyQnlFeHByZXNzaW9uPFQ+XG4gICk6IE9yZGVyQnlFeHByZXNzaW9uPFQ+O1xuICBvcmRlckJ5KG9wdHM6IE9yZGVyQnk8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgb3JkZXJCeSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgb3JkZXJCeShvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSxcbiAgICAgICAgT3JkZXJCeUV4cHJlc3Npb24ub3JkZXJCeShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248T3JkZXJCeTxUPj4oUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LCBvcHRzKTtcbiAgfVxuXG4gIHRvcChvcHRzOiBudW1iZXIpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0b3Aob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbk5hbWVzLnRvcCwgb3B0cyk7XG4gIH1cblxuICBza2lwKG9wdHM6IG51bWJlcik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwKG9wdHM/OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPG51bWJlcj4oUXVlcnlPcHRpb25OYW1lcy5za2lwLCBvcHRzKTtcbiAgfVxuXG4gIHNraXB0b2tlbihvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcHRva2VuKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwdG9rZW4ob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLnNraXB0b2tlbiwgb3B0cyk7XG4gIH1cblxuICBwYWdpbmcoe1xuICAgIHNraXAsXG4gICAgc2tpcHRva2VuLFxuICAgIHRvcCxcbiAgfTogeyBza2lwPzogbnVtYmVyOyBza2lwdG9rZW4/OiBzdHJpbmc7IHRvcD86IG51bWJlciB9ID0ge30pIHtcbiAgICBpZiAoc2tpcHRva2VuICE9PSB1bmRlZmluZWQpIHRoaXMuc2tpcHRva2VuKHNraXB0b2tlbik7XG4gICAgZWxzZSBpZiAoc2tpcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNraXAoc2tpcCk7XG4gICAgaWYgKHRvcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnRvcCh0b3ApO1xuICB9XG5cbiAgY2xlYXJQYWdpbmcoKSB7XG4gICAgdGhpcy5za2lwKCkuY2xlYXIoKTtcbiAgICB0aGlzLnRvcCgpLmNsZWFyKCk7XG4gICAgdGhpcy5za2lwdG9rZW4oKS5jbGVhcigpO1xuICB9XG5cbiAgYXBwbHkocXVlcnk6IE9EYXRhUXVlcnlBcmd1bWVudHM8VD4pIHtcbiAgICBpZiAocXVlcnkuc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5zZWxlY3QsIHF1ZXJ5LnNlbGVjdCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5leHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCwgcXVlcnkuZXhwYW5kKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uTmFtZXMudHJhbnNmb3JtLCBxdWVyeS50cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIHF1ZXJ5LnNlYXJjaCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5maWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLmZpbHRlciwgcXVlcnkuZmlsdGVyKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5Lm9yZGVyQnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnksIHF1ZXJ5Lm9yZGVyQnkpO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luZyhxdWVyeSk7XG4gIH1cbn1cbiJdfQ==
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsS0FBSyxFQU1MLGNBQWMsR0FDZixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFakIsZ0JBQWdCLEdBR2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3hELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDVSxDQUE2QixFQUM3QixDQUFtQjtRQURuQixNQUFDLEdBQUQsQ0FBQyxDQUE0QjtRQUM3QixNQUFDLEdBQUQsQ0FBQyxDQUFrQjtJQUMxQixDQUFDO0lBRUo7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSztRQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsQ0FBTztRQUNYLElBQUksQ0FBQyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxZQUFZO0lBRVoscUJBQXFCO0lBQ2IsV0FBVztRQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLENBQUMsS0FBVTtRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFVO1FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQ1IsSUFBSSxDQUFDLENBQUMsRUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQzlDLENBQUM7UUFDRiwrQkFBK0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxLQUFhO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELFlBQVk7SUFFWix1QkFBdUI7SUFDZixZQUFZLENBQUMsTUFBZTtRQUNsQyxJQUNFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkM7WUFDQSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjtRQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDbEIsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNULEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDZjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsSUFBWSxFQUFFLEtBQVU7UUFDMUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUFDLElBQVksRUFBRSxHQUFTO1FBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBWTtRQUNoQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDUixJQUFJLENBQUMsQ0FBQyxFQUNOLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN6RCxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUErQjtRQUNwQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFlBQVk7SUFFWjs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUFzQixPQUE2QjtRQUE3QixZQUFPLEdBQVAsT0FBTyxDQUFzQjtJQUFHLENBQUM7SUFFdkQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLEtBQVUsRUFBRSxJQUFhO1FBQzdCLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFlRCxNQUFNLENBQUMsSUFBVTtRQUNmLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLE1BQU0sQ0FDckIsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUNqRCxDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFlRCxNQUFNLENBQUMsSUFBVTtRQUNmLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLE1BQU0sQ0FDckIsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUNqRCxDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFxQkQsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQzVCLGdCQUFnQixDQUFDLE9BQU8sRUFDeEIsaUJBQWlCLENBQUMsT0FBTyxDQUN2QixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQ2xELENBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQVVELE1BQU0sQ0FBQyxJQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFTRCxTQUFTLENBQUMsSUFBbUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBZSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQWlCRCxNQUFNLENBQUMsSUFBVTtRQUNmLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLE1BQU0sQ0FDckIsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUNqRCxDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFvQkQsTUFBTSxDQUFDLElBQVU7UUFDZixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FDNUIsZ0JBQWdCLENBQUMsTUFBTSxFQUN2QixnQkFBZ0IsQ0FBQyxNQUFNLENBQ3JCLElBQUksRUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FDakQsQ0FDRixDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFZLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBZUQsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3hCLGdCQUFnQixDQUFDLE9BQU8sRUFDeEIsaUJBQWlCLENBQUMsT0FBTyxDQUN2QixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQ2xELENBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBYSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQVNELEdBQUcsQ0FBQyxJQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQVNELElBQUksQ0FBQyxJQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFTRCxTQUFTLENBQUMsSUFBYTtRQUNyQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEVBQ0wsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLE1BQ29ELEVBQUU7UUFDekQsSUFBSSxTQUFTLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDbEQsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxHQUFHLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBNkI7UUFDakMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBhbGlhcyxcbiAgRXhwYW5kLFxuICBGaWx0ZXIsXG4gIE9yZGVyQnksXG4gIFNlbGVjdCxcbiAgVHJhbnNmb3JtLFxuICBub3JtYWxpemVWYWx1ZSxcbn0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7XG4gIENvbXB1dGVFeHByZXNzaW9uLFxuICBGaWx0ZXJDb25uZWN0b3IsXG4gIEZpbHRlckV4cHJlc3Npb24sXG4gIE9yZGVyQnlFeHByZXNzaW9uLFxuICBTZWFyY2hDb25uZWN0b3IsXG4gIFNlYXJjaEV4cHJlc3Npb24sXG4gIE9EYXRhRnVuY3Rpb25zLFxuICBPRGF0YU9wZXJhdG9ycyxcbn0gZnJvbSAnLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBFeHBhbmRFeHByZXNzaW9uIH0gZnJvbSAnLi9leHByZXNzaW9ucy9leHBhbmQnO1xuaW1wb3J0IHsgU2VsZWN0RXhwcmVzc2lvbiB9IGZyb20gJy4vZXhwcmVzc2lvbnMvc2VsZWN0JztcbmltcG9ydCB0eXBlIHsgT0RhdGFRdWVyeUFyZ3VtZW50cywgT0RhdGFRdWVyeU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG86IE1hcDxRdWVyeU9wdGlvbk5hbWVzLCBhbnk+LFxuICAgIHByaXZhdGUgbjogUXVlcnlPcHRpb25OYW1lc1xuICApIHt9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm47XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uIHRvIGEganNvbiBvYmplY3QuXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMuby5nZXQodGhpcy5uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbiBpcyBlbXB0eS4gXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uIGlzIGVtcHR5LlxuICAgKi9cbiAgZW1wdHkoKSB7XG4gICAgcmV0dXJuIFR5cGVzLmlzRW1wdHkodGhpcy5vLmdldCh0aGlzLm4pKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBQcmltaXRpdmUgVmFsdWVcbiAgLyoqXG4gICAqIEdldCBvciBTZXQgdGhlIHZhbHVlIG9mIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICogQHBhcmFtIHYgVGhlIHZhbHVlIHRvIHNldC5cbiAgICogQHJldHVybnMgXG4gICAqL1xuICB2YWx1ZSh2PzogYW55KSB7XG4gICAgaWYgKHYgIT09IHVuZGVmaW5lZCkgdGhpcy5vLnNldCh0aGlzLm4sIHYpO1xuICAgIHJldHVybiB0aGlzLm8uZ2V0KHRoaXMubik7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEFycmF5IFZhbHVlXG4gIHByaXZhdGUgYXNzZXJ0QXJyYXkoKTogYW55W10ge1xuICAgIGlmICghVHlwZXMuaXNBcnJheSh0aGlzLm8uZ2V0KHRoaXMubikpKVxuICAgICAgdGhpcy5vLnNldCh0aGlzLm4sIHRoaXMuby5oYXModGhpcy5uKSA/IFt0aGlzLm8uZ2V0KHRoaXMubildIDogW10pO1xuICAgIHJldHVybiB0aGlzLm8uZ2V0KHRoaXMubik7XG4gIH1cblxuICAvKipcbiAgICogUHVzaCB2YWx1ZSB0byB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uIFxuICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gcHVzaFxuICAgKi9cbiAgcHVzaCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5hc3NlcnRBcnJheSgpLnB1c2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB2YWx1ZSBmcm9tIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi4gXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byByZW1vdmUgXG4gICAqL1xuICByZW1vdmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuby5zZXQoXG4gICAgICB0aGlzLm4sXG4gICAgICB0aGlzLmFzc2VydEFycmF5KCkuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWx1ZSlcbiAgICApO1xuICAgIC8vIElmIG9ubHkgb25lLi4uIGRvd24gdG8gdmFsdWVcbiAgICBpZiAodGhpcy5vLmdldCh0aGlzLm4pLmxlbmd0aCA9PT0gMSlcbiAgICAgIHRoaXMuby5zZXQodGhpcy5uLCB0aGlzLm8uZ2V0KHRoaXMubilbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB2YWx1ZSBhdCBpbmRleCBvZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uIFxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHZhbHVlXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZVxuICAgKi9cbiAgYXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmFzc2VydEFycmF5KClbaW5kZXhdO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBIYXNoTWFwIFZhbHVlXG4gIHByaXZhdGUgYXNzZXJ0T2JqZWN0KGNyZWF0ZTogYm9vbGVhbik6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoXG4gICAgICAhVHlwZXMuaXNBcnJheSh0aGlzLm8uZ2V0KHRoaXMubikpICYmXG4gICAgICBUeXBlcy5pc1BsYWluT2JqZWN0KHRoaXMuby5nZXQodGhpcy5uKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLm8uZ2V0KHRoaXMubik7XG4gICAgfVxuICAgIGxldCBhcnIgPSB0aGlzLmFzc2VydEFycmF5KCk7XG4gICAgbGV0IG9iaiA9IGFyci5maW5kKCh2KSA9PiBUeXBlcy5pc1BsYWluT2JqZWN0KHYpKTtcbiAgICBpZiAoIW9iaiAmJiBjcmVhdGUpIHtcbiAgICAgIG9iaiA9IHt9O1xuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGZvciBwYXRoIGluIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi4gXG4gICAqIEBwYXJhbSBwYXRoIFBhdGggZm9yIHNldCB0aGUgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHNldFxuICAgKi9cbiAgc2V0KHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnNldChvYmosIHBhdGgsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIGZvciBwYXRoIGZyb20gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLiBcbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggZnJvbSBnZXQgdGhlIHZhbHVlXG4gICAqIEBwYXJhbSBkZWYgRGVmYXVsdCBpZiBub3QgZm91bmRcbiAgICogQHJldHVybnMgXG4gICAqL1xuICBnZXQocGF0aDogc3RyaW5nLCBkZWY/OiBhbnkpOiBhbnkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuZ2V0KG9iaiwgcGF0aCwgZGVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNldCB0aGUgdmFsdWUgZm9yIHBhdGggaW4gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLiBcbiAgICogQHBhcmFtIHBhdGggXG4gICAqL1xuICB1bnNldChwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgT2JqZWN0cy51bnNldChvYmosIHBhdGgpO1xuXG4gICAgaWYgKFR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSkge1xuICAgICAgdGhpcy5vLnNldChcbiAgICAgICAgdGhpcy5uLFxuICAgICAgICB0aGlzLm8uZ2V0KHRoaXMubikuZmlsdGVyKCh2OiBhbnkpID0+ICFUeXBlcy5pc0VtcHR5KHYpKVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLm8uZ2V0KHRoaXMubikubGVuZ3RoID09PSAxKVxuICAgICAgICB0aGlzLm8uc2V0KHRoaXMubiwgdGhpcy5vLmdldCh0aGlzLm4pWzBdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24gaGFzIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggZm90IHRlc3QgaWYgdGhlIHZhbHVlIGlzIHNldFxuICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHZhbHVlIGlzIHNldFxuICAgKi9cbiAgaGFzKHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuaGFzKG9iaiwgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdmFsdWVzIGZyb20gb2JqZWN0IGludG8gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gdmFsdWVzIE9iamVjdCB0byBtZXJnZVxuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIGFzc2lnbih2YWx1ZXM6IHsgW2F0dHI6IHN0cmluZ106IGFueSB9KSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIHJldHVybiBPYmplY3RzLm1lcmdlKG9iaiwgdmFsdWVzKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5vLmRlbGV0ZSh0aGlzLm4pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3B0aW9uczogT0RhdGFRdWVyeU9wdGlvbnM8VD4pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvZGF0YSBhbGlhcyBwYXJhbWV0ZXJcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19QYXJhbWV0ZXJBbGlhc2VzXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGFsaWFzXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcmV0dXJucyBUaGUgYWxpYXNcbiAgICovXG4gIGFsaWFzKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYWxpYXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gYSB2YWxpZCBvZGF0YSB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIG5vcm1hbGl6ZVxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCB2YWx1ZVxuICAgKi9cbiAgbm9ybWFsaXplKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRzZWxlY3Qgb3B0aW9uLlxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHNlbGVjdC4gXG4gICAqIEBwYXJhbSBvcHRzIFNlbGVjdDxUPiB2YWx1ZSBvciBidWlsZGVyIGZ1bmN0aW9uIGZvciBTZWxlY3RFeHByZXNzaW9uPFQ+XG4gICAqL1xuICBzZWxlY3QoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogeyBzOiBUOyBlOiAoKSA9PiBTZWxlY3RFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogU2VsZWN0RXhwcmVzc2lvbjxUPlxuICAgICkgPT4gU2VsZWN0RXhwcmVzc2lvbjxUPlxuICApOiBTZWxlY3RFeHByZXNzaW9uPFQ+O1xuICBzZWxlY3Qob3B0czogU2VsZWN0PFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VsZWN0KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LFxuICAgICAgICBTZWxlY3RFeHByZXNzaW9uLnNlbGVjdChcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxTZWxlY3Q8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkZXhwYW5kIG9wdGlvbi4gXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkZXhwYW5kLlxuICAgKiBAcGFyYW0gb3B0cyBFeHBhbmQ8VD4gdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgRXhwYW5kRXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgZXhwYW5kKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHsgczogVDsgZTogKCkgPT4gRXhwYW5kRXhwcmVzc2lvbjxUPiB9LFxuICAgICAgY3VycmVudD86IEV4cGFuZEV4cHJlc3Npb248VD5cbiAgICApID0+IEV4cGFuZEV4cHJlc3Npb248VD5cbiAgKTogRXhwYW5kRXhwcmVzc2lvbjxUPjtcbiAgZXhwYW5kKG9wdHM6IEV4cGFuZDxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGV4cGFuZChvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCxcbiAgICAgICAgRXhwYW5kRXhwcmVzc2lvbi5leHBhbmQoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248RXhwYW5kPFQ+PihRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJGNvbXB1dGUgb3B0aW9uLiBcbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRjb21wdXRlLlxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1N5c3RlbVF1ZXJ5T3B0aW9uY29tcHV0ZVxuICAgKiBAcGFyYW0gb3B0cyBzdHJpbmcgdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgQ29tcHV0ZUV4cHJlc3Npb248VD5cbiAgICovXG4gIGNvbXB1dGUoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjoge1xuICAgICAgICBzOiBUO1xuICAgICAgICBlOiAoKSA9PiBDb21wdXRlRXhwcmVzc2lvbjxUPjtcbiAgICAgICAgbzogT0RhdGFPcGVyYXRvcnM8VD47XG4gICAgICAgIGY6IE9EYXRhRnVuY3Rpb25zPFQ+O1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnQ/OiBDb21wdXRlRXhwcmVzc2lvbjxUPlxuICAgICkgPT4gQ29tcHV0ZUV4cHJlc3Npb248VD5cbiAgKTogQ29tcHV0ZUV4cHJlc3Npb248VD47XG4gIGNvbXB1dGUob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGNvbXB1dGUoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGNvbXB1dGUob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5jb21wdXRlLFxuICAgICAgICBDb21wdXRlRXhwcmVzc2lvbi5jb21wdXRlKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5jb21wdXRlKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJGZvcm1hdCBvcHRpb24uIFxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJGZvcm1hdC5cbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19TeXN0ZW1RdWVyeU9wdGlvbmZvcm1hdFxuICAgKiBAcGFyYW0gb3B0cyBzdHJpbmcgdmFsdWUgZm9yIGZvcm1hdCBcbiAgICovXG4gIGZvcm1hdChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmZvcm1hdCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJHRyYW5zZm9ybSBvcHRpb24uIFxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIGZvciB0cmFuc2Zvcm1cbiAgICovXG4gIHRyYW5zZm9ybShvcHRzOiBUcmFuc2Zvcm08VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0cmFuc2Zvcm0ob3B0cz86IFRyYW5zZm9ybTxUPik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248VHJhbnNmb3JtPFQ+PihRdWVyeU9wdGlvbk5hbWVzLnRyYW5zZm9ybSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJHNlYXJjaCBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkc2VhcmNoLlxuICAgKiBAcGFyYW0gb3B0cyBzdHJpbmcgdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgU2VhcmNoRXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgc2VhcmNoKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgZTogKGNvbm5lY3RvcjogU2VhcmNoQ29ubmVjdG9yKSA9PiBTZWFyY2hFeHByZXNzaW9uPFQ+O1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnQ/OiBTZWFyY2hFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBTZWFyY2hFeHByZXNzaW9uPFQ+XG4gICk6IFNlYXJjaEV4cHJlc3Npb248VD47XG4gIHNlYXJjaChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VhcmNoKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWFyY2gob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsXG4gICAgICAgIFNlYXJjaEV4cHJlc3Npb24uc2VhcmNoKFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRmaWx0ZXIgb3B0aW9uLiBcbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRmaWx0ZXIuXG4gICAqIEBwYXJhbSBvcHRzIEZpbHRlcjxUPiB2YWx1ZSBvciBidWlsZGVyIGZ1bmN0aW9uIGZvciBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICAqL1xuICBmaWx0ZXIoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjoge1xuICAgICAgICBzOiBUO1xuICAgICAgICBlOiAoY29ubmVjdG9yPzogRmlsdGVyQ29ubmVjdG9yKSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+O1xuICAgICAgICBvOiBPRGF0YU9wZXJhdG9yczxUPjtcbiAgICAgICAgZjogT0RhdGFGdW5jdGlvbnM8VD47XG4gICAgICB9LFxuICAgICAgY3VycmVudD86IEZpbHRlckV4cHJlc3Npb248VD5cbiAgICApID0+IEZpbHRlckV4cHJlc3Npb248VD5cbiAgKTogRmlsdGVyRXhwcmVzc2lvbjxUPjtcbiAgZmlsdGVyKG9wdHM6IEZpbHRlcjxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmaWx0ZXIoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGZpbHRlcihvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLmZpbHRlcixcbiAgICAgICAgRmlsdGVyRXhwcmVzc2lvbi5maWx0ZXIoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbk5hbWVzLmZpbHRlcilcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248RmlsdGVyPFQ+PihRdWVyeU9wdGlvbk5hbWVzLmZpbHRlciwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJG9yZGVyYnkgb3B0aW9uLiBcbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRvcmRlcmJ5LlxuICAgKiBAcGFyYW0gb3B0cyBPcmRlckJ5PFQ+IHZhbHVlIG9yIGJ1aWxkZXIgZnVuY3Rpb24gZm9yIE9yZGVyQnlFeHByZXNzaW9uPFQ+XG4gICAqL1xuICBvcmRlckJ5KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHsgczogVDsgZTogKCkgPT4gT3JkZXJCeUV4cHJlc3Npb248VD4gfSxcbiAgICAgIGN1cnJlbnQ/OiBPcmRlckJ5RXhwcmVzc2lvbjxUPlxuICAgICkgPT4gT3JkZXJCeUV4cHJlc3Npb248VD5cbiAgKTogT3JkZXJCeUV4cHJlc3Npb248VD47XG4gIG9yZGVyQnkob3B0czogT3JkZXJCeTxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LFxuICAgICAgICBPcmRlckJ5RXhwcmVzc2lvbi5vcmRlckJ5KFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxPcmRlckJ5PFQ+PihRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnksIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICR0b3Agb3B0aW9uLlxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHRvcC5cbiAgICogQHBhcmFtIG9wdHMgbnVtYmVyIHZhbHVlXG4gICAqL1xuICB0b3Aob3B0czogbnVtYmVyKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRvcCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKG9wdHM/OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPG51bWJlcj4oUXVlcnlPcHRpb25OYW1lcy50b3AsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRza2lwIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRza2lwLlxuICAgKiBAcGFyYW0gb3B0cyBudW1iZXIgdmFsdWVcbiAgICovXG4gIHNraXAob3B0czogbnVtYmVyKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbk5hbWVzLnNraXAsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRza2lwdG9rZW4gb3B0aW9uLlxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHNraXB0b2tlbi5cbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlXG4gICAqL1xuICBza2lwdG9rZW4ob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXB0b2tlbigpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2tpcHRva2VuKG9wdHM/OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5za2lwdG9rZW4sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IGZvciBzZXQgJHRvcCwgJHNraXAsICRza2lwdG9rZW4uXG4gICAqIEBwYXJhbSBwYXJhbTAgc2tpcCBvciB0b3Agb3Igc2tpcHRva2VuXG4gICAqL1xuICBwYWdpbmcoe1xuICAgIHNraXAsXG4gICAgc2tpcHRva2VuLFxuICAgIHRvcCxcbiAgfTogeyBza2lwPzogbnVtYmVyOyBza2lwdG9rZW4/OiBzdHJpbmc7IHRvcD86IG51bWJlciB9ID0ge30pIHtcbiAgICBpZiAoc2tpcHRva2VuICE9PSB1bmRlZmluZWQpIHRoaXMuc2tpcHRva2VuKHNraXB0b2tlbik7XG4gICAgZWxzZSBpZiAoc2tpcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnNraXAoc2tpcCk7XG4gICAgaWYgKHRvcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnRvcCh0b3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IGZvciBjbGVhciBwYWdpbmF0aW9uIGJ5IHVuc2V0ICR0b3AsICRza2lwLCAkc2tpcHRva2VuLiBcbiAgICovXG4gIGNsZWFyUGFnaW5nKCkge1xuICAgIHRoaXMuc2tpcCgpLmNsZWFyKCk7XG4gICAgdGhpcy50b3AoKS5jbGVhcigpO1xuICAgIHRoaXMuc2tpcHRva2VuKCkuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0aGUgZ2l2ZW4gcXVlcnkgb3B0aW9ucyB0byB0aGUgY3VycmVudCBxdWVyeS5cbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBiZSBhcHBsaWVkLlxuICAgKi9cbiAgYXBwbHkocXVlcnk6IE9EYXRhUXVlcnlBcmd1bWVudHM8VD4pIHtcbiAgICBpZiAocXVlcnkuc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5zZWxlY3QsIHF1ZXJ5LnNlbGVjdCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5leHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCwgcXVlcnkuZXhwYW5kKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uTmFtZXMudHJhbnNmb3JtLCBxdWVyeS50cmFuc2Zvcm0pO1xuICAgIH1cbiAgICBpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIHF1ZXJ5LnNlYXJjaCk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5maWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLmZpbHRlciwgcXVlcnkuZmlsdGVyKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5Lm9yZGVyQnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnksIHF1ZXJ5Lm9yZGVyQnkpO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luZyhxdWVyeSk7XG4gIH1cbn1cbiJdfQ==