@c8y/ngx-components 1021.78.7 → 1021.81.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 (125) hide show
  1. package/core/asset-property/asset-property.model.d.ts +33 -0
  2. package/core/asset-property/asset-property.model.d.ts.map +1 -0
  3. package/core/asset-property/asset-property.service.d.ts +20 -0
  4. package/core/asset-property/asset-property.service.d.ts.map +1 -0
  5. package/core/common/virtual-scroll/virtual-scroller-wrapper.component.d.ts +7 -1
  6. package/core/common/virtual-scroll/virtual-scroller-wrapper.component.d.ts.map +1 -1
  7. package/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.d.ts +23 -0
  8. package/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.d.ts.map +1 -0
  9. package/core/data-grid/column/tree-node-column/tree-node.data-grid-column.d.ts +23 -0
  10. package/core/data-grid/column/tree-node-column/tree-node.data-grid-column.d.ts.map +1 -0
  11. package/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.d.ts +6 -0
  12. package/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.d.ts.map +1 -0
  13. package/core/data-grid/configure-custom-column/asset-property-grid.component.d.ts +31 -0
  14. package/core/data-grid/configure-custom-column/asset-property-grid.component.d.ts.map +1 -0
  15. package/core/data-grid/configure-custom-column/configure-custom-column.service.d.ts +17 -0
  16. package/core/data-grid/configure-custom-column/configure-custom-column.service.d.ts.map +1 -0
  17. package/core/data-grid/configure-custom-column/identifier.cell-renderer.component.d.ts +9 -0
  18. package/core/data-grid/configure-custom-column/identifier.cell-renderer.component.d.ts.map +1 -0
  19. package/core/data-grid/configure-custom-column/identifier.data-grid-column.d.ts +6 -0
  20. package/core/data-grid/configure-custom-column/identifier.data-grid-column.d.ts.map +1 -0
  21. package/core/data-grid/configure-custom-column/tags.cell-renderer.components.d.ts +9 -0
  22. package/core/data-grid/configure-custom-column/tags.cell-renderer.components.d.ts.map +1 -0
  23. package/core/data-grid/configure-custom-column/tags.data-grid-column.d.ts +6 -0
  24. package/core/data-grid/configure-custom-column/tags.data-grid-column.d.ts.map +1 -0
  25. package/core/data-grid/configure-custom-column/title.cell-renderer.component.d.ts +9 -0
  26. package/core/data-grid/configure-custom-column/title.cell-renderer.component.d.ts.map +1 -0
  27. package/core/data-grid/configure-custom-column/title.data-grid-column.d.ts +6 -0
  28. package/core/data-grid/configure-custom-column/title.data-grid-column.d.ts.map +1 -0
  29. package/core/data-grid/data-grid.component.d.ts +33 -6
  30. package/core/data-grid/data-grid.component.d.ts.map +1 -1
  31. package/core/data-grid/data-grid.model.d.ts +13 -1
  32. package/core/data-grid/data-grid.model.d.ts.map +1 -1
  33. package/core/data-grid/data-grid.module.d.ts.map +1 -1
  34. package/core/data-grid/filter-chip/filter-mapper.module.d.ts.map +1 -1
  35. package/core/data-grid/grid-data-source.d.ts +11 -2
  36. package/core/data-grid/grid-data-source.d.ts.map +1 -1
  37. package/core/data-grid/index.d.ts +4 -1
  38. package/core/data-grid/index.d.ts.map +1 -1
  39. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +2 -2
  40. package/esm2022/context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.mjs +1 -1
  41. package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +1 -1
  42. package/esm2022/core/asset-property/asset-property.model.mjs +2 -0
  43. package/esm2022/core/asset-property/asset-property.service.mjs +84 -0
  44. package/esm2022/core/common/virtual-scroll/virtual-scroller-wrapper.component.mjs +25 -6
  45. package/esm2022/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.mjs +87 -0
  46. package/esm2022/core/data-grid/column/tree-node-column/tree-node.data-grid-column.mjs +15 -0
  47. package/esm2022/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.mjs +15 -0
  48. package/esm2022/core/data-grid/configure-custom-column/asset-property-grid.component.mjs +131 -0
  49. package/esm2022/core/data-grid/configure-custom-column/configure-custom-column.component.mjs +3 -3
  50. package/esm2022/core/data-grid/configure-custom-column/configure-custom-column.service.mjs +51 -0
  51. package/esm2022/core/data-grid/configure-custom-column/identifier.cell-renderer.component.mjs +20 -0
  52. package/esm2022/core/data-grid/configure-custom-column/identifier.data-grid-column.mjs +26 -0
  53. package/esm2022/core/data-grid/configure-custom-column/tags.cell-renderer.components.mjs +20 -0
  54. package/esm2022/core/data-grid/configure-custom-column/tags.data-grid-column.mjs +25 -0
  55. package/esm2022/core/data-grid/configure-custom-column/title.cell-renderer.component.mjs +20 -0
  56. package/esm2022/core/data-grid/configure-custom-column/title.data-grid-column.mjs +26 -0
  57. package/esm2022/core/data-grid/data-grid.component.mjs +104 -58
  58. package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
  59. package/esm2022/core/data-grid/data-grid.module.mjs +1 -1
  60. package/esm2022/core/data-grid/filter-chip/filter-mapper.module.mjs +3 -2
  61. package/esm2022/core/data-grid/grid-data-source.mjs +92 -22
  62. package/esm2022/core/data-grid/index.mjs +5 -2
  63. package/esm2022/device-grid/device-grid.component.mjs +1 -1
  64. package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
  65. package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +1 -1
  66. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +1 -1
  67. package/esm2022/files-repository/files-repository.component.mjs +1 -1
  68. package/esm2022/messaging-management/messaging/topic/topic-list-view.component.mjs +2 -2
  69. package/esm2022/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.mjs +2 -2
  70. package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +2 -2
  71. package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +2 -2
  72. package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
  73. package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
  74. package/esm2022/repository/software/list/software-list.component.mjs +1 -1
  75. package/esm2022/search/search-grid.component.mjs +1 -1
  76. package/esm2022/services/services-device-tab/services-device-tab.component.mjs +1 -1
  77. package/esm2022/sub-assets/sub-assets-grid.component.mjs +1 -1
  78. package/esm2022/tenants/tenant-list/tenant-list.component.mjs +1 -1
  79. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +2 -2
  80. package/fesm2022/c8y-ngx-components-asset-property-grid.component-xQgHuomT.mjs +233 -0
  81. package/fesm2022/c8y-ngx-components-asset-property-grid.component-xQgHuomT.mjs.map +1 -0
  82. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +1 -1
  83. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-c8y-ngx-components-D2rmddmn.mjs +36873 -0
  85. package/fesm2022/c8y-ngx-components-c8y-ngx-components-D2rmddmn.mjs.map +1 -0
  86. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +2 -2
  87. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
  89. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-device-profile.mjs +1 -1
  91. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +1 -1
  93. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  94. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
  95. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  96. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  97. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-files-repository.mjs +1 -1
  99. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  100. package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -2
  101. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
  103. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  105. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  106. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
  107. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +1 -1
  109. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components-repository-software.mjs +1 -1
  111. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  112. package/fesm2022/c8y-ngx-components-search.mjs +1 -1
  113. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  114. package/fesm2022/c8y-ngx-components-services.mjs +1 -1
  115. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  116. package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
  117. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  118. package/fesm2022/c8y-ngx-components-tenants.mjs +1 -1
  119. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  120. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +1 -1
  121. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  122. package/fesm2022/c8y-ngx-components.mjs +1 -36518
  123. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  124. package/locales/locales.pot +36 -0
  125. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"grid-data-source.d.ts","sourceRoot":"","sources":["../../../core/data-grid/grid-data-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAA0B,UAAU,EAAe,MAAM,MAAM,CAAC;AAGvE,OAAO,EAAU,eAAe,EAAwB,MAAM,mBAAmB,CAAC;AAElF,qBAAa,cAAe,YAAW,UAAU,CAAC,MAAM,CAAC;IACvD,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7C,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,gBAAgB,CAMrB;IACH,OAAO,CAAC,oBAAoB,CAEzB;IACH,OAAO,CAAC,iBAAiB,CAAsC;;IAU/D,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAIlE,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,IAAI;IAOrD,QAAQ,CAAC,EACP,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,MAAc,EACf;;;;;;;;;;KAAA;IAuFD,YAAY,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA;IAIpB,eAAe,CAAC,CAAC,KAAA;IAIjB,YAAY,CAAC,CAAC,KAAA;IAId,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;CAG1B"}
1
+ {"version":3,"file":"grid-data-source.d.ts","sourceRoot":"","sources":["../../../core/data-grid/grid-data-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAA0B,UAAU,EAAe,MAAM,MAAM,CAAC;AAGvE,OAAO,EAAU,eAAe,EAAE,GAAG,EAAwB,MAAM,mBAAmB,CAAC;AAEvF,qBAAa,cAAe,YAAW,UAAU,CAAC,MAAM,CAAC;IACvD,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,aAAa,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;IACjC,IAAI,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAElC;IAED,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,gBAAgB,CAMrB;IACH,OAAO,CAAC,oBAAoB,CAEzB;IACH,OAAO,CAAC,iBAAiB,CAAsC;IAC/D,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,sBAAsB,CAAgB;;IAW9C,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAIlE,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,IAAI;IAQrD,QAAQ,CAAC,EACP,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,MAAc,EACd,SAAgB,EACjB;;;;;;;;;;;KAAA;IAiID,YAAY,CAAC,GAAG,EAAE,GAAG;IAKrB,YAAY,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA;IAIpB,eAAe,CAAC,CAAC,KAAA;IAIjB,YAAY,CAAC,CAAC,KAAA;IAId,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,QAAQ;CAMjB"}
@@ -8,12 +8,16 @@ export * from './column/column.directive';
8
8
  export * from './column/custom.column';
9
9
  export * from './column/filtering-form-renderer';
10
10
  export * from './column/filtering-form-renderer.component';
11
+ export * from './column/tree-node-column/tree-node.cell-renderer.component';
12
+ export * from './column/tree-node-column/tree-node.data-grid-column';
13
+ export * from './column/tree-node-column/tree-node.header-cell-renderer.component';
11
14
  export * from './configure-custom-column';
12
15
  export * from './data-grid-configuration.model';
13
16
  export * from './data-grid.component';
14
17
  export * from './data-grid.model';
15
18
  export * from './data-grid.module';
16
19
  export * from './data-grid.service';
20
+ export * from './expandable-row.directive';
17
21
  export * from './filter-chip/filter-mapper-impl.service';
18
22
  export * from './filter-chip/filter-mapper.factory';
19
23
  export * from './filter-chip/filter-mapper.module';
@@ -25,5 +29,4 @@ export * from './legacy-grid-config-mapper.service';
25
29
  export * from './product-experience.constants';
26
30
  export * from './user-preferences-configuration-strategy.service';
27
31
  export * from './visible-controls.pipe';
28
- export * from './expandable-row.directive';
29
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/data-grid/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,iDAAiD,CAAC;AAChE,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mDAAmD,CAAC;AAClE,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/data-grid/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,iDAAiD,CAAC;AAChE,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,6DAA6D,CAAC;AAC5E,cAAc,sDAAsD,CAAC;AACrE,cAAc,oEAAoE,CAAC;AACnF,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mDAAmD,CAAC;AAClE,cAAc,yBAAyB,CAAC"}
@@ -317,10 +317,10 @@ export class BrandingComponent {
317
317
  }
318
318
  }
319
319
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingComponent, deps: [{ token: i1.StoreBrandingService }, { token: i2.ActivatedRoute }, { token: i3.AppStateService }, { token: i4.ApplicationService }, { token: i3.ZipService }, { token: i5.StaticAssetsService }, { token: i2.Router }, { token: i6.BsModalService }, { token: i3.ModalService }, { token: i1.BrandingVersionService }, { token: i7.AddBrandingModalService }, { token: i3.AlertService }, { token: i8.BrandingImportModalService }, { token: i1.BrandingTrackingService }], target: i0.ɵɵFactoryTarget.Component }); }
320
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BrandingComponent, isStandalone: true, selector: "c8y-branding", ngImport: i0, template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }] }); }
320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BrandingComponent, isStandalone: true, selector: "c8y-branding", ngImport: i0, template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }] }); }
321
321
  }
322
322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BrandingComponent, decorators: [{
323
323
  type: Component,
324
324
  args: [{ selector: 'c8y-branding', standalone: true, imports: [CoreModule, DataGridModule], template: "<c8y-title translate>Branding</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'palette'\"\n [label]=\"'Branding' | translate\"\n [path]=\"'/branding-editor'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container *ngIf=\"availableBrandingVariants$ | async as brandingVariant; else loading\">\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"30\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"addNewVersion()\"\n data-cy=\"branding-add-branding-variant\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add variant</span>\n </button>\n </c8y-action-bar-item>\n <c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"20\"\n >\n <button\n class=\"btn btn-link\"\n data-cy=\"branding-import-branding\"\n (click)=\"importBranding()\"\n >\n <i [c8yIcon]=\"'data-import'\"></i>\n <span translate>Import variant</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item\n *ngIf=\"brandingVariant.publicOptions\"\n [placement]=\"'right'\"\n [priority]=\"10\"\n >\n <button\n class=\"btn btn-link\"\n (click)=\"deleteAllBrandings(brandingVariant.publicOptions)\"\n data-cy=\"branding-remove-all-brandings\"\n >\n <i [c8yIcon]=\"'trash-o'\"></i>\n <span translate>Delete all variants</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"'Branding variants' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"brandingVariant.variants\"\n >\n <c8y-ui-empty-state\n [icon]=\"'palette'\"\n [title]=\"'No branding variants' | translate\"\n [subtitle]=\"\n 'Personalize your experience with a theme-able interface. Create a unique look that aligns with your brand identity.'\n | translate\n \"\n *ngIf=\"!brandingVariant.publicOptions\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n data-cy=\"branding-get-started-using-branding\"\n (click)=\"getStartedUsingBranding()\"\n translate\n >\n Add branding variant\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n" }]
325
325
  }], ctorParameters: () => [{ type: i1.StoreBrandingService }, { type: i2.ActivatedRoute }, { type: i3.AppStateService }, { type: i4.ApplicationService }, { type: i3.ZipService }, { type: i5.StaticAssetsService }, { type: i2.Router }, { type: i6.BsModalService }, { type: i3.ModalService }, { type: i1.BrandingVersionService }, { type: i7.AddBrandingModalService }, { type: i3.AlertService }, { type: i8.BrandingImportModalService }, { type: i1.BrandingTrackingService }] });
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDeEIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxZQUFZLEVBQ1osZUFBZSxFQUNmLGlCQUFpQixFQUdqQixZQUFZLEVBRVosTUFBTSxFQUNOLFVBQVUsRUFDVixPQUFPLEVBQ1AsVUFBVSxFQUNWLGNBQWMsRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdEcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDekgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDcEcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDekgsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7Ozs7Ozs7Ozs7O0FBUTdJLE1BQU0sT0FBTyxpQkFBaUI7SUFnSjVCLFlBQ1UsU0FBK0IsRUFDL0IsY0FBOEIsRUFDOUIsUUFBeUIsRUFDekIsa0JBQXNDLEVBQ3RDLEdBQWUsRUFDZixZQUFpQyxFQUNqQyxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsc0JBQThDLEVBQzlDLHVCQUFnRCxFQUNoRCxLQUFtQixFQUNuQiwwQkFBc0QsRUFDdEQsZ0JBQXlDO1FBYnpDLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFDdEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQTdKbkQsZUFBVSxHQUFlO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLENBQUM7U0FDZixDQUFDO1FBQ0YsbUJBQWMsR0FBbUI7WUFDL0IsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxJQUFJO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO1FBQ0YsbUJBQWMsR0FBb0I7WUFDaEM7Z0JBQ0UsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQzVCLFFBQVEsRUFBRSxDQUFDLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtnQkFDOUIsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUMvQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDN0IsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEQsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLElBQUksRUFBRSxNQUFNO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUMxQixRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQy9DLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2dCQUN2QyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQy9DLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQztnQkFDOUIsTUFBTSxFQUFFLENBQUMsS0FBbUIsRUFBRSxFQUFFO29CQUM5QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ25DLE9BQU8sS0FBSyxDQUFDO29CQUNmLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQy9DLElBQUksQ0FBQzt3QkFDSCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM3QixPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFDakMsT0FBTyxDQUNMLG9NQUFvTSxDQUNyTSxFQUNELE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztvQkFDSixDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDUCxrQkFBa0I7d0JBQ2xCLE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7YUFDRjtZQUNEO2dCQUNFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO2dCQUM5QixNQUFNLEVBQUUsQ0FBQyxLQUFtQixFQUFFLEVBQUU7b0JBQzlCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsT0FBTyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUNELFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBbUIsRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDL0MsSUFBSSxDQUFDO3dCQUNILE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQzdCLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxFQUNsQyxPQUFPLENBQ0wsc0dBQXNHLENBQ3ZHLEVBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FDZCxDQUFDO29CQUNKLENBQUM7b0JBQUMsTUFBTSxDQUFDO3dCQUNQLGtCQUFrQjt3QkFDbEIsT0FBTztvQkFDVCxDQUFDO29CQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUM5QyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7d0JBQ3pFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztxQkFDdkIsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsQ0FBQzthQUNGO1NBQ0YsQ0FBQztRQUNGLFlBQU8sR0FBYTtZQUNsQjtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDdkIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLHFCQUFxQixFQUFFLGlDQUFpQzthQUN6RDtZQUNEO2dCQUNFLElBQUksRUFBRSxPQUFPLENBQUMsc0VBQXNFLENBQUM7Z0JBQ3JGLElBQUksRUFBRSxNQUFNO2dCQUNaLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixxQkFBcUIsRUFBRSxpQ0FBaUM7Z0JBQ3hELDJCQUEyQixFQUFFLHVDQUF1QzthQUNyRTtZQUNEO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUN4QixJQUFJLEVBQUUsT0FBTztnQkFDYixVQUFVLEVBQUUsS0FBSzthQUNsQjtZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixNQUFNLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2FBQ2xCO1NBQ0YsQ0FBQztRQUNGLDBCQUFxQixHQUFHLGdCQUFnQixDQUFDO1FBTWpDLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQU8sU0FBUyxDQUFDLENBQUM7UUFpQjNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUNoRyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdEQsK0JBQStCO1FBQy9CLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsYUFBNEI7UUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDNUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLEVBQ3ZDLE9BQU8sQ0FDTDs7Ozs7Ozs7OzthQVVLLENBQ04sRUFDRCxNQUFNLENBQUMsTUFBTSxFQUNiLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQ3pELENBQUM7UUFDRixJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBcUI7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUUsTUFBTSxlQUFlLEdBQUcsTUFBTSxjQUFjLENBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUM1QixlQUFlLENBQUMsZUFBZSxFQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQzFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDcEMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDcEUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7U0FDL0UsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksRUFBRSxtQkFBbUIsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNqRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxFQUNyRixnQkFBZ0IsRUFDaEIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQzlCLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBcUI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQ3JGLE9BQU8sRUFDUCxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FDOUIsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBb0I7UUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM1QyxPQUFPLENBQUMscUNBQXFDLENBQUMsRUFDOUMsT0FBTyxDQUNMOzs7Ozs7Ozs7O2FBVUssQ0FDTixDQUNGLENBQUM7UUFDRixJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRWhELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXFCO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSTthQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLFlBQWlFLENBQUM7UUFDdEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7Z0JBQ2pFLFlBQVksRUFBRSxFQUFFLFdBQVcsRUFBRTtnQkFDN0IsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDL0MsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxlQUFlO1lBQ2YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEYsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0YsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQ2hELE9BQU8sQ0FBQyxnQkFBZ0IsRUFDeEIsT0FBTyxDQUFDLE9BQU8sRUFDZixTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBRWhFLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLGVBQWU7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsMkJBQTJCLENBQ3ZDLGdCQUE4QixFQUM5QixZQUFzQixFQUN0QixlQUF3QjtRQUV4QixLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUN4QyxTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQy9DLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQ2hELGdCQUFnQixFQUNoQixPQUFPLENBQUMsT0FBTyxFQUNmLFdBQVcsQ0FDWixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7K0dBOVdVLGlCQUFpQjttR0FBakIsaUJBQWlCLHdFQzFDOUIsMGtGQTBGQSwyQ0RsRFksVUFBVSxzOERBQUUsY0FBYzs7NEZBRXpCLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxjQUFjLGNBRVosSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQnJhbmRWZXJzaW9uLFxuICBTdG9yZUJyYW5kaW5nU2VydmljZSxcbiAgQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgQnJhbmRpbmdUcmFja2luZ1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9icmFuZGluZy9zaGFyZWQvZGF0YSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQ29sdW1uLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBTdGF0dXMsXG4gIFppcFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIENvcmVNb2R1bGUsXG4gIERhdGFHcmlkTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFN0YXRpY0Fzc2V0c1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3N0YXRpYy1hc3NldHMvZGF0YSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQXBwbHlCcmFuZGluZ1RvQXBwTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1icmFuZGluZy10by1hcHAtbW9kYWwvYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZGRCcmFuZGluZ01vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYnJhbmRpbmcvc2hhcmVkL2xhenkvYWRkLWJyYW5kaW5nLW1vZGFsJztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtY2VsbC1yZW5kZXJlci9icmFuZGluZy10YWdzLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vYnJhbmRpbmctaW1wb3J0LW1vZGFsL2JyYW5kaW5nLWltcG9ydC1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLW5hbWUtY2VsbC1yZW5kZXJlci9icmFuZGluZy1uYW1lLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0hlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtaGVhZGVyLWNlbGwtcmVuZGVyZXIvYnJhbmRpbmctdGFncy1oZWFkZXItY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYnJhbmRpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgRGF0YUdyaWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEJyYW5kaW5nQ29tcG9uZW50IHtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRCcmFuZGluZyhlbnRyeS5uYW1lKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydCxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmV4cG9ydEJyYW5kaW5nKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwcmV2aWV3JyxcbiAgICAgIGljb246ICdleHRlcm5hbC1saW5rJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ09wZW4gcHJldmlldycpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRoaXMuYnJhbmRpbmdzLm9wZW5QcmV2aWV3Rm9yQnJhbmRpbmcoZW50cnkubmFtZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnZHVwbGljYXRlJyxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ0R1cGxpY2F0ZScpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZHVwbGljYXRlVmVyc2lvbihlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2FwcGx5LXRvLWFwcCcsXG4gICAgICBpY29uOiAnZm9ybScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdBcHBseSB0byBzcGVjaWZpYyBhcHBzJyksXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBseVRvQXBwcyhlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ3NldC1hcy1kZWZhdWx0JyxcbiAgICAgIGljb246ICdnbG9iZTEnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnU2V0IGFzIGdsb2JhbCcpLFxuICAgICAgc2hvd0lmOiAoZW50cnk6IEJyYW5kVmVyc2lvbikgPT4ge1xuICAgICAgICBpZiAoZW50cnkudGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgICBnZXR0ZXh0KCdTZXQgYXMgZ2xvYmFsIGJyYW5kaW5nJyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gc2V0IHRoaXMgdmFyaWFudCBhcyB0aGUgZ2xvYmFsIGJyYW5kaW5nPyBCeSBkb2luZyBzbywgdGhpcyB2YXJpYW50IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgYXBwcyB0aGF0IGRvIG5vdCBoYXZlIGEgc3BlY2lmaWMgYnJhbmRpbmcgYXBwbGllZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgU3RhdHVzLklORk9cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBkaWQgbm90IGNvbmZpcm1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ3MubWFya0FzQWN0aXZlKGVudHJ5KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBzaG93SWY6IChlbnRyeTogQnJhbmRWZXJzaW9uKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS50YWdzPy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBicmFuZGluZyB2YXJpYW50JyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhpcyBicmFuZGluZyB2YXJpYW50LiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBTdGF0dXMuREFOR0VSXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZGlkIG5vdCBjb25maXJtXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmRlbGV0ZUJyYW5kaW5nVmFyaWFudCgpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShlbnRyeS5wdWJsaWNPcHRpb25zQXBwLCB7XG4gICAgICAgICAgdmVyc2lvbjogZW50cnkudmVyc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfVxuICBdO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ05hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogZ2V0dGV4dCgnQXBwbGllZCB0b2BBcHBsaWNhdGlvbnMgYSBicmFuZGluZyBhcHBsaWVzIHRvICh0YWJsZSBjb2x1bW4gaGVhZGVyKWAnKSxcbiAgICAgIHBhdGg6ICd0YWdzJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogQnJhbmRpbmdUYWdzQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50OiBCcmFuZGluZ1RhZ3NIZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvd25lcicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ093bmVyJyksXG4gICAgICBwYXRoOiAnb3duZXInLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdsYXN0VXBkYXRlZCcsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0xhc3QgdXBkYXRlZCcpLFxuICAgICAgcGF0aDogJ2xhc3RVcGRhdGVkJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlXG4gICAgfVxuICBdO1xuICBjdXJyZW50QXBwQ29udGV4dFBhdGggPSAnYWRtaW5pc3RyYXRpb24nO1xuICBhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJDogT2JzZXJ2YWJsZTx7XG4gICAgcHVibGljT3B0aW9uczogSUFwcGxpY2F0aW9uO1xuICAgIHZhcmlhbnRzOiBCcmFuZFZlcnNpb25bXTtcbiAgfT47XG5cbiAgcHJpdmF0ZSByZWxvYWRUcmlnZ2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJyYW5kaW5nczogU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldHM6IFN0YXRpY0Fzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1Nb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdWZXJzaW9uU2VydmljZTogQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFkZEJyYW5kaW5nTW9kYWxTZXJ2aWNlOiBBZGRCcmFuZGluZ01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ0ltcG9ydE1vZGFsU2VydmljZTogQnJhbmRpbmdJbXBvcnRNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1RyYWNraW5nOiBCcmFuZGluZ1RyYWNraW5nU2VydmljZVxuICApIHtcbiAgICB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aCA9IHRoaXMuYXBwU3RhdGUuc3RhdGUuYXBwPy5jb250ZXh0UGF0aCB8fCB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aDtcbiAgICB0aGlzLmF2YWlsYWJsZUJyYW5kaW5nVmFyaWFudHMkID0gdGhpcy5yZWxvYWRUcmlnZ2VyLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5icmFuZGluZ3MubG9hZEJyYW5kaW5nVmFyaWFudHMoKSksXG4gICAgICAvLyBoaWRlIHRoZSBmYWxsYmFjayBmcm9tIHVzZXJzXG4gICAgICBtYXAodmFyaWFudHMgPT4ge1xuICAgICAgICB2YXJpYW50cy52YXJpYW50cyA9IHZhcmlhbnRzLnZhcmlhbnRzLmZpbHRlcih2ID0+ICF2LnRhZ3M/LmluY2x1ZGVzKCdmYWxsYmFjaycpKTtcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgIGdldHRleHQoJ0RlbGV0ZSBhbGwgYnJhbmRpbmcgdmFyaWFudHMnKSxcbiAgICAgIGdldHRleHQoXG4gICAgICAgIGA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgVGhpcyBhY3Rpb24gd2lsbCBwZXJtYW5lbnRseSByZW1vdmUgYWxsIGN1c3RvbSBicmFuZGluZyB2YXJpYW50cy4gWW91ciB0ZW5hbnQgd2lsbCByZXZlcnRcbiAgICAgICAgICB0byB0aGUgZGVmYXVsdCBicmFuZGluZy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgQ29uc2lkZXIgZXhwb3J0aW5nIHlvdXIgY3VzdG9tIGJyYW5kaW5nIHZhcmlhbnRzIGJlZm9yZSBwcm9jZWVkaW5nLCBhcyB0aGlzIGFjdGlvbiBjYW5ub3RcbiAgICAgICAgICBiZSB1bmRvbmUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlP1xuICAgICAgICA8L3A+YFxuICAgICAgKSxcbiAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICB7IGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJyksIG9rOiBnZXR0ZXh0KCdEZWxldGUgYWxsJykgfVxuICAgICk7XG4gICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgfHwgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICFyZXN1bHQuY29uZmlybWVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5kZWxldGVBbGxCcmFuZGluZ3MoKTtcblxuICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEJyYW5kaW5nKHZhcmlhbnQ6IEJyYW5kVmVyc2lvbikge1xuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5leHBvcnRCcmFuZGluZygpO1xuICAgIGNvbnN0IGJyYW5kaW5nID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5icmFuZGluZ3MuZ2V0WmlwRm9yQmluYXJ5KHZhcmlhbnQuaWQpKTtcbiAgICBjb25zdCBzdGF0aWNBc3NldHNBcHAgPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5nZXRBcHBGb3JUZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgY29uc3Qgc3RhdGljQXNzZXRzWmlwID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmJyYW5kaW5ncy5nZXRaaXBGb3JCaW5hcnkoXG4gICAgICAgIHN0YXRpY0Fzc2V0c0FwcC5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgdGhpcy56aXAuY3JlYXRlWmlwKFtcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuYnJhbmRpbmdzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lLCBibG9iOiBicmFuZGluZyB9LFxuICAgICAgeyBmaWxlTmFtZTogdGhpcy5zdGF0aWNBc3NldHMuZmlsZU5hbWVzLmV4cG9ydFppcE5hbWUsIGJsb2I6IHN0YXRpY0Fzc2V0c1ppcCB9XG4gICAgXSk7XG4gICAgc2F2ZUFzKGJsb2IsIGBicmFuZGluZy1leHBvcnQtJHt2YXJpYW50Lm5hbWV9LSR7dmFyaWFudC5yZXZpc2lvbn0tJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX0uemlwYCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlci5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBhZGROZXdWZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuQWRkQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbignbGF0ZXN0Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCBsYXRlc3QgYnJhbmRpbmdgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuYWRkTmV3VmVyc2lvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBmYWxsQmFja0JyYW5kaW5nLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLndhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgICB0aGlzLmVkaXRCcmFuZGluZyh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlLCAnZGFuZ2VyJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlVmVyc2lvbih2ZXJzaW9uOiBCcmFuZFZlcnNpb24pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbih2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuRHVwbGljYXRlQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuZHVwbGljYXRlVmVyc2lvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLndhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgICB0aGlzLmVkaXRCcmFuZGluZyh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlLCAnZGFuZ2VyJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZWRpdEJyYW5kaW5nKGJyYW5kaW5nTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFticmFuZGluZ05hbWUsICdlZGl0J10sIHsgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KGBHZXQgc3RhcnRlZCB1c2luZyBicmFuZGluZyB2YXJpYW50c2ApLFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgYDxwIGNsYXNzPVwibS1iLThcIj5Db25maXJtaW5nIHRoaXMgYWN0aW9uIGNyZWF0ZXMgdHdvIGJyYW5kaW5nIHZhcmlhbnRzOjwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwibS1iLTggcC1sLTE2XCI+XG4gICAgICAgICAgPGxpPkEgZGVmYXVsdCBjb3B5IG9mIHlvdXIgY3VycmVudCBnbG9iYWwgYnJhbmRpbmc8L2xpPlxuICAgICAgICAgIDxsaT5Zb3VyIG5ldyBjdXN0b21pemFibGUgdmFyaWFudC48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgQWZ0ZXIgY3VzdG9taXphdGlvbiwgeW91IGNhbiBzZXQgeW91ciBuZXcgdmFyaWFudCBhcyBnbG9iYWwgb3IgYXBwbHkgaXQgdG8gc3BlY2lmaWMgYXBwcy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICBUbyByZXZlcnQgY2hhbmdlcywgc2ltcGx5IHNldCB0aGUgZGVmYXVsdCBicmFuZGluZyBhcyBnbG9iYWwgb3IgdXNlIHRoZSBcIkRlbGV0ZSBhbGwgdmFyaWFudHNcIiBidXR0b24gYXQgYW55IHRpbWUuXG4gICAgICAgIDwvcD5gXG4gICAgICApXG4gICAgKTtcbiAgICBpZiAocmVzdWx0ID09PSBmYWxzZSB8fCAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgIXJlc3VsdC5jb25maXJtZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCk7XG5cbiAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5nZXRTdGFydGVkVXNpbmdCcmFuZGluZygpO1xuICAgIGF3YWl0IHRoaXMuYWRkTmV3VmVyc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlUb0FwcHModmVyc2lvbjogQnJhbmRWZXJzaW9uKSB7XG4gICAgY29uc3QgcHJlZml4ID0gJ2FwcC0nO1xuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gdmVyc2lvbi50YWdzXG4gICAgICAuZmlsdGVyKHRhZyA9PiB0YWcuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgLm1hcCh0YWcgPT4gdGFnLnJlcGxhY2UocHJlZml4LCAnJykpO1xuICAgIGNvbnN0IG90aGVyVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWcuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgc2VsZWN0ZWRUYWdzOiBBd2FpdGVkPEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50WydyZXN1bHQnXT47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbC5zaG93KEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGluaXRpYWxTdGF0ZTogeyBjdXJyZW50VGFncyB9LFxuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgc2VsZWN0ZWRUYWdzID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbW9kYWwgY2xvc2VkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRBcHBzID0gT2JqZWN0LmtleXMoc2VsZWN0ZWRUYWdzKS5maWx0ZXIoa2V5ID0+IHNlbGVjdGVkVGFnc1trZXldKTtcblxuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5hcHBseVRvQXBwcyhzZWxlY3RlZEFwcHMpO1xuXG4gICAgY29uc3QgdGFnc1RvU2V0ID0gWy4uLm90aGVyVGFncywgLi4uc2VsZWN0ZWRBcHBzLm1hcCh0YWcgPT4gYCR7cHJlZml4fSR7dGFnfWApXTtcblxuICAgIGF3YWl0IHRoaXMucmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKHZlcnNpb24ucHVibGljT3B0aW9uc0FwcCwgdGFnc1RvU2V0LCB2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKFxuICAgICAgdmVyc2lvbi5wdWJsaWNPcHRpb25zQXBwLFxuICAgICAgdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgdGFnc1RvU2V0XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEJyYW5kaW5nKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlLm9wZW5CcmFuZGluZ0ltcG9ydE1vZGFsKCk7XG5cbiAgICAgIHRoaXMuYnJhbmRpbmdzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgICB0aGlzLnJlbG9hZFRyaWdnZXIubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKFxuICAgIHB1YmxpY09wdGlvbnNBcHA6IElBcHBsaWNhdGlvbixcbiAgICB0YWdzVG9SZW1vdmU6IHN0cmluZ1tdLFxuICAgIHZlcnNpb25Ub0lnbm9yZT86IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgcHVibGljT3B0aW9uc0FwcC5hcHBsaWNhdGlvblZlcnNpb25zKSB7XG4gICAgICBpZiAodmVyc2lvbi52ZXJzaW9uID09PSB2ZXJzaW9uVG9JZ25vcmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZW1vdmVkVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWdzVG9SZW1vdmUuaW5jbHVkZXModGFnKSk7XG4gICAgICBpZiAocmVtb3ZlZFRhZ3MubGVuZ3RoID09PSB2ZXJzaW9uLnRhZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoXG4gICAgICAgIHB1YmxpY09wdGlvbnNBcHAsXG4gICAgICAgIHZlcnNpb24udmVyc2lvbixcbiAgICAgICAgcmVtb3ZlZFRhZ3NcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LXRpdGxlIHRyYW5zbGF0ZT5CcmFuZGluZzwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ3BhbGV0dGUnXCJcbiAgICBbbGFiZWxdPVwiJ0JyYW5kaW5nJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9icmFuZGluZy1lZGl0b3InXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJCB8IGFzeW5jIGFzIGJyYW5kaW5nVmFyaWFudDsgZWxzZSBsb2FkaW5nXCI+XG4gIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgKm5nSWY9XCJicmFuZGluZ1ZhcmlhbnQucHVibGljT3B0aW9uc1wiXG4gICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgICBbcHJpb3JpdHldPVwiMzBcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgKGNsaWNrKT1cImFkZE5ld1ZlcnNpb24oKVwiXG4gICAgICBkYXRhLWN5PVwiYnJhbmRpbmctYWRkLWJyYW5kaW5nLXZhcmlhbnRcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BZGQgdmFyaWFudDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjIwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1pbXBvcnQtYnJhbmRpbmdcIlxuICAgICAgKGNsaWNrKT1cImltcG9ydEJyYW5kaW5nKClcIlxuICAgID5cbiAgICAgIDxpIFtjOHlJY29uXT1cIidkYXRhLWltcG9ydCdcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+SW1wb3J0IHZhcmlhbnQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgICpuZ0lmPVwiYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjEwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVBbGxCcmFuZGluZ3MoYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnMpXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1yZW1vdmUtYWxsLWJyYW5kaW5nc1wiXG4gICAgPlxuICAgICAgPGkgW2M4eUljb25dPVwiJ3RyYXNoLW8nXCI+PC9pPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkRlbGV0ZSBhbGwgdmFyaWFudHM8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYm9yZGVyLXRvcFwiPlxuICAgIDxjOHktZGF0YS1ncmlkXG4gICAgICBbdGl0bGVdPVwiJ0JyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICAgIFtyb3dzXT1cImJyYW5kaW5nVmFyaWFudC52YXJpYW50c1wiXG4gICAgPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCIncGFsZXR0ZSdcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIGJyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAnUGVyc29uYWxpemUgeW91ciBleHBlcmllbmNlIHdpdGggYSB0aGVtZS1hYmxlIGludGVyZmFjZS4gQ3JlYXRlIGEgdW5pcXVlIGxvb2sgdGhhdCBhbGlnbnMgd2l0aCB5b3VyIGJyYW5kIGlkZW50aXR5LidcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwiIWJyYW5kaW5nVmFyaWFudC5wdWJsaWNPcHRpb25zXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwiZmFsc2VcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1nZXQtc3RhcnRlZC11c2luZy1icmFuZGluZ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKClcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQWRkIGJyYW5kaW5nIHZhcmlhbnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2M4eS1kYXRhLWdyaWQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuIl19
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vYnJhbmRpbmcvc2hhcmVkL2xhenkvYnJhbmRpbmcvYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDeEIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxZQUFZLEVBQ1osZUFBZSxFQUNmLGlCQUFpQixFQUdqQixZQUFZLEVBRVosTUFBTSxFQUNOLFVBQVUsRUFDVixPQUFPLEVBQ1AsVUFBVSxFQUNWLGNBQWMsRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkRB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ZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQnJhbmRWZXJzaW9uLFxuICBTdG9yZUJyYW5kaW5nU2VydmljZSxcbiAgQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgQnJhbmRpbmdUcmFja2luZ1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9icmFuZGluZy9zaGFyZWQvZGF0YSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQ29sdW1uLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBTdGF0dXMsXG4gIFppcFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIENvcmVNb2R1bGUsXG4gIERhdGFHcmlkTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFN0YXRpY0Fzc2V0c1NlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3N0YXRpYy1hc3NldHMvZGF0YSc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQXBwbHlCcmFuZGluZ1RvQXBwTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1icmFuZGluZy10by1hcHAtbW9kYWwvYXBwbHktYnJhbmRpbmctdG8tYXBwLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZGRCcmFuZGluZ01vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYnJhbmRpbmcvc2hhcmVkL2xhenkvYWRkLWJyYW5kaW5nLW1vZGFsJztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0NlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtY2VsbC1yZW5kZXJlci9icmFuZGluZy10YWdzLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vYnJhbmRpbmctaW1wb3J0LW1vZGFsL2JyYW5kaW5nLWltcG9ydC1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLW5hbWUtY2VsbC1yZW5kZXJlci9icmFuZGluZy1uYW1lLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJyYW5kaW5nVGFnc0hlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kaW5nLXRhZ3MtaGVhZGVyLWNlbGwtcmVuZGVyZXIvYnJhbmRpbmctdGFncy1oZWFkZXItY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYnJhbmRpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJhbmRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgRGF0YUdyaWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEJyYW5kaW5nQ29tcG9uZW50IHtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGhvdmVyOiB0cnVlXG4gIH07XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSBbXG4gICAge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRCcmFuZGluZyhlbnRyeS5uYW1lKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydCxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmV4cG9ydEJyYW5kaW5nKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwcmV2aWV3JyxcbiAgICAgIGljb246ICdleHRlcm5hbC1saW5rJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ09wZW4gcHJldmlldycpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRoaXMuYnJhbmRpbmdzLm9wZW5QcmV2aWV3Rm9yQnJhbmRpbmcoZW50cnkubmFtZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAnZHVwbGljYXRlJyxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ0R1cGxpY2F0ZScpLFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZHVwbGljYXRlVmVyc2lvbihlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ2FwcGx5LXRvLWFwcCcsXG4gICAgICBpY29uOiAnZm9ybScsXG4gICAgICB0ZXh0OiBnZXR0ZXh0KCdBcHBseSB0byBzcGVjaWZpYyBhcHBzJyksXG4gICAgICBjYWxsYmFjazogYXN5bmMgKGVudHJ5OiBCcmFuZFZlcnNpb24sIF9yZWxvYWQpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBseVRvQXBwcyhlbnRyeSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogJ3NldC1hcy1kZWZhdWx0JyxcbiAgICAgIGljb246ICdnbG9iZTEnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnU2V0IGFzIGdsb2JhbCcpLFxuICAgICAgc2hvd0lmOiAoZW50cnk6IEJyYW5kVmVyc2lvbikgPT4ge1xuICAgICAgICBpZiAoZW50cnkudGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoZW50cnk6IEJyYW5kVmVyc2lvbiwgX3JlbG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgICBnZXR0ZXh0KCdTZXQgYXMgZ2xvYmFsIGJyYW5kaW5nJyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gc2V0IHRoaXMgdmFyaWFudCBhcyB0aGUgZ2xvYmFsIGJyYW5kaW5nPyBCeSBkb2luZyBzbywgdGhpcyB2YXJpYW50IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgYXBwcyB0aGF0IGRvIG5vdCBoYXZlIGEgc3BlY2lmaWMgYnJhbmRpbmcgYXBwbGllZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgU3RhdHVzLklORk9cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBkaWQgbm90IGNvbmZpcm1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5icmFuZGluZ3MubWFya0FzQWN0aXZlKGVudHJ5KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBzaG93SWY6IChlbnRyeTogQnJhbmRWZXJzaW9uKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS50YWdzPy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2s6IGFzeW5jIChlbnRyeTogQnJhbmRWZXJzaW9uLCBfcmVsb2FkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBicmFuZGluZyB2YXJpYW50JyksXG4gICAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhpcyBicmFuZGluZyB2YXJpYW50LiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBTdGF0dXMuREFOR0VSXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gZGlkIG5vdCBjb25maXJtXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmRlbGV0ZUJyYW5kaW5nVmFyaWFudCgpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShlbnRyeS5wdWJsaWNPcHRpb25zQXBwLCB7XG4gICAgICAgICAgdmVyc2lvbjogZW50cnkudmVyc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfVxuICBdO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnbmFtZScsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ05hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IEJyYW5kaW5nTmFtZUNlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogZ2V0dGV4dCgnQXBwbGllZCB0b2BBcHBsaWNhdGlvbnMgYSBicmFuZGluZyBhcHBsaWVzIHRvICh0YWJsZSBjb2x1bW4gaGVhZGVyKWAnKSxcbiAgICAgIHBhdGg6ICd0YWdzJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTogJ3NtYWxsJyxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogQnJhbmRpbmdUYWdzQ2VsbFJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50OiBCcmFuZGluZ1RhZ3NIZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvd25lcicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ093bmVyJyksXG4gICAgICBwYXRoOiAnb3duZXInLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdsYXN0VXBkYXRlZCcsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0xhc3QgdXBkYXRlZCcpLFxuICAgICAgcGF0aDogJ2xhc3RVcGRhdGVkJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlXG4gICAgfVxuICBdO1xuICBjdXJyZW50QXBwQ29udGV4dFBhdGggPSAnYWRtaW5pc3RyYXRpb24nO1xuICBhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJDogT2JzZXJ2YWJsZTx7XG4gICAgcHVibGljT3B0aW9uczogSUFwcGxpY2F0aW9uO1xuICAgIHZhcmlhbnRzOiBCcmFuZFZlcnNpb25bXTtcbiAgfT47XG5cbiAgcHJpdmF0ZSByZWxvYWRUcmlnZ2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJyYW5kaW5nczogU3RvcmVCcmFuZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdGF0aWNBc3NldHM6IFN0YXRpY0Fzc2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG1vZGFsOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1Nb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdWZXJzaW9uU2VydmljZTogQnJhbmRpbmdWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFkZEJyYW5kaW5nTW9kYWxTZXJ2aWNlOiBBZGRCcmFuZGluZ01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ0ltcG9ydE1vZGFsU2VydmljZTogQnJhbmRpbmdJbXBvcnRNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1RyYWNraW5nOiBCcmFuZGluZ1RyYWNraW5nU2VydmljZVxuICApIHtcbiAgICB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aCA9IHRoaXMuYXBwU3RhdGUuc3RhdGUuYXBwPy5jb250ZXh0UGF0aCB8fCB0aGlzLmN1cnJlbnRBcHBDb250ZXh0UGF0aDtcbiAgICB0aGlzLmF2YWlsYWJsZUJyYW5kaW5nVmFyaWFudHMkID0gdGhpcy5yZWxvYWRUcmlnZ2VyLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5icmFuZGluZ3MubG9hZEJyYW5kaW5nVmFyaWFudHMoKSksXG4gICAgICAvLyBoaWRlIHRoZSBmYWxsYmFjayBmcm9tIHVzZXJzXG4gICAgICBtYXAodmFyaWFudHMgPT4ge1xuICAgICAgICB2YXJpYW50cy52YXJpYW50cyA9IHZhcmlhbnRzLnZhcmlhbnRzLmZpbHRlcih2ID0+ICF2LnRhZ3M/LmluY2x1ZGVzKCdmYWxsYmFjaycpKTtcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtTW9kYWwuY29uZmlybShcbiAgICAgIGdldHRleHQoJ0RlbGV0ZSBhbGwgYnJhbmRpbmcgdmFyaWFudHMnKSxcbiAgICAgIGdldHRleHQoXG4gICAgICAgIGA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgVGhpcyBhY3Rpb24gd2lsbCBwZXJtYW5lbnRseSByZW1vdmUgYWxsIGN1c3RvbSBicmFuZGluZyB2YXJpYW50cy4gWW91ciB0ZW5hbnQgd2lsbCByZXZlcnRcbiAgICAgICAgICB0byB0aGUgZGVmYXVsdCBicmFuZGluZy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgQ29uc2lkZXIgZXhwb3J0aW5nIHlvdXIgY3VzdG9tIGJyYW5kaW5nIHZhcmlhbnRzIGJlZm9yZSBwcm9jZWVkaW5nLCBhcyB0aGlzIGFjdGlvbiBjYW5ub3RcbiAgICAgICAgICBiZSB1bmRvbmUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHA+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlP1xuICAgICAgICA8L3A+YFxuICAgICAgKSxcbiAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICB7IGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJyksIG9rOiBnZXR0ZXh0KCdEZWxldGUgYWxsJykgfVxuICAgICk7XG4gICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgfHwgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICFyZXN1bHQuY29uZmlybWVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5kZWxldGVBbGxCcmFuZGluZ3MoKTtcblxuICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEJyYW5kaW5nKHZhcmlhbnQ6IEJyYW5kVmVyc2lvbikge1xuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5leHBvcnRCcmFuZGluZygpO1xuICAgIGNvbnN0IGJyYW5kaW5nID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5icmFuZGluZ3MuZ2V0WmlwRm9yQmluYXJ5KHZhcmlhbnQuaWQpKTtcbiAgICBjb25zdCBzdGF0aWNBc3NldHNBcHAgPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5nZXRBcHBGb3JUZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgY29uc3Qgc3RhdGljQXNzZXRzWmlwID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmJyYW5kaW5ncy5nZXRaaXBGb3JCaW5hcnkoXG4gICAgICAgIHN0YXRpY0Fzc2V0c0FwcC5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgdGhpcy56aXAuY3JlYXRlWmlwKFtcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuYnJhbmRpbmdzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lLCBibG9iOiBicmFuZGluZyB9LFxuICAgICAgeyBmaWxlTmFtZTogdGhpcy5zdGF0aWNBc3NldHMuZmlsZU5hbWVzLmV4cG9ydFppcE5hbWUsIGJsb2I6IHN0YXRpY0Fzc2V0c1ppcCB9XG4gICAgXSk7XG4gICAgc2F2ZUFzKGJsb2IsIGBicmFuZGluZy1leHBvcnQtJHt2YXJpYW50Lm5hbWV9LSR7dmFyaWFudC5yZXZpc2lvbn0tJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX0uemlwYCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlci5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBhZGROZXdWZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuQWRkQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbignbGF0ZXN0Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCBsYXRlc3QgYnJhbmRpbmdgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuYWRkTmV3VmVyc2lvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBmYWxsQmFja0JyYW5kaW5nLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLndhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgICB0aGlzLmVkaXRCcmFuZGluZyh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlLCAnZGFuZ2VyJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZHVwbGljYXRlVmVyc2lvbih2ZXJzaW9uOiBCcmFuZFZlcnNpb24pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5icmFuZGluZ3MuZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbih2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGNvbnN0IHZlcnNpb25EZXRhaWxzID0gYXdhaXQgdGhpcy5hZGRCcmFuZGluZ01vZGFsU2VydmljZS5vcGVuRHVwbGljYXRlQnJhbmRpbmdNb2RhbCgpO1xuICAgIGlmICghdmVyc2lvbkRldGFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcuZHVwbGljYXRlVmVyc2lvbigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLmFkZEJyYW5kaW5nKFxuICAgICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBbdmVyc2lvbkRldGFpbHMuYnJhbmRpbmdOYW1lXVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJhbmRpbmdzLndhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb25EZXRhaWxzLmJyYW5kaW5nTmFtZSk7XG4gICAgICB0aGlzLmVkaXRCcmFuZGluZyh2ZXJzaW9uRGV0YWlscy5icmFuZGluZ05hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlLCAnZGFuZ2VyJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZWRpdEJyYW5kaW5nKGJyYW5kaW5nTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFticmFuZGluZ05hbWUsICdlZGl0J10sIHsgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybU1vZGFsLmNvbmZpcm0oXG4gICAgICBnZXR0ZXh0KGBHZXQgc3RhcnRlZCB1c2luZyBicmFuZGluZyB2YXJpYW50c2ApLFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgYDxwIGNsYXNzPVwibS1iLThcIj5Db25maXJtaW5nIHRoaXMgYWN0aW9uIGNyZWF0ZXMgdHdvIGJyYW5kaW5nIHZhcmlhbnRzOjwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwibS1iLTggcC1sLTE2XCI+XG4gICAgICAgICAgPGxpPkEgZGVmYXVsdCBjb3B5IG9mIHlvdXIgY3VycmVudCBnbG9iYWwgYnJhbmRpbmc8L2xpPlxuICAgICAgICAgIDxsaT5Zb3VyIG5ldyBjdXN0b21pemFibGUgdmFyaWFudC48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8cCBjbGFzcz1cIm0tYi04XCI+XG4gICAgICAgICAgQWZ0ZXIgY3VzdG9taXphdGlvbiwgeW91IGNhbiBzZXQgeW91ciBuZXcgdmFyaWFudCBhcyBnbG9iYWwgb3IgYXBwbHkgaXQgdG8gc3BlY2lmaWMgYXBwcy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICBUbyByZXZlcnQgY2hhbmdlcywgc2ltcGx5IHNldCB0aGUgZGVmYXVsdCBicmFuZGluZyBhcyBnbG9iYWwgb3IgdXNlIHRoZSBcIkRlbGV0ZSBhbGwgdmFyaWFudHNcIiBidXR0b24gYXQgYW55IHRpbWUuXG4gICAgICAgIDwvcD5gXG4gICAgICApXG4gICAgKTtcbiAgICBpZiAocmVzdWx0ID09PSBmYWxzZSB8fCAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgIXJlc3VsdC5jb25maXJtZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5icmFuZGluZ1RyYWNraW5nLmdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCk7XG5cbiAgICBhd2FpdCB0aGlzLmJyYW5kaW5ncy5nZXRTdGFydGVkVXNpbmdCcmFuZGluZygpO1xuICAgIGF3YWl0IHRoaXMuYWRkTmV3VmVyc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlUb0FwcHModmVyc2lvbjogQnJhbmRWZXJzaW9uKSB7XG4gICAgY29uc3QgcHJlZml4ID0gJ2FwcC0nO1xuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gdmVyc2lvbi50YWdzXG4gICAgICAuZmlsdGVyKHRhZyA9PiB0YWcuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgLm1hcCh0YWcgPT4gdGFnLnJlcGxhY2UocHJlZml4LCAnJykpO1xuICAgIGNvbnN0IG90aGVyVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWcuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICBsZXQgc2VsZWN0ZWRUYWdzOiBBd2FpdGVkPEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50WydyZXN1bHQnXT47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbC5zaG93KEFwcGx5QnJhbmRpbmdUb0FwcE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGluaXRpYWxTdGF0ZTogeyBjdXJyZW50VGFncyB9LFxuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgc2VsZWN0ZWRUYWdzID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbW9kYWwgY2xvc2VkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRBcHBzID0gT2JqZWN0LmtleXMoc2VsZWN0ZWRUYWdzKS5maWx0ZXIoa2V5ID0+IHNlbGVjdGVkVGFnc1trZXldKTtcblxuICAgIHRoaXMuYnJhbmRpbmdUcmFja2luZy5hcHBseVRvQXBwcyhzZWxlY3RlZEFwcHMpO1xuXG4gICAgY29uc3QgdGFnc1RvU2V0ID0gWy4uLm90aGVyVGFncywgLi4uc2VsZWN0ZWRBcHBzLm1hcCh0YWcgPT4gYCR7cHJlZml4fSR7dGFnfWApXTtcblxuICAgIGF3YWl0IHRoaXMucmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKHZlcnNpb24ucHVibGljT3B0aW9uc0FwcCwgdGFnc1RvU2V0LCB2ZXJzaW9uLnZlcnNpb24pO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKFxuICAgICAgdmVyc2lvbi5wdWJsaWNPcHRpb25zQXBwLFxuICAgICAgdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgdGFnc1RvU2V0XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydEJyYW5kaW5nKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJyYW5kaW5nSW1wb3J0TW9kYWxTZXJ2aWNlLm9wZW5CcmFuZGluZ0ltcG9ydE1vZGFsKCk7XG5cbiAgICAgIHRoaXMuYnJhbmRpbmdzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgICB0aGlzLnJlbG9hZFRyaWdnZXIubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlVGFnc0Zyb21PdGhlclZlcnNpb25zKFxuICAgIHB1YmxpY09wdGlvbnNBcHA6IElBcHBsaWNhdGlvbixcbiAgICB0YWdzVG9SZW1vdmU6IHN0cmluZ1tdLFxuICAgIHZlcnNpb25Ub0lnbm9yZT86IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgcHVibGljT3B0aW9uc0FwcC5hcHBsaWNhdGlvblZlcnNpb25zKSB7XG4gICAgICBpZiAodmVyc2lvbi52ZXJzaW9uID09PSB2ZXJzaW9uVG9JZ25vcmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZW1vdmVkVGFncyA9IHZlcnNpb24udGFncy5maWx0ZXIodGFnID0+ICF0YWdzVG9SZW1vdmUuaW5jbHVkZXModGFnKSk7XG4gICAgICBpZiAocmVtb3ZlZFRhZ3MubGVuZ3RoID09PSB2ZXJzaW9uLnRhZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoXG4gICAgICAgIHB1YmxpY09wdGlvbnNBcHAsXG4gICAgICAgIHZlcnNpb24udmVyc2lvbixcbiAgICAgICAgcmVtb3ZlZFRhZ3NcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LXRpdGxlIHRyYW5zbGF0ZT5CcmFuZGluZzwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ3BhbGV0dGUnXCJcbiAgICBbbGFiZWxdPVwiJ0JyYW5kaW5nJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy9icmFuZGluZy1lZGl0b3InXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJhdmFpbGFibGVCcmFuZGluZ1ZhcmlhbnRzJCB8IGFzeW5jIGFzIGJyYW5kaW5nVmFyaWFudDsgZWxzZSBsb2FkaW5nXCI+XG4gIDxjOHktYWN0aW9uLWJhci1pdGVtXG4gICAgKm5nSWY9XCJicmFuZGluZ1ZhcmlhbnQucHVibGljT3B0aW9uc1wiXG4gICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgICBbcHJpb3JpdHldPVwiMzBcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgKGNsaWNrKT1cImFkZE5ld1ZlcnNpb24oKVwiXG4gICAgICBkYXRhLWN5PVwiYnJhbmRpbmctYWRkLWJyYW5kaW5nLXZhcmlhbnRcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BZGQgdmFyaWFudDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjIwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1pbXBvcnQtYnJhbmRpbmdcIlxuICAgICAgKGNsaWNrKT1cImltcG9ydEJyYW5kaW5nKClcIlxuICAgID5cbiAgICAgIDxpIFtjOHlJY29uXT1cIidkYXRhLWltcG9ydCdcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+SW1wb3J0IHZhcmlhbnQ8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbVxuICAgICpuZ0lmPVwiYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICAgW3ByaW9yaXR5XT1cIjEwXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVBbGxCcmFuZGluZ3MoYnJhbmRpbmdWYXJpYW50LnB1YmxpY09wdGlvbnMpXCJcbiAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1yZW1vdmUtYWxsLWJyYW5kaW5nc1wiXG4gICAgPlxuICAgICAgPGkgW2M4eUljb25dPVwiJ3RyYXNoLW8nXCI+PC9pPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPkRlbGV0ZSBhbGwgdmFyaWFudHM8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuICA8ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWZsZXggZC1jb2wgYm9yZGVyLXRvcFwiPlxuICAgIDxjOHktZGF0YS1ncmlkXG4gICAgICBbdGl0bGVdPVwiJ0JyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICAgIFtyb3dzXT1cImJyYW5kaW5nVmFyaWFudC52YXJpYW50c1wiXG4gICAgPlxuICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICBbaWNvbl09XCIncGFsZXR0ZSdcIlxuICAgICAgICBbdGl0bGVdPVwiJ05vIGJyYW5kaW5nIHZhcmlhbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtzdWJ0aXRsZV09XCJcbiAgICAgICAgICAnUGVyc29uYWxpemUgeW91ciBleHBlcmllbmNlIHdpdGggYSB0aGVtZS1hYmxlIGludGVyZmFjZS4gQ3JlYXRlIGEgdW5pcXVlIGxvb2sgdGhhdCBhbGlnbnMgd2l0aCB5b3VyIGJyYW5kIGlkZW50aXR5LidcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwiIWJyYW5kaW5nVmFyaWFudC5wdWJsaWNPcHRpb25zXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwiZmFsc2VcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgIGRhdGEtY3k9XCJicmFuZGluZy1nZXQtc3RhcnRlZC11c2luZy1icmFuZGluZ1wiXG4gICAgICAgICAgKGNsaWNrKT1cImdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKClcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgQWRkIGJyYW5kaW5nIHZhcmlhbnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8L2M4eS1kYXRhLWdyaWQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -59,7 +59,7 @@ export class TypeDashboardTargetAssetsGridComponent {
59
59
  this.router.navigate([`/${parentSubPath}/${val.id}/dashboard/${this.dashboard.id}`]);
60
60
  }
61
61
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TypeDashboardTargetAssetsGridComponent, deps: [{ token: i1.Router }, { token: i2.TypeDashboardAssetsGridService }, { token: i3.ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component }); }
62
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TypeDashboardTargetAssetsGridComponent, selector: "c8y-type-dashboard-target-assets-grid", inputs: { dashboard: "dashboard" }, outputs: { onNavigateToAsset: "onNavigateToAsset" }, ngImport: i0, template: "<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n", dependencies: [{ kind: "component", type: i4.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i4.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
62
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TypeDashboardTargetAssetsGridComponent, selector: "c8y-type-dashboard-target-assets-grid", inputs: { dashboard: "dashboard" }, outputs: { onNavigateToAsset: "onNavigateToAsset" }, ngImport: i0, template: "<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n", dependencies: [{ kind: "component", type: i4.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i4.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
63
63
  }
64
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TypeDashboardTargetAssetsGridComponent, decorators: [{
65
65
  type: Component,
@@ -69,7 +69,7 @@ export class TypeDashboardsListComponent {
69
69
  };
70
70
  }
71
71
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TypeDashboardsListComponent, deps: [{ token: i1.DashboardManagerService }, { token: i2.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
72
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TypeDashboardsListComponent, selector: "c8y-dashboard-manager", ngImport: i0, template: "<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i3.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "hideReload"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "directive", type: i3.ExpandableRowDirective, selector: "[c8yExpandableRow]" }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i5.TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "context", "asyncRenderSuccess", "asyncRenderFail"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TypeDashboardsListComponent, selector: "c8y-dashboard-manager", ngImport: i0, template: "<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.CellRendererDefDirective, selector: "[c8yCellRendererDef]" }, { kind: "directive", type: i3.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "childNodePagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows", "treeGrid", "hideReload", "childNodesProperty", "parentNodeLabelProperty"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "directive", type: i3.ExpandableRowDirective, selector: "[c8yExpandableRow]" }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i5.TypeDashboardInfoComponent, selector: "c8y-type-dashboard-info", inputs: ["deviceTypeValue", "displayDeviceTypeValue", "context", "asyncRenderSuccess", "asyncRenderFail"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
73
73
  }
74
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TypeDashboardsListComponent, decorators: [{
75
75
  type: Component,
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydHkubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2Fzc2V0LXByb3BlcnR5L2Fzc2V0LXByb3BlcnR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgYSBEVE0gYXNzZXQgcHJvcGVydHkgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NldFByb3BlcnR5RGVmaW5pdGlvbiB7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAganNvblNjaGVtYToge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgY3JlYXRpb25UaW1lOiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3NldFByb3BlcnR5RGVmaW5pdGlvblJlc3BvbnNlIHtcbiAgZGVmaW5pdGlvbnM6IEFzc2V0UHJvcGVydHlEZWZpbml0aW9uW107XG4gIHBhZ2VTdGF0aXN0aWNzOiB7XG4gICAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIGhhc01vcmVQYWdlczogYm9vbGVhbjtcbiAgICBwYWdlQ291bnQ6IG51bWJlcjtcbiAgfTtcbiAgdG90YWxDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0UHJvcGVydHlGaWx0ZXIge1xuICBpZGVudGlmaWVycz86IHN0cmluZ1tdO1xuICB0aXRsZXM/OiBzdHJpbmdbXTtcbiAgdGFncz86IHN0cmluZ1tdO1xuICBjdXJyZW50UGFnZT86IG51bWJlcjtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbiJdfQ==
@@ -0,0 +1,84 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FetchClient, Service, Paging } from '@c8y/client';
3
+ import { AppStateService } from '../common';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@c8y/client";
6
+ import * as i2 from "../common";
7
+ export class AssetPropertyService extends Service {
8
+ constructor(client, appState) {
9
+ super(client);
10
+ this.appState = appState;
11
+ this.baseUrl = 'service/dtm';
12
+ this.listUrl = '/definitions/properties';
13
+ this.propertyName = 'definitions';
14
+ }
15
+ async canRetrieveAssetProperties() {
16
+ const isAppAvailable = await this.appState.isApplicationAvailable('dtm');
17
+ if (!isAppAvailable) {
18
+ return false;
19
+ }
20
+ try {
21
+ const result = await this.list({ currentPage: 1, pageSize: 1 });
22
+ return result?.data?.length > 0;
23
+ }
24
+ catch (error) {
25
+ return false;
26
+ }
27
+ }
28
+ async list(filterInput = {}) {
29
+ const headers = { accept: 'application/json' };
30
+ const filter = this.buildFilter(filterInput);
31
+ const res = await this.fetch(this.listUrl, this.changeFetchOptions({ headers, params: filter }, this.listUrl));
32
+ const json = (await res.json());
33
+ const data = json.definitions;
34
+ const paging = this.getPaging(json, filter);
35
+ return { res, data, paging };
36
+ }
37
+ async getByIdentifier(identifier) {
38
+ const url = `${this.listUrl}/${encodeURIComponent(identifier)}`;
39
+ const headers = { accept: 'application/json' };
40
+ const res = await this.fetch(url, this.changeFetchOptions({ headers }, url));
41
+ if (res.status === 404) {
42
+ throw new Error(`Property Definition with identifier '${identifier}' not found (404).`);
43
+ }
44
+ if (!res.ok) {
45
+ throw new Error(`Error fetching Property Definition '${identifier}': ${res.status} ${res.statusText}`);
46
+ }
47
+ return (await res.json());
48
+ }
49
+ search(searchTerm) {
50
+ return this.list({ titles: [searchTerm] });
51
+ }
52
+ buildFilter(filter) {
53
+ const newFilter = { ...filter };
54
+ ['identifiers', 'titles', 'tags'].forEach(key => {
55
+ if (Array.isArray(newFilter[key])) {
56
+ newFilter[key] = newFilter[key].join(',');
57
+ }
58
+ });
59
+ return newFilter;
60
+ }
61
+ getPaging(json, filter) {
62
+ if (json.pageStatistics) {
63
+ const { currentPage, hasMorePages } = json.pageStatistics;
64
+ const statistics = {
65
+ ...json.pageStatistics,
66
+ nextPage: hasMorePages ? currentPage + 1 : null,
67
+ prevPage: currentPage > 1 ? currentPage - 1 : null,
68
+ totalPages: json.pageStatistics.pageCount,
69
+ totalElements: json.totalCount
70
+ };
71
+ return new Paging(this, statistics, filter);
72
+ }
73
+ return null;
74
+ }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssetPropertyService, deps: [{ token: i1.FetchClient }, { token: i2.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
76
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssetPropertyService, providedIn: 'root' }); }
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssetPropertyService, decorators: [{
79
+ type: Injectable,
80
+ args: [{
81
+ providedIn: 'root'
82
+ }]
83
+ }], ctorParameters: () => [{ type: i1.FetchClient }, { type: i2.AppStateService }] });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHJvcGVydHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYXNzZXQtcHJvcGVydHkvYXNzZXQtcHJvcGVydHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFlLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBSzVDLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxPQUFnQztJQUt4RSxZQUNFLE1BQW1CLEVBQ1gsUUFBeUI7UUFFakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRk4sYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFOekIsWUFBTyxHQUFHLGFBQWEsQ0FBQztRQUN4QixZQUFPLEdBQUcseUJBQXlCLENBQUM7UUFDcEMsaUJBQVksR0FBRyxhQUFhLENBQUM7SUFPdkMsQ0FBQztJQUVELEtBQUssQ0FBQywwQkFBMEI7UUFDOUIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixD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LENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQy9DLFFBQVEsRUFBRSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTO2dCQUN6QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDL0IsQ0FBQztZQUNGLE9BQU8sSUFBSSxNQUFNLENBQTBCLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0FwRlUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoQ2xpZW50LCBTZXJ2aWNlLCBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXNzZXRQcm9wZXJ0eURlZmluaXRpb24sIEFzc2V0UHJvcGVydHlEZWZpbml0aW9uUmVzcG9uc2UgfSBmcm9tICcuL2Fzc2V0LXByb3BlcnR5Lm1vZGVsJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0UHJvcGVydHlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxBc3NldFByb3BlcnR5RGVmaW5pdGlvbj4ge1xuICBwcm90ZWN0ZWQgYmFzZVVybCA9ICdzZXJ2aWNlL2R0bSc7XG4gIHByb3RlY3RlZCBsaXN0VXJsID0gJy9kZWZpbml0aW9ucy9wcm9wZXJ0aWVzJztcbiAgcHJvdGVjdGVkIHByb3BlcnR5TmFtZSA9ICdkZWZpbml0aW9ucyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoY2xpZW50KTtcbiAgfVxuXG4gIGFzeW5jIGNhblJldHJpZXZlQXNzZXRQcm9wZXJ0aWVzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGlzQXBwQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5hcHBTdGF0ZS5pc0FwcGxpY2F0aW9uQXZhaWxhYmxlKCdkdG0nKTtcbiAgICBpZiAoIWlzQXBwQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubGlzdCh7IGN1cnJlbnRQYWdlOiAxLCBwYWdlU2l6ZTogMSB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ/LmRhdGE/Lmxlbmd0aCA+IDA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0KGZpbHRlcklucHV0OiBvYmplY3QgPSB7fSk6IFByb21pc2U8SVJlc3VsdExpc3Q8QXNzZXRQcm9wZXJ0eURlZmluaXRpb24+PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKGZpbHRlcklucHV0KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmZldGNoKFxuICAgICAgdGhpcy5saXN0VXJsLFxuICAgICAgdGhpcy5jaGFuZ2VGZXRjaE9wdGlvbnMoeyBoZWFkZXJzLCBwYXJhbXM6IGZpbHRlciB9LCB0aGlzLmxpc3RVcmwpXG4gICAgKTtcbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIEFzc2V0UHJvcGVydHlEZWZpbml0aW9uUmVzcG9uc2U7XG4gICAgY29uc3QgZGF0YTogQXNzZXRQcm9wZXJ0eURlZmluaXRpb25bXSA9IGpzb24uZGVmaW5pdGlvbnM7XG4gICAgY29uc3QgcGFnaW5nID0gdGhpcy5nZXRQYWdpbmcoanNvbiwgZmlsdGVyKTtcbiAgICByZXR1cm4geyByZXMsIGRhdGEsIHBhZ2luZyB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlJZGVudGlmaWVyKGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8QXNzZXRQcm9wZXJ0eURlZmluaXRpb24+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmxpc3RVcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkZW50aWZpZXIpfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmZldGNoKHVybCwgdGhpcy5jaGFuZ2VGZXRjaE9wdGlvbnMoeyBoZWFkZXJzIH0sIHVybCkpO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgRGVmaW5pdGlvbiB3aXRoIGlkZW50aWZpZXIgJyR7aWRlbnRpZmllcn0nIG5vdCBmb3VuZCAoNDA0KS5gKTtcbiAgICB9XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEVycm9yIGZldGNoaW5nIFByb3BlcnR5IERlZmluaXRpb24gJyR7aWRlbnRpZmllcn0nOiAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChhd2FpdCByZXMuanNvbigpKSBhcyBBc3NldFByb3BlcnR5RGVmaW5pdGlvbjtcbiAgfVxuXG4gIHNlYXJjaChzZWFyY2hUZXJtOiBzdHJpbmcpOiBQcm9taXNlPElSZXN1bHRMaXN0PEFzc2V0UHJvcGVydHlEZWZpbml0aW9uPj4ge1xuICAgIHJldHVybiB0aGlzLmxpc3QoeyB0aXRsZXM6IFtzZWFyY2hUZXJtXSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXIoZmlsdGVyOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgWydpZGVudGlmaWVycycsICd0aXRsZXMnLCAndGFncyddLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld0ZpbHRlcltrZXldKSkge1xuICAgICAgICBuZXdGaWx0ZXJba2V5XSA9IG5ld0ZpbHRlcltrZXldLmpvaW4oJywnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbmV3RmlsdGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2luZyhcbiAgICBqc29uOiBBc3NldFByb3BlcnR5RGVmaW5pdGlvblJlc3BvbnNlLFxuICAgIGZpbHRlcjogb2JqZWN0XG4gICk6IFBhZ2luZzxBc3NldFByb3BlcnR5RGVmaW5pdGlvbj4ge1xuICAgIGlmIChqc29uLnBhZ2VTdGF0aXN0aWNzKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRQYWdlLCBoYXNNb3JlUGFnZXMgfSA9IGpzb24ucGFnZVN0YXRpc3RpY3M7XG4gICAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgICAuLi5qc29uLnBhZ2VTdGF0aXN0aWNzLFxuICAgICAgICBuZXh0UGFnZTogaGFzTW9yZVBhZ2VzID8gY3VycmVudFBhZ2UgKyAxIDogbnVsbCxcbiAgICAgICAgcHJldlBhZ2U6IGN1cnJlbnRQYWdlID4gMSA/IGN1cnJlbnRQYWdlIC0gMSA6IG51bGwsXG4gICAgICAgIHRvdGFsUGFnZXM6IGpzb24ucGFnZVN0YXRpc3RpY3MucGFnZUNvdW50LFxuICAgICAgICB0b3RhbEVsZW1lbnRzOiBqc29uLnRvdGFsQ291bnRcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IFBhZ2luZzxBc3NldFByb3BlcnR5RGVmaW5pdGlvbj4odGhpcywgc3RhdGlzdGljcywgZmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,8 @@
1
- import { Component, Input, TemplateRef } from '@angular/core';
2
- import { of, pipe } from 'rxjs';
3
- import { map, tap } from 'rxjs/operators';
1
+ import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
2
+ import { Component, DestroyRef, inject, Input, TemplateRef, ViewChild } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { of, pipe, Subject } from 'rxjs';
5
+ import { debounceTime, map, tap } from 'rxjs/operators';
4
6
  import * as i0 from "@angular/core";
5
7
  import * as i1 from "@angular/common";
6
8
  import * as i2 from "@angular/cdk/scrolling";
@@ -8,20 +10,37 @@ import * as i3 from "./virtual-scroll-window.directive";
8
10
  export class VirtualScrollerWrapperComponent {
9
11
  constructor() {
10
12
  this.filterPipe = pipe(tap());
13
+ this.checkViewportSize$ = new Subject();
14
+ this.destroyRef = inject(DestroyRef);
11
15
  this.trackByFn = (i, item) => {
12
16
  return item.id;
13
17
  };
18
+ this.checkViewportSize$
19
+ .pipe(debounceTime(25), takeUntilDestroyed(this.destroyRef))
20
+ .subscribe(() => {
21
+ if (this.virtualScrollViewport) {
22
+ this.virtualScrollViewport.checkViewportSize();
23
+ }
24
+ });
25
+ }
26
+ ngAfterViewChecked() {
27
+ if (this.virtualScrollViewport) {
28
+ this.checkViewportSize$.next();
29
+ }
14
30
  }
15
31
  apply() {
16
32
  this.items$ = of(this.items).pipe(src => this.filterPipe(src), map(item => item));
17
33
  }
18
34
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VirtualScrollerWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: VirtualScrollerWrapperComponent, selector: "c8y-virtual-scroller-wrapper", inputs: { items: "items", itemHeight: "itemHeight", containerHeight: "containerHeight", template: "template", filterPipe: "filterPipe", strategy: "strategy", trackByFn: "trackByFn" }, ngImport: i0, template: "<ng-container *ngIf=\"items$ |async as items\" [ngSwitch]=\"strategy\">\n <ng-container *ngSwitchCase=\"'window'\">\n <cdk-virtual-scroll-viewport windowVirtualScrollStrategy [itemSizePx]=\"itemHeight\" class=\"inner-scroll\">\n <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'fixed'\">\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.height]=\"containerHeight + 'px'\" class=\"inner-scroll\">\n <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\" >\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i3.VirtualScrollWindowDirective, selector: "cdk-virtual-scroll-viewport[windowVirtualScrollStrategy]", inputs: ["itemSizePx", "minBufferPx", "maxBufferPx", "offsetSizePx"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: VirtualScrollerWrapperComponent, selector: "c8y-virtual-scroller-wrapper", inputs: { items: "items", itemHeight: "itemHeight", containerHeight: "containerHeight", template: "template", filterPipe: "filterPipe", strategy: "strategy", trackByFn: "trackByFn" }, viewQueries: [{ propertyName: "virtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"items$ |async as items\" [ngSwitch]=\"strategy\">\n <ng-container *ngSwitchCase=\"'window'\">\n <cdk-virtual-scroll-viewport windowVirtualScrollStrategy [itemSizePx]=\"itemHeight\" class=\"inner-scroll\">\n <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'fixed'\">\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.height]=\"containerHeight + 'px'\" class=\"inner-scroll\">\n <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\" >\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i3.VirtualScrollWindowDirective, selector: "cdk-virtual-scroll-viewport[windowVirtualScrollStrategy]", inputs: ["itemSizePx", "minBufferPx", "maxBufferPx", "offsetSizePx"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
20
36
  }
21
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VirtualScrollerWrapperComponent, decorators: [{
22
38
  type: Component,
23
39
  args: [{ selector: 'c8y-virtual-scroller-wrapper', template: "<ng-container *ngIf=\"items$ |async as items\" [ngSwitch]=\"strategy\">\n <ng-container *ngSwitchCase=\"'window'\">\n <cdk-virtual-scroll-viewport windowVirtualScrollStrategy [itemSizePx]=\"itemHeight\" class=\"inner-scroll\">\n <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'fixed'\">\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.height]=\"containerHeight + 'px'\" class=\"inner-scroll\">\n <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\" >\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></ng-container>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n</ng-container>\n" }]
24
- }], propDecorators: { items: [{
40
+ }], ctorParameters: () => [], propDecorators: { virtualScrollViewport: [{
41
+ type: ViewChild,
42
+ args: [CdkVirtualScrollViewport]
43
+ }], items: [{
25
44
  type: Input
26
45
  }], itemHeight: [{
27
46
  type: Input
@@ -36,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36
55
  }], trackByFn: [{
37
56
  type: Input
38
57
  }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGxlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbGVyLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBTTFDLE1BQU0sT0FBTywrQkFBK0I7SUFKNUM7UUFZVyxlQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFLekIsY0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUM7S0FRSDtJQU5DLEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUNsQixDQUFDO0lBQ0osQ0FBQzsrR0F0QlUsK0JBQStCO21HQUEvQiwrQkFBK0IsNFBDUjVDLDA4QkFpQkE7OzRGRFRhLCtCQUErQjtrQkFKM0MsU0FBUzsrQkFDRSw4QkFBOEI7OEJBSS9CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aXJ0dWFsLXNjcm9sbGVyLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBpdGVtcztcbiAgQElucHV0KCkgaXRlbUhlaWdodDtcbiAgQElucHV0KCkgY29udGFpbmVySGVpZ2h0O1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBpdGVtcyQ6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgQElucHV0KCkgZmlsdGVyUGlwZSA9IHBpcGUodGFwKCkpO1xuXG4gIEBJbnB1dCgpXG4gIHN0cmF0ZWd5OiAnZml4ZWQnIHwgJ3dpbmRvdyc7XG5cbiAgQElucHV0KCkgdHJhY2tCeUZuID0gKGksIGl0ZW0pID0+IHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfTtcblxuICBhcHBseSgpIHtcbiAgICB0aGlzLml0ZW1zJCA9IG9mKHRoaXMuaXRlbXMpLnBpcGUoXG4gICAgICBzcmMgPT4gdGhpcy5maWx0ZXJQaXBlKHNyYyksXG4gICAgICBtYXAoaXRlbSA9PiBpdGVtKVxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcyQgfGFzeW5jIGFzIGl0ZW1zXCIgW25nU3dpdGNoXT1cInN0cmF0ZWd5XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3dpbmRvdydcIj5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgd2luZG93VmlydHVhbFNjcm9sbFN0cmF0ZWd5IFtpdGVtU2l6ZVB4XT1cIml0ZW1IZWlnaHRcIiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgICAgICA8ZGl2ICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZml4ZWQnXCI+XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IFtpdGVtU2l6ZV09XCJpdGVtSGVpZ2h0XCIgW3N0eWxlLmhlaWdodF09XCJjb250YWluZXJIZWlnaHQgKyAncHgnXCIgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Rm5cIiA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBpbmRleDogaX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGxlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbGVyLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFNeEQsTUFBTSxPQUFPLCtCQUErQjtJQWlCMUM7UUFUUyxlQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFLMUIsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVoQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBWXhDLGNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBWEEsSUFBSSxDQUFDLGtCQUFrQjthQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMzRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQU1ELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUNsQixDQUFDO0lBQ0osQ0FBQzsrR0ExQ1UsK0JBQStCO21HQUEvQiwrQkFBK0IsbVRBQy9CLHdCQUF3QixnRENYckMsMDhCQWlCQTs7NEZEUGEsK0JBQStCO2tCQUozQyxTQUFTOytCQUNFLDhCQUE4Qjt3REFLeEMscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHdCQUF3QjtnQkFHMUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFrQkcsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBpbmplY3QsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgcGlwZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi92aXJ0dWFsLXNjcm9sbGVyLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQge1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcbiAgdmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgQElucHV0KCkgaXRlbXM7XG4gIEBJbnB1dCgpIGl0ZW1IZWlnaHQ7XG4gIEBJbnB1dCgpIGNvbnRhaW5lckhlaWdodDtcbiAgQElucHV0KCkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGZpbHRlclBpcGUgPSBwaXBlKHRhcCgpKTtcbiAgQElucHV0KCkgc3RyYXRlZ3k6ICdmaXhlZCcgfCAnd2luZG93JztcblxuICBpdGVtcyQ6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgcHJpdmF0ZSBjaGVja1ZpZXdwb3J0U2l6ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1KSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBASW5wdXQoKSB0cmFja0J5Rm4gPSAoaSwgaXRlbSkgPT4ge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9O1xuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUkLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBhcHBseSgpIHtcbiAgICB0aGlzLml0ZW1zJCA9IG9mKHRoaXMuaXRlbXMpLnBpcGUoXG4gICAgICBzcmMgPT4gdGhpcy5maWx0ZXJQaXBlKHNyYyksXG4gICAgICBtYXAoaXRlbSA9PiBpdGVtKVxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcyQgfGFzeW5jIGFzIGl0ZW1zXCIgW25nU3dpdGNoXT1cInN0cmF0ZWd5XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3dpbmRvdydcIj5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgd2luZG93VmlydHVhbFNjcm9sbFN0cmF0ZWd5IFtpdGVtU2l6ZVB4XT1cIml0ZW1IZWlnaHRcIiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxuICAgICAgICA8ZGl2ICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGluZGV4IGFzIGk7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZml4ZWQnXCI+XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IFtpdGVtU2l6ZV09XCJpdGVtSGVpZ2h0XCIgW3N0eWxlLmhlaWdodF09XCJjb250YWluZXJIZWlnaHQgKyAncHgnXCIgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Rm5cIiA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBpbmRleDogaX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19