@mediusinc/mng-commons 5.3.0-rc.1 → 5.3.0-rc.3

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 (106) hide show
  1. package/core/data-list/filter-metadata.model.d.ts +20 -0
  2. package/core/helpers/number.d.ts +5 -0
  3. package/core/helpers/type-helpers.d.ts +1 -0
  4. package/core/index.d.ts +2 -0
  5. package/core/provide.d.ts +3 -2
  6. package/core/services/tokens/module-config.token.d.ts +7 -6
  7. package/esm2022/core/data-list/data-list-params-helpers.mjs +3 -1
  8. package/esm2022/core/data-list/filter-metadata.model.mjs +2 -0
  9. package/esm2022/core/helpers/date.mjs +2 -2
  10. package/esm2022/core/helpers/number.mjs +19 -0
  11. package/esm2022/core/helpers/type-helpers.mjs +1 -1
  12. package/esm2022/core/index.mjs +3 -1
  13. package/esm2022/core/pipes/boolean.pipe.mjs +7 -1
  14. package/esm2022/core/provide.mjs +4 -3
  15. package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
  16. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +2 -3
  17. package/esm2022/filter/descriptors/filter.descriptor.mjs +76 -31
  18. package/esm2022/filter/models/filter.model.mjs +6 -1
  19. package/esm2022/form/components/date-range/date-range.component.mjs +45 -14
  20. package/esm2022/form/components/dropdown/dropdown.component.mjs +77 -93
  21. package/esm2022/form/components/number-range/number-range.component.mjs +29 -12
  22. package/esm2022/table/api/descriptors/column.descriptor.mjs +2 -1
  23. package/esm2022/table/api/descriptors/table.descriptor.mjs +22 -21
  24. package/esm2022/table/api/index.mjs +2 -1
  25. package/esm2022/table/api/models/row-expandable-component.model.mjs +2 -0
  26. package/esm2022/table/api/models/table-columns.model.mjs +1 -1
  27. package/esm2022/table/api/models/table.model.mjs +1 -1
  28. package/esm2022/table/components/column-filter/column-filter.component.mjs +396 -0
  29. package/esm2022/table/components/column-value/column-value.component.mjs +3 -3
  30. package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +52 -0
  31. package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +197 -0
  32. package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +135 -0
  33. package/esm2022/table/components/table/table.component.mjs +34 -25
  34. package/esm2022/table/helpers/filters.mjs +297 -0
  35. package/esm2022/table/index.mjs +13 -2
  36. package/esm2022/table/models/filter.model.mjs +2 -0
  37. package/esm2022/table/pipes/filter-value.pipe.mjs +77 -0
  38. package/esm2022/table/provide.mjs +19 -0
  39. package/esm2022/table/services/data-list.service.mjs +1 -1
  40. package/esm2022/table/services/table-feature-config.token.mjs +3 -0
  41. package/esm2022/tableview/action/components/action/action.component.mjs +3 -3
  42. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +2 -2
  43. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +2 -2
  44. package/esm2022/tableview/action/components/table/action-table.component.mjs +3 -3
  45. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +1 -3
  46. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +14 -1
  47. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  48. package/esm2022/tableview/api/editor/models/field-image-preview.model.mjs +2 -0
  49. package/esm2022/tableview/api/index.mjs +2 -1
  50. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +11 -13
  51. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
  52. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +3 -3
  53. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
  54. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +9 -3
  55. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -3
  56. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +3 -3
  57. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
  58. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +3 -4
  59. package/fesm2022/mediusinc-mng-commons-core.mjs +32 -4
  60. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  61. package/fesm2022/mediusinc-mng-commons-filter.mjs +81 -32
  62. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  63. package/fesm2022/mediusinc-mng-commons-form.mjs +149 -117
  64. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  65. package/fesm2022/mediusinc-mng-commons-table-api.mjs +22 -20
  66. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  67. package/fesm2022/mediusinc-mng-commons-table.mjs +833 -360
  68. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  69. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +23 -14
  70. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  71. package/fesm2022/mediusinc-mng-commons-tableview.mjs +27 -22
  72. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  73. package/filter/descriptors/filter.descriptor.d.ts +60 -16
  74. package/filter/models/filter.model.d.ts +4 -0
  75. package/form/components/date-range/date-range.component.d.ts +9 -3
  76. package/form/components/dropdown/dropdown.component.d.ts +6 -7
  77. package/form/components/number-range/number-range.component.d.ts +8 -4
  78. package/i18n/en.json +32 -0
  79. package/i18n/sl.json +32 -0
  80. package/package.json +1 -1
  81. package/table/api/descriptors/table.descriptor.d.ts +15 -8
  82. package/table/api/index.d.ts +1 -0
  83. package/table/api/models/row-expandable-component.model.d.ts +4 -0
  84. package/table/api/models/table-columns.model.d.ts +3 -3
  85. package/table/api/models/table.model.d.ts +0 -12
  86. package/table/components/{column-filter-full/column-filter-full.component.d.ts → column-filter/column-filter.component.d.ts} +23 -38
  87. package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +20 -0
  88. package/table/components/filter/filter-form/filter-form.component.d.ts +53 -0
  89. package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +35 -0
  90. package/table/components/table/table.component.d.ts +10 -7
  91. package/table/helpers/filters.d.ts +31 -0
  92. package/table/index.d.ts +10 -1
  93. package/table/models/filter.model.d.ts +24 -0
  94. package/table/pipes/filter-value.pipe.d.ts +19 -0
  95. package/table/provide.d.ts +8 -0
  96. package/table/services/data-list.service.d.ts +3 -2
  97. package/table/services/table-feature-config.token.d.ts +6 -0
  98. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +4 -4
  99. package/tableview/api/editor/descriptors/field.descriptor.d.ts +13 -3
  100. package/tableview/api/editor/models/editor-fields.model.d.ts +4 -4
  101. package/tableview/api/editor/models/field-image-preview.model.d.ts +4 -0
  102. package/tableview/api/index.d.ts +1 -0
  103. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +8 -6
  104. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +1 -0
  105. package/version-info.json +5 -5
  106. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +0 -655
@@ -6,6 +6,7 @@ export class ColumnDescriptor {
6
6
  this._columnDisplayType = ColumnDisplayTypeEnum.String;
7
7
  this._isMultiline = false;
8
8
  this._hasValueAsTooltip = false;
9
+ // column visibility
9
10
  this._isReorderable = false;
10
11
  this._isToggleable = false;
11
12
  this._isVisible = true;
@@ -345,4 +346,4 @@ export class ColumnDynamicDescriptor extends ColumnDescriptor {
345
346
  return descriptor;
346
347
  }
347
348
  }
348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2Rlc2NyaXB0b3JzL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRWpGLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQXFCN0UsTUFBTSxPQUFPLGdCQUFnQjtJQStDekIsWUFBWSxRQUFnQjtRQTdDcEIsZ0JBQVcsR0FBbUIsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUNwRCx1QkFBa0IsR0FBMEIscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBTXpFLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTFCLFVBQVU7UUFDRixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM3QixjQUFTLEdBQWtCLElBQUksQ0FBQztRQUNoQyxjQUFTLEdBQWtCLElBQUksQ0FBQztRQUt4QyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQVkvQixVQUFVO1FBQ0Ysd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBR3BDLGVBQWU7UUFDUCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUl6QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQWtCLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hC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RUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLFVBQW1CO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUk7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0dldHRlckZufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7Y29sdW1uVG9EYXRlTnVtYmVyT3JCb29sZWFufSBmcm9tICcuLi9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXInO1xuaW1wb3J0IHtJQ29sdW1uVmFsdWVDb21wb25lbnR9IGZyb20gJy4uL21vZGVscy9jb2x1bW4tdmFsdWUubW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcblxuZXhwb3J0IHR5cGUgQ29sdW1uQ3VycmVuY3lPcHRzVHlwZTxQcm9wZXJ0eSA9IHN0cmluZz4gPSB7XG4gICAgY3VycmVuY3lQcm9wZXJ0eT86IFByb3BlcnR5O1xuICAgIGN1cnJlbmN5Pzogc3RyaW5nO1xuICAgIGN1cnJlbmN5RGlzcGxheT86ICdzeW1ib2wnIHwgJ2NvZGUnIHwgJ25hbWUnO1xufSAmIENvbHVtbk51bWJlckZyYWN0aW9uT3B0c1R5cGUgJlxuICAgIENvbHVtbkxvY2FsZU9wdHNUeXBlO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5OdW1iZXJPcHRzVHlwZSA9IENvbHVtbk51bWJlckZyYWN0aW9uT3B0c1R5cGUgJiBDb2x1bW5Mb2NhbGVPcHRzVHlwZTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uTnVtYmVyRnJhY3Rpb25PcHRzVHlwZSA9IHtcbiAgICBtaW5JbnRlZ2VyRGlnaXRzPzogbnVtYmVyO1xuICAgIG1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIG1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uTG9jYWxlT3B0c1R5cGUgPSB7XG4gICAgbG9jYWxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlID0gQ29sdW1uTW9kZWw+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY29sdW1uVHlwZTogQ29sdW1uVHlwZUVudW0gPSBDb2x1bW5UeXBlRW51bS5TdHJpbmc7XG4gICAgcHJpdmF0ZSBfY29sdW1uRGlzcGxheVR5cGU6IENvbHVtbkRpc3BsYXlUeXBlRW51bSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xvY2FsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF90ZW1wbGF0ZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9nZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbD47XG4gICAgcHJpdmF0ZSBfaXNNdWx0aWxpbmUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oYXNWYWx1ZUFzVG9vbHRpcCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzUmVvcmRlcmFibGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1RvZ2dsZWFibGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1Zpc2libGUgPSB0cnVlO1xuXG4gICAgLy8gc3R5bGluZ1xuICAgIHByaXZhdGUgX2hlYWRlckNsYXNzTmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX2NsYXNzTmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX2NsYXNzTmFtZU1hcEZuPzogKGNsYXNzTmFtZT86IHN0cmluZywgaXRlbT86IFRhYmxlTW9kZWwpID0+IHN0cmluZztcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX21heFdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIGVudW0gc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSBfZW51bT86IEVudW1EZXNjcmlwdG9yPGFueT47XG5cbiAgICAvLyBib29sZWFuIHNwZWNpZmljc1xuICAgIHByaXZhdGUgX2Jvb2xlYW5Bc0ljb24gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9ib29sZWFuWWVzPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2Jvb2xlYW5Obz86IHN0cmluZztcblxuICAgIC8vIGN1cnJlbmN5IHNwZWNpZmljc1xuICAgIHByaXZhdGUgX2N1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9jdXJyZW5jeVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2N1cnJlbmN5RGlzcGxheT86ICdzeW1ib2wnIHwgJ2NvZGUnIHwgJ25hbWUnO1xuXG4gICAgLy8gY3VzdG9tIHNwZWNpZmljc1xuICAgIHByaXZhdGUgX2N1c3RvbUNvbXBvbmVudFR5cGU/OiBUeXBlPElDb2x1bW5WYWx1ZUNvbXBvbmVudDxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbCwgQ29sdW1uTW9kZWw+PjtcblxuICAgIC8vIGhlbHBlcnNcbiAgICBwcml2YXRlIF9oYXNDb3B5VG9DbGlwYm9hcmQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jbGlwYm9hcmRWYWx1ZUdldHRlcj86IEdldHRlckZuPENvbHVtblZhbHVlLCBUYWJsZU1vZGVsPjtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIHByaXZhdGUgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnR5ID0gcHJvcGVydHkgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5EaXNwbGF5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhlYWRlckNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZU1hcEZuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lTWFwRm47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5XaWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5Bc0ljb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuQXNJY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhblllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jvb2xlYW5ZZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuTm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuTm87XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXN0b21Db21wb25lbnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5Q29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5Q29kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RGlzcGxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzQ29weVRvQ2xpcGJvYXJkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xpcGJvYXJkVmFsdWVHZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwYm9hcmRWYWx1ZUdldHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBnZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc011bHRpbGluZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlsaW5lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzVmFsdWVBc1Rvb2x0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNWYWx1ZUFzVG9vbHRpcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzUmVvcmRlcmFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNUb2dnbGVhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNUb2dnbGVhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgY29sdW1uIHRvIGdpdmVuIHR5cGUgd2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB0eXBlIGNvbHVtbiB0eXBlIGVudW1cbiAgICAgKiBAcGFyYW0gZGlzcGxheVR5cGUgY29sdW1uIGRpc3BsYXkgdHlwZVxuICAgICAqIEBwYXJhbSBhcmdzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29sdW1uIChvcHRpb25hbClcbiAgICAgKi9cbiAgICBwdWJsaWMgYXNUeXBlKHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlzcGxheVR5cGUgPT09IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeSA/IHRoaXMuYXNDdXJyZW5jeSguLi5hcmdzKSA6IHRoaXMuYXNOdW1iZXIoLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNCb29sZWFuKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzRGF0ZSguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0VudW1VbnNhZmUoYXJnc1swXSBhcyBFbnVtRGVzY3JpcHRvcjxhbnk+KTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzQ3VzdG9tQ29tcG9uZW50KGFyZ3NbMF0pO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzTnVtYmVyKG9wdHM/OiBDb2x1bW5OdW1iZXJPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPVxuICAgICAgICAgICAgb3B0cz8ubWluSW50ZWdlckRpZ2l0cyB8fCBvcHRzPy5taW5GcmFjdGlvbkRpZ2l0cyB8fCBvcHRzPy5tYXhGcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgICAgICAgID8gYCR7b3B0cz8ubWluSW50ZWdlckRpZ2l0cyA/PyAwfS4ke29wdHM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IDB9LSR7b3B0cz8ubWF4RnJhY3Rpb25EaWdpdHMgPz8gb3B0cz8ubWluRnJhY3Rpb25EaWdpdHMgPz8gMH1gXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IG9wdHM/LmxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VycmVuY3kob3B0cz86IENvbHVtbkN1cnJlbmN5T3B0c1R5cGU8a2V5b2YgVGFibGVNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXNDdXJyZW5jeVVuc2FmZSh7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgY3VycmVuY3lQcm9wZXJ0eTogb3B0cz8uY3VycmVuY3lQcm9wZXJ0eSA/IChvcHRzLmN1cnJlbmN5UHJvcGVydHkgYXMgc3RyaW5nKSA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXJyZW5jeVVuc2FmZShvcHRzPzogQ29sdW1uQ3VycmVuY3lPcHRzVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5DdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lDb2RlID0gb3B0cz8uY3VycmVuY3k7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5UHJvcGVydHkgPSBvcHRzPy5jdXJyZW5jeVByb3BlcnR5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeURpc3BsYXkgPSBvcHRzPy5jdXJyZW5jeURpc3BsYXk7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlGb3JtYXQgPVxuICAgICAgICAgICAgb3B0cz8ubWluSW50ZWdlckRpZ2l0cyB8fCBvcHRzPy5taW5GcmFjdGlvbkRpZ2l0cyB8fCBvcHRzPy5tYXhGcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgICAgICAgID8gYCR7b3B0cz8ubWluSW50ZWdlckRpZ2l0cyA/PyAwfS4ke29wdHM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IDB9LSR7b3B0cz8ubWF4RnJhY3Rpb25EaWdpdHMgPz8gb3B0cz8ubWluRnJhY3Rpb25EaWdpdHMgPz8gMH1gXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IG9wdHM/LmxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRGF0ZShkaXNwbGF5Rm9ybWF0ID0gJ2RkLk1NLnl5eXknKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5EYXRlO1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZGlzcGxheUZvcm1hdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQm9vbGVhbih5ZXM/OiBzdHJpbmcsIG5vPzogc3RyaW5nLCBhc0ljb24gPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhbkFzSWNvbiA9IGFzSWNvbjtcbiAgICAgICAgdGhpcy5fYm9vbGVhblllcyA9IHllcztcbiAgICAgICAgdGhpcy5fYm9vbGVhbk5vID0gbm87XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0VudW1VbnNhZmUoZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkVudW07XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkVudW07XG4gICAgICAgIHRoaXMuX2VudW0gPSBlbnVtRGVzYztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudFR5cGU6IFR5cGU8SUNvbHVtblZhbHVlQ29tcG9uZW50PENvbHVtblZhbHVlLCBUYWJsZU1vZGVsLCBDb2x1bW5Nb2RlbD4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5DdXN0b207XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkNvbXBvbmVudDtcbiAgICAgICAgdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IGN1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0h0bWwoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkh0bWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZT86IHN0cmluZywgaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nLCBjbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lID8/ICcnO1xuICAgICAgICB0aGlzLl9oZWFkZXJDbGFzc05hbWUgPSBoZWFkZXJDbGFzc05hbWUgPz8gJyc7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZU1hcEZuID0gY2xhc3NOYW1lTWFwRm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoV2lkdGgod2lkdGg/OiBudW1iZXIsIG1pbldpZHRoPzogbnVtYmVyLCBtYXhXaWR0aD86IG51bWJlcik6IHRoaXMge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoID8/IG51bGw7XG4gICAgICAgIHRoaXMuX21pbldpZHRoID0gbWluV2lkdGggPz8gbnVsbDtcbiAgICAgICAgdGhpcy5fbWF4V2lkdGggPSBtYXhXaWR0aCA/PyBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb3B5VG9DbGlwYm9hcmQoaGFzQ29weVRvQ2xpcGJvYXJkID0gdHJ1ZSwgY2xpcGJvYXJkVmFsdWVHZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkID0gaGFzQ29weVRvQ2xpcGJvYXJkO1xuXG4gICAgICAgIGlmIChjbGlwYm9hcmRWYWx1ZUdldHRlcikge1xuICAgICAgICAgICAgdGhpcy5fY2xpcGJvYXJkVmFsdWVHZXR0ZXIgPSBjbGlwYm9hcmRWYWx1ZUdldHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGVtcGxhdGUodGVtcGxhdGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihnZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE11bHRpbGluZShpc011bHRpbGluZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aWxpbmUgPSBpc011bHRpbGluZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWx1ZUFzVG9vbHRpcCh2YWx1ZUFzVG9vbHRpcCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXAgPSB2YWx1ZUFzVG9vbHRpcDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZW9yZGVyYWJsZShpc1Jlb3JkZXJhYmxlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1Jlb3JkZXJhYmxlID0gaXNSZW9yZGVyYWJsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUb2dnbGVhYmxlKGlzVG9nZ2xlYWJsZSA9IHRydWUsIGlzVmlzaWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNUb2dnbGVhYmxlID0gaXNUb2dnbGVhYmxlO1xuICAgICAgICB0aGlzLl9pc1Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWQoZXhpc3RzUHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgaWYgKGV4aXN0c1Byb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSA9IGV4aXN0c1Byb3BlcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSBgJHt0aGlzLl9wcm9wZXJ0eX1Mb2NhbGl6ZWRgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+KHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4pIHtcbiAgICAgICAgb2JqLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBvYmouX2NvbHVtblR5cGUgPSB0aGlzLl9jb2x1bW5UeXBlO1xuICAgICAgICBvYmouX2NvbHVtbkRpc3BsYXlUeXBlID0gdGhpcy5fY29sdW1uRGlzcGxheVR5cGU7XG4gICAgICAgIG9iai5fZW51bSA9IHRoaXMuX2VudW07XG4gICAgICAgIG9iai5fYm9vbGVhbkFzSWNvbiA9IHRoaXMuX2Jvb2xlYW5Bc0ljb247XG4gICAgICAgIG9iai5fYm9vbGVhblllcyA9IHRoaXMuX2Jvb2xlYW5ZZXM7XG4gICAgICAgIG9iai5fYm9vbGVhbk5vID0gdGhpcy5fYm9vbGVhbk5vO1xuICAgICAgICBvYmouX2xvY2FsZSA9IHRoaXMuX2xvY2FsZTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeUNvZGUgPSB0aGlzLl9jdXJyZW5jeUNvZGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lEaXNwbGF5ID0gdGhpcy5fY3VycmVuY3lEaXNwbGF5O1xuICAgICAgICBvYmouX2N1cnJlbmN5UHJvcGVydHkgPSB0aGlzLl9jdXJyZW5jeVByb3BlcnR5O1xuICAgICAgICBvYmouX2Rpc3BsYXlGb3JtYXQgPSB0aGlzLl9kaXNwbGF5Rm9ybWF0O1xuICAgICAgICBvYmouX2hlYWRlckNsYXNzTmFtZSA9IHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fY2xhc3NOYW1lTWFwRm4gPSB0aGlzLl9jbGFzc05hbWVNYXBGbjtcbiAgICAgICAgb2JqLl93aWR0aCA9IHRoaXMuX3dpZHRoO1xuICAgICAgICBvYmouX21pbldpZHRoID0gdGhpcy5fbWluV2lkdGg7XG4gICAgICAgIG9iai5fbWF4V2lkdGggPSB0aGlzLl9tYXhXaWR0aDtcbiAgICAgICAgb2JqLl9jdXN0b21Db21wb25lbnRUeXBlID0gdGhpcy5fY3VzdG9tQ29tcG9uZW50VHlwZTtcbiAgICAgICAgb2JqLl9oYXNDb3B5VG9DbGlwYm9hcmQgPSB0aGlzLl9oYXNDb3B5VG9DbGlwYm9hcmQ7XG4gICAgICAgIG9iai5fdGVtcGxhdGUgPSB0aGlzLl90ZW1wbGF0ZTtcbiAgICAgICAgb2JqLl9nZXR0ZXIgPSB0aGlzLl9nZXR0ZXI7XG4gICAgICAgIG9iai5faXNNdWx0aWxpbmUgPSB0aGlzLl9pc011bHRpbGluZTtcbiAgICAgICAgb2JqLl9oYXNWYWx1ZUFzVG9vbHRpcCA9IHRoaXMuX2hhc1ZhbHVlQXNUb29sdGlwO1xuICAgICAgICBvYmouX2lzUmVvcmRlcmFibGUgPSB0aGlzLl9pc1Jlb3JkZXJhYmxlO1xuICAgICAgICBvYmouX2lzVG9nZ2xlYWJsZSA9IHRoaXMuX2lzVG9nZ2xlYWJsZTtcbiAgICAgICAgb2JqLl9pc1Zpc2libGUgPSB0aGlzLl9pc1Zpc2libGU7XG4gICAgICAgIG9iai5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgb2JqLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSA9IHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIGV4dGVuZHMgQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT4ge1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF92aXNpYmlsaXR5ID0gdHJ1ZTtcblxuICAgIC8vIHByaXZhdGUgX2ZpbHRlclN0YXR1cztcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmlzaWJpbGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2liaWxpdHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyBjb2x1bW4ncyB0aXRsZSBhbmQgcmV0dXJucyB0aGlzIGNvbHVtblxuICAgICAqIEBwYXJhbSB0aXRsZSB0aXRsZSB0byBiZSBzZXRcbiAgICAgKiBAcGFyYW0gb3ZlcnJpZGUgc2hvdWxkIGNvbHVtbiB0aXRsZSBpZiBhbGwgcmVhZHkgc2V0P1xuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoVGl0bGUodGl0bGU6IHN0cmluZywgb3ZlcnJpZGUgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5fdGl0bGUgPT0gbnVsbCB8fCBvdmVycmlkZSkge1xuICAgICAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGF1dG9tYXRpYyB0eXBlIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhBdXRvbWF0aWNUeXBlKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgY29sdW1uVG9EYXRlTnVtYmVyT3JCb29sZWFuKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB2aXNpYmlsaXR5IHN0YXRlIGZvciBjb2x1bW4gYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVmlzaWJpbGl0eSh2aXNpYmlsaXR5OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Zpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiBjb2x1bW4gZHluYW1pYyBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3Ige1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX3RpdGxlID0gdGhpcy5fdGl0bGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX3Zpc2liaWxpdHkgPSB0aGlzLl92aXNpYmlsaXR5O1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9Db2x1bW5EZXNjcmlwdG9yKCk6IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EZXNjcmlwdG9yKHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cbiJdfQ==
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2Rlc2NyaXB0b3JzL2NvbHVtbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRWpGLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQXFCN0UsTUFBTSxPQUFPLGdCQUFnQjtJQW1EekIsWUFBWSxRQUFnQjtRQWpEcEIsZ0JBQVcsR0FBbUIsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUNwRCx1QkFBa0IsR0FBMEIscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBUXpFLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUVuQyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTFCLFVBQVU7UUFDRixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM3QixjQUFTLEdBQWtCLElBQUksQ0FBQztRQUNoQyxjQUFTLEdBQWtCLElBQUksQ0FBQztRQUt4QyxvQkFBb0I7UUFDWixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQVkvQixVQUFVO1FBQ0Ysd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBR3BDLGVBQWU7UUFDUCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUl6QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQWtCLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcs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QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLFVBQW1CO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUk7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0dldHRlckZufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7Y29sdW1uVG9EYXRlTnVtYmVyT3JCb29sZWFufSBmcm9tICcuLi9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXInO1xuaW1wb3J0IHtJQ29sdW1uVmFsdWVDb21wb25lbnR9IGZyb20gJy4uL21vZGVscy9jb2x1bW4tdmFsdWUubW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcblxuZXhwb3J0IHR5cGUgQ29sdW1uQ3VycmVuY3lPcHRzVHlwZTxQcm9wZXJ0eSA9IHN0cmluZz4gPSB7XG4gICAgY3VycmVuY3lQcm9wZXJ0eT86IFByb3BlcnR5O1xuICAgIGN1cnJlbmN5Pzogc3RyaW5nO1xuICAgIGN1cnJlbmN5RGlzcGxheT86ICdzeW1ib2wnIHwgJ2NvZGUnIHwgJ25hbWUnO1xufSAmIENvbHVtbk51bWJlckZyYWN0aW9uT3B0c1R5cGUgJlxuICAgIENvbHVtbkxvY2FsZU9wdHNUeXBlO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5OdW1iZXJPcHRzVHlwZSA9IENvbHVtbk51bWJlckZyYWN0aW9uT3B0c1R5cGUgJiBDb2x1bW5Mb2NhbGVPcHRzVHlwZTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uTnVtYmVyRnJhY3Rpb25PcHRzVHlwZSA9IHtcbiAgICBtaW5JbnRlZ2VyRGlnaXRzPzogbnVtYmVyO1xuICAgIG1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIG1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sdW1uTG9jYWxlT3B0c1R5cGUgPSB7XG4gICAgbG9jYWxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlID0gQ29sdW1uTW9kZWw+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY29sdW1uVHlwZTogQ29sdW1uVHlwZUVudW0gPSBDb2x1bW5UeXBlRW51bS5TdHJpbmc7XG4gICAgcHJpdmF0ZSBfY29sdW1uRGlzcGxheVR5cGU6IENvbHVtbkRpc3BsYXlUeXBlRW51bSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5TdHJpbmc7XG4gICAgcHJvdGVjdGVkIF90aXRsZT86IHN0cmluZztcblxuICAgIC8vIHZhbHVlIGRpc3BsYXlcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xvY2FsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF90ZW1wbGF0ZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9nZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbD47XG4gICAgcHJpdmF0ZSBfaXNNdWx0aWxpbmUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oYXNWYWx1ZUFzVG9vbHRpcCA9IGZhbHNlO1xuXG4gICAgLy8gY29sdW1uIHZpc2liaWxpdHlcbiAgICBwcml2YXRlIF9pc1Jlb3JkZXJhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNUb2dnbGVhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgIC8vIHN0eWxpbmdcbiAgICBwcml2YXRlIF9oZWFkZXJDbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcml2YXRlIF9jbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX21pbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9tYXhXaWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBlbnVtIHNwZWNpZmljc1xuICAgIHByaXZhdGUgX2VudW0/OiBFbnVtRGVzY3JpcHRvcjxhbnk+O1xuXG4gICAgLy8gYm9vbGVhbiBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9ib29sZWFuQXNJY29uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYm9vbGVhblllcz86IHN0cmluZztcbiAgICBwcml2YXRlIF9ib29sZWFuTm8/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXJyZW5jeSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXJyZW5jeUNvZGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9jdXJyZW5jeURpc3BsYXk/OiAnc3ltYm9sJyB8ICdjb2RlJyB8ICduYW1lJztcblxuICAgIC8vIGN1c3RvbSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIF9jdXN0b21Db21wb25lbnRUeXBlPzogVHlwZTxJQ29sdW1uVmFsdWVDb21wb25lbnQ8Q29sdW1uVmFsdWUsIFRhYmxlTW9kZWwsIENvbHVtbk1vZGVsPj47XG5cbiAgICAvLyBoZWxwZXJzXG4gICAgcHJpdmF0ZSBfaGFzQ29weVRvQ2xpcGJvYXJkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY2xpcGJvYXJkVmFsdWVHZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbD47XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcml2YXRlIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uRGlzcGxheVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNwbGF5Rm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWFkZXJDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbldpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluV2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFdpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuQXNJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbkFzSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5ZZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib29sZWFuWWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYm9vbGVhbk5vKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9vbGVhbk5vO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tQ29tcG9uZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeUNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeUNvZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeURpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeURpc3BsYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVuY3lQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0NvcHlUb0NsaXBib2FyZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0NvcHlUb0NsaXBib2FyZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsaXBib2FyZFZhbHVlR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcGJvYXJkVmFsdWVHZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0ZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNNdWx0aWxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpbGluZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1ZhbHVlQXNUb29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzVmFsdWVBc1Rvb2x0aXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1Jlb3JkZXJhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZW9yZGVyYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVG9nZ2xlYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVG9nZ2xlYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGNvbHVtbiB0byBnaXZlbiB0eXBlIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0gdHlwZSBjb2x1bW4gdHlwZSBlbnVtXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIGNvbHVtbiBkaXNwbGF5IHR5cGVcbiAgICAgKiBAcGFyYW0gYXJncyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIGNvbHVtbiAob3B0aW9uYWwpXG4gICAgICovXG4gICAgcHVibGljIGFzVHlwZSh0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlUeXBlID09PSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3kgPyB0aGlzLmFzQ3VycmVuY3koLi4uYXJncykgOiB0aGlzLmFzTnVtYmVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzQm9vbGVhbiguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0RhdGUoLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkVudW06XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNFbnVtVW5zYWZlKGFyZ3NbMF0gYXMgRW51bURlc2NyaXB0b3I8YW55Pik7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0N1c3RvbUNvbXBvbmVudChhcmdzWzBdKTtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc051bWJlcihvcHRzPzogQ29sdW1uTnVtYmVyT3B0c1R5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uTnVtYmVyO1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID1cbiAgICAgICAgICAgIG9wdHM/Lm1pbkludGVnZXJEaWdpdHMgfHwgb3B0cz8ubWluRnJhY3Rpb25EaWdpdHMgfHwgb3B0cz8ubWF4RnJhY3Rpb25EaWdpdHNcbiAgICAgICAgICAgICAgICA/IGAke29wdHM/Lm1pbkludGVnZXJEaWdpdHMgPz8gMH0uJHtvcHRzPy5taW5GcmFjdGlvbkRpZ2l0cyA/PyAwfS0ke29wdHM/Lm1heEZyYWN0aW9uRGlnaXRzID8/IG9wdHM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IDB9YFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBvcHRzPy5sb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1cnJlbmN5KG9wdHM/OiBDb2x1bW5DdXJyZW5jeU9wdHNUeXBlPGtleW9mIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFzQ3VycmVuY3lVbnNhZmUoe1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGN1cnJlbmN5UHJvcGVydHk6IG9wdHM/LmN1cnJlbmN5UHJvcGVydHkgPyAob3B0cy5jdXJyZW5jeVByb3BlcnR5IGFzIHN0cmluZykgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VycmVuY3lVbnNhZmUob3B0cz86IENvbHVtbkN1cnJlbmN5T3B0c1R5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3k7XG4gICAgICAgIHRoaXMuX2N1cnJlbmN5Q29kZSA9IG9wdHM/LmN1cnJlbmN5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeVByb3BlcnR5ID0gb3B0cz8uY3VycmVuY3lQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lEaXNwbGF5ID0gb3B0cz8uY3VycmVuY3lEaXNwbGF5O1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID1cbiAgICAgICAgICAgIG9wdHM/Lm1pbkludGVnZXJEaWdpdHMgfHwgb3B0cz8ubWluRnJhY3Rpb25EaWdpdHMgfHwgb3B0cz8ubWF4RnJhY3Rpb25EaWdpdHNcbiAgICAgICAgICAgICAgICA/IGAke29wdHM/Lm1pbkludGVnZXJEaWdpdHMgPz8gMH0uJHtvcHRzPy5taW5GcmFjdGlvbkRpZ2l0cyA/PyAwfS0ke29wdHM/Lm1heEZyYWN0aW9uRGlnaXRzID8/IG9wdHM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IDB9YFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBvcHRzPy5sb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0RhdGUoZGlzcGxheUZvcm1hdCA9ICdkZC5NTS55eXl5Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgdGhpcy5fY29sdW1uRGlzcGxheVR5cGUgPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uRGF0ZTtcbiAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGRpc3BsYXlGb3JtYXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0Jvb2xlYW4oeWVzPzogc3RyaW5nLCBubz86IHN0cmluZywgYXNJY29uID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1uVHlwZSA9IENvbHVtblR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5Bc0ljb24gPSBhc0ljb247XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5ZZXMgPSB5ZXM7XG4gICAgICAgIHRoaXMuX2Jvb2xlYW5ObyA9IG5vO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNFbnVtVW5zYWZlKGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NvbHVtblR5cGUgPSBDb2x1bW5UeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5FbnVtO1xuICAgICAgICB0aGlzLl9lbnVtID0gZW51bURlc2M7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1c3RvbUNvbXBvbmVudChjdXN0b21Db21wb25lbnRUeXBlOiBUeXBlPElDb2x1bW5WYWx1ZUNvbXBvbmVudDxDb2x1bW5WYWx1ZSwgVGFibGVNb2RlbCwgQ29sdW1uTW9kZWw+Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5UeXBlID0gQ29sdW1uVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5Db21wb25lbnQ7XG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGUgPSBjdXN0b21Db21wb25lbnRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNIdG1sKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5EaXNwbGF5VHlwZSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5IdG1sO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU/OiBzdHJpbmcsIGhlYWRlckNsYXNzTmFtZT86IHN0cmluZywgY2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVGFibGVNb2RlbCkgPT4gc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZSA/PyAnJztcbiAgICAgICAgdGhpcy5faGVhZGVyQ2xhc3NOYW1lID0gaGVhZGVyQ2xhc3NOYW1lID8/ICcnO1xuICAgICAgICB0aGlzLl9jbGFzc05hbWVNYXBGbiA9IGNsYXNzTmFtZU1hcEZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFdpZHRoKHdpZHRoPzogbnVtYmVyLCBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aCA/PyBudWxsO1xuICAgICAgICB0aGlzLl9taW5XaWR0aCA9IG1pbldpZHRoID8/IG51bGw7XG4gICAgICAgIHRoaXMuX21heFdpZHRoID0gbWF4V2lkdGggPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29weVRvQ2xpcGJvYXJkKGhhc0NvcHlUb0NsaXBib2FyZCA9IHRydWUsIGNsaXBib2FyZFZhbHVlR2V0dGVyPzogR2V0dGVyRm48Q29sdW1uVmFsdWUsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0NvcHlUb0NsaXBib2FyZCA9IGhhc0NvcHlUb0NsaXBib2FyZDtcblxuICAgICAgICBpZiAoY2xpcGJvYXJkVmFsdWVHZXR0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaXBib2FyZFZhbHVlR2V0dGVyID0gY2xpcGJvYXJkVmFsdWVHZXR0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHZXR0ZXIoZ2V0dGVyPzogR2V0dGVyRm48Q29sdW1uVmFsdWUsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2dldHRlciA9IGdldHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNdWx0aWxpbmUoaXNNdWx0aWxpbmUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTXVsdGlsaW5lID0gaXNNdWx0aWxpbmU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsdWVBc1Rvb2x0aXAodmFsdWVBc1Rvb2x0aXAgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1ZhbHVlQXNUb29sdGlwID0gdmFsdWVBc1Rvb2x0aXA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVvcmRlcmFibGUoaXNSZW9yZGVyYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNSZW9yZGVyYWJsZSA9IGlzUmVvcmRlcmFibGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVG9nZ2xlYWJsZShpc1RvZ2dsZWFibGUgPSB0cnVlLCBpc1Zpc2libGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzVG9nZ2xlYWJsZSA9IGlzVG9nZ2xlYWJsZTtcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9jYWxpemVkKGV4aXN0c1Byb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGlmIChleGlzdHNQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSBleGlzdHNQcm9wZXJ0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkV4aXN0c1Byb3BlcnR5ID0gYCR7dGhpcy5fcHJvcGVydHl9TG9jYWxpemVkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9jb2x1bW5UeXBlID0gdGhpcy5fY29sdW1uVHlwZTtcbiAgICAgICAgb2JqLl9jb2x1bW5EaXNwbGF5VHlwZSA9IHRoaXMuX2NvbHVtbkRpc3BsYXlUeXBlO1xuICAgICAgICBvYmouX2VudW0gPSB0aGlzLl9lbnVtO1xuICAgICAgICBvYmouX2Jvb2xlYW5Bc0ljb24gPSB0aGlzLl9ib29sZWFuQXNJY29uO1xuICAgICAgICBvYmouX2Jvb2xlYW5ZZXMgPSB0aGlzLl9ib29sZWFuWWVzO1xuICAgICAgICBvYmouX2Jvb2xlYW5ObyA9IHRoaXMuX2Jvb2xlYW5ObztcbiAgICAgICAgb2JqLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGU7XG4gICAgICAgIG9iai5fY3VycmVuY3lDb2RlID0gdGhpcy5fY3VycmVuY3lDb2RlO1xuICAgICAgICBvYmouX2N1cnJlbmN5RGlzcGxheSA9IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgb2JqLl9jdXJyZW5jeVByb3BlcnR5ID0gdGhpcy5fY3VycmVuY3lQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9kaXNwbGF5Rm9ybWF0ID0gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICAgICAgb2JqLl9oZWFkZXJDbGFzc05hbWUgPSB0aGlzLl9oZWFkZXJDbGFzc05hbWU7XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX2NsYXNzTmFtZU1hcEZuID0gdGhpcy5fY2xhc3NOYW1lTWFwRm47XG4gICAgICAgIG9iai5fd2lkdGggPSB0aGlzLl93aWR0aDtcbiAgICAgICAgb2JqLl9taW5XaWR0aCA9IHRoaXMuX21pbldpZHRoO1xuICAgICAgICBvYmouX21heFdpZHRoID0gdGhpcy5fbWF4V2lkdGg7XG4gICAgICAgIG9iai5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5faGFzQ29weVRvQ2xpcGJvYXJkID0gdGhpcy5faGFzQ29weVRvQ2xpcGJvYXJkO1xuICAgICAgICBvYmouX3RlbXBsYXRlID0gdGhpcy5fdGVtcGxhdGU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX2lzTXVsdGlsaW5lID0gdGhpcy5faXNNdWx0aWxpbmU7XG4gICAgICAgIG9iai5faGFzVmFsdWVBc1Rvb2x0aXAgPSB0aGlzLl9oYXNWYWx1ZUFzVG9vbHRpcDtcbiAgICAgICAgb2JqLl9pc1Jlb3JkZXJhYmxlID0gdGhpcy5faXNSZW9yZGVyYWJsZTtcbiAgICAgICAgb2JqLl9pc1RvZ2dsZWFibGUgPSB0aGlzLl9pc1RvZ2dsZWFibGU7XG4gICAgICAgIG9iai5faXNWaXNpYmxlID0gdGhpcy5faXNWaXNpYmxlO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25FeGlzdHNQcm9wZXJ0eTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciBleHRlbmRzIENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX3RpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBfdmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgICAvLyBwcml2YXRlIF9maWx0ZXJTdGF0dXM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZpc2liaWxpdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmlsaXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgY29sdW1uJ3MgdGl0bGUgYW5kIHJldHVybnMgdGhpcyBjb2x1bW5cbiAgICAgKiBAcGFyYW0gdGl0bGUgdGl0bGUgdG8gYmUgc2V0XG4gICAgICogQHBhcmFtIG92ZXJyaWRlIHNob3VsZCBjb2x1bW4gdGl0bGUgaWYgYWxsIHJlYWR5IHNldD9cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcsIG92ZXJyaWRlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpdGxlID09IG51bGwgfHwgb3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBhdXRvbWF0aWMgdHlwZSBhbmQgcmV0dXJucyB0aGlzIGNvbHVtblxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQXV0b21hdGljVHlwZSh2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbih0aGlzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdmlzaWJpbGl0eSBzdGF0ZSBmb3IgY29sdW1uIGFuZCByZXR1cm5zIHRoaXMgY29sdW1uXG4gICAgICogQHBhcmFtIHZpc2liaWxpdHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZpc2liaWxpdHkodmlzaWJpbGl0eTogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl92aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgY29sdW1uIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBkZXNjcmlwdG9yLl92aXNpYmlsaXR5ID0gdGhpcy5fdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHRvQ29sdW1uRGVzY3JpcHRvcigpOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgQ29sdW1uRGVzY3JpcHRvcih0aGlzLl9wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { CommonsInternalError, angularDateFormatHasSeconds, angularDateFormatHasTime, flattenObjectKeys, fromAngularDateFormatToPrime } from '@mediusinc/mng-commons/core';
1
+ import { CommonsInternalError, flattenObjectKeys } from '@mediusinc/mng-commons/core';
2
2
  import { FilterDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor, FilterTypeEnum } from '@mediusinc/mng-commons/filter';
3
3
  import { columnToDateNumberOrBoolean } from '../helpers/class-attribute-converter';
4
4
  import { ColumnTypeEnum } from '../models/column.model';
@@ -130,6 +130,12 @@ export class TableDescriptorInst {
130
130
  get rowExpandableProperty() {
131
131
  return this._rowExpandableProperty;
132
132
  }
133
+ /**
134
+ * This property is used to define the type of the custom component that will be used to render the expanded row.
135
+ */
136
+ get rowExpandableComponentType() {
137
+ return this._rowExpandableComponentType;
138
+ }
133
139
  /**
134
140
  * Track property is used for the purpose of combined saving user preferences in localstorage if 2 tables have the same track properties they will share the same localstorage entry.
135
141
  * Similarly, this property can also be used to differentiate two tables of the same model on the same url (so that they have separate entries in localstorage).
@@ -324,8 +330,8 @@ export class TableDescriptorInst {
324
330
  this._filters.push(filter);
325
331
  return filter;
326
332
  }
327
- addFilterFromColumn(property, forceSimple = false) {
328
- return this.addFilterFromColumnUnsafe(property, forceSimple);
333
+ addFilterFromColumn(property, displayType, forceSimple = false) {
334
+ return this.addFilterFromColumnUnsafe(property, displayType, forceSimple);
329
335
  }
330
336
  withFiltersFromColumns(...properties) {
331
337
  return this.withFiltersFromColumnsUnsafe(...properties);
@@ -336,12 +342,15 @@ export class TableDescriptorInst {
336
342
  });
337
343
  return this;
338
344
  }
339
- addFilterFromColumnUnsafe(property, forceSimple = false) {
345
+ addFilterFromColumnUnsafe(property, displayType, forceSimple = false) {
340
346
  const column = this.getColumnUnsafe(property);
341
347
  if (!column) {
342
348
  throw new CommonsInternalError(`No column found for filter property "${property}"`);
343
349
  }
344
- return this.addFilterFromColumnDescriptorUnsafe(column, forceSimple);
350
+ const filter = this.addFilterFromColumnDescriptorUnsafe(column, forceSimple);
351
+ if (displayType != null)
352
+ filter.withDisplayType(displayType);
353
+ return filter;
345
354
  }
346
355
  addFilterFromColumnDescriptorUnsafe(column, forceSimple = false) {
347
356
  let filterDescriptor = new FilterDescriptor(column.property);
@@ -372,20 +381,8 @@ export class TableDescriptorInst {
372
381
  break;
373
382
  }
374
383
  filterDescriptor.asFilterType(filterType);
375
- if (filterType === FilterTypeEnum.Number) {
376
- const displayFormatFractions = column.displayFormat?.split('.')?.[1]?.split('-');
377
- if (displayFormatFractions && displayFormatFractions.length > 2) {
378
- filterDescriptor.withNumberFractions(parseInt(displayFormatFractions[0]), parseInt(displayFormatFractions[1]));
379
- }
380
- }
381
- else if (filterType === FilterTypeEnum.Date) {
382
- const displayFormat = column.displayFormat;
383
- if (displayFormat) {
384
- const filterDisplayFormat = fromAngularDateFormatToPrime(displayFormat);
385
- const hasTime = angularDateFormatHasTime(displayFormat);
386
- const hasSeconds = angularDateFormatHasSeconds(displayFormat);
387
- filterDescriptor.withDateFormat(filterDisplayFormat, hasTime, hasSeconds);
388
- }
384
+ if ((filterType === FilterTypeEnum.Number || filterType === FilterTypeEnum.Date) && column.displayFormat) {
385
+ filterDescriptor.withDisplayFormat(column.displayFormat, true);
389
386
  }
390
387
  this._filters.push(filterDescriptor);
391
388
  return filterDescriptor;
@@ -462,7 +459,7 @@ export class TableDescriptorInst {
462
459
  this._localizationLocaleProperty = localizationLocaleProperty;
463
460
  return this;
464
461
  }
465
- withRowExpandable(property, colSpan) {
462
+ withRowExpandable(property, colSpan, componentType) {
466
463
  this._rowExpandable = true;
467
464
  if (property) {
468
465
  this._rowExpandableProperty = property;
@@ -470,6 +467,9 @@ export class TableDescriptorInst {
470
467
  if (colSpan) {
471
468
  this._rowExpandableColSpan = colSpan;
472
469
  }
470
+ if (componentType) {
471
+ this._rowExpandableComponentType = componentType;
472
+ }
473
473
  return this;
474
474
  }
475
475
  withRowReorderable(reordable = true) {
@@ -499,6 +499,7 @@ export class TableDescriptorInst {
499
499
  obj._rowExpandable = this._rowExpandable;
500
500
  obj._rowExpandableColSpan = this._rowExpandableColSpan;
501
501
  obj._rowExpandableProperty = this._rowExpandableProperty;
502
+ obj._rowExpandableComponentType = this._rowExpandableComponentType;
502
503
  obj._rowReorderable = this._rowReorderable;
503
504
  }
504
505
  copy() {
@@ -654,4 +655,4 @@ export class TableDynamicDescriptorInst extends TableDescriptorInst {
654
655
  return descriptor;
655
656
  }
656
657
  }
657
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsb0JBQW9CLEVBSXBCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLDRCQUE0QixFQUMvQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUduSSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQXdCLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTdFLE9BQU8sRUFBMkIsMkJBQTJCLEVBQTJCLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BJLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sbUJBQW1CO0lBb0Q1QixZQUFtQixLQUFrQyxFQUFFLGFBQWEsR0FBRyxLQUFLO1FBekNsRSxhQUFRLEdBQTZDLEVBQUUsQ0FBQztRQUUxRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixpQkFBWSxHQUFrQixlQUFlLENBQUM7UUFFdEQsUUFBUTtRQUNBLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBT3JDLFVBQVU7UUFDRixVQUFLLEdBQWtCLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDM0MsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQU94QixnQkFBZ0I7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Q3BCLE1BQU0sVUFBVSxHQUFHLElBQUksbUJBQW1CLENBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBEYXRhTGlzdFJlc3VsdCxcbiAgICBFbnVtQ29uc3RhbnRUeXBlLFxuICAgIElMb29rdXBEYXRhUHJvdmlkZXIsXG4gICAgYW5ndWxhckRhdGVGb3JtYXRIYXNTZWNvbmRzLFxuICAgIGFuZ3VsYXJEYXRlRm9ybWF0SGFzVGltZSxcbiAgICBmbGF0dGVuT2JqZWN0S2V5cyxcbiAgICBmcm9tQW5ndWxhckRhdGVGb3JtYXRUb1ByaW1lXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsIEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yLCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtjb2x1bW5Ub0RhdGVOdW1iZXJPckJvb2xlYW59IGZyb20gJy4uL2hlbHBlcnMvY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlcic7XG5pbXBvcnQge0NvbHVtbkRpc3BsYXlUeXBlRW51bSwgQ29sdW1uVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHtJQ29sdW1uc01hbmFnZUludGVyZmFjZX0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHtJVGFibGVEZXNjcmlwdG9ySW50ZXJuYWwsIFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bSwgVGFibGVQYWdpbmF0aW9uTW9kZUVudW0sIFRhYmxlU2l6ZUVudW19IGZyb20gJy4uL21vZGVscy90YWJsZS5tb2RlbCc7XG5pbXBvcnQge0NvbHVtbkRlc2NyaXB0b3IsIENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yfSBmcm9tICcuL2NvbHVtbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7U29ydERlc2NyaXB0b3J9IGZyb20gJy4vc29ydC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMgPSBrZXlvZiBUYWJsZU1vZGVsLCBGaWx0ZXJzID0ga2V5b2YgVGFibGVNb2RlbD5cbiAgICBpbXBsZW1lbnRzIElUYWJsZURlc2NyaXB0b3JJbnRlcm5hbDxUYWJsZU1vZGVsPiwgSUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2U8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+XG57XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2F1dG9HZW5lcmF0ZWQ7XG5cbiAgICBwcml2YXRlIF9pZGVudGlmaWVyPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3RyYWNrUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU/OiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bTtcbiAgICBwcml2YXRlIF9yb3dzUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcbiAgICBwcml2YXRlIF9kZWZhdWx0TnVtUm93cz86IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbnM6IEFycmF5PENvbHVtbkRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPj4gPSBbXTtcbiAgICBwcml2YXRlIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oaWRlSGVhZGVyID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ0ljb246IHN0cmluZyB8IG51bGwgPSAncGkgcGktc3Bpbm5lcic7XG5cbiAgICAvLyBleHRyYVxuICAgIHByaXZhdGUgX2hhc0hvdmVyID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9oYXNHcmlkbGluZXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oYXNSZXNpemFibGVDb2x1bW5zID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY29sdW1uUmVzaXplTW9kZT86ICdmaXQnIHwgJ2V4cGFuZCc7XG5cbiAgICAvLyBzcGVjaWFsIGNvbHVtbnNcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2FjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW47XG5cbiAgICAvLyBzdHlsaW5nXG4gICAgcHJpdmF0ZSBfc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTGFyZ2U7XG4gICAgcHJpdmF0ZSBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJpdmF0ZSBfaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Jvd0NsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdGFibGVGdWxsSGVpZ2h0T2Zmc2V0PzogbnVtYmVyO1xuICAgIHByaXZhdGUgX3Jvd0hlaWdodD86IG51bWJlcjtcblxuICAgIC8vIGZpbHRlcnMmc29ydHNcbiAgICBwcml2YXRlIF9maWx0ZXJzOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD5bXSA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRzOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPltdID0gW107XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcml2YXRlIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgLy8gcm93IGV4cGFuZFxuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlQ29sU3BhbiA9IDEwMDtcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyByb3cgcmVvcmRlclxuICAgIHByaXZhdGUgX3Jvd1Jlb3JkZXJhYmxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPiwgYXV0b0dlbmVyYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RyYWNrUHJvcGVydHkgPSB0aGlzLl9tb2RlbC5pZFByb3BlcnR5O1xuICAgICAgICB0aGlzLl9hdXRvR2VuZXJhdGVkID0gYXV0b0dlbmVyYXRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZGVudGlmaWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHJhY2tQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNrUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYWdpbmF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25Nb2RlO1xuICAgIH1cblxuICAgIGdldCByb3dzUGVyUGFnZU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHROdW1Sb3dzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE51bVJvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1RleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdJY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGVGdWxsSGVpZ2h0T2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVGdWxsSGVpZ2h0T2Zmc2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNIb3ZlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0dyaWRsaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc2l6YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uUmVzaXplTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dSZW9yZGVyYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlQ29sU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGFibGUgbW9kZWwgcHJvcGVydHkgdGVsbHMgdXMgaWYgdGhlIHNwZWNpZmljIHJvdyBzaG91bGQgYmUgZXhwYW5kYWJsZSBvciBub3QgYmFzZWQgb24gcm93IGl0ZW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0V4cGFuZGFibGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFjayBwcm9wZXJ0eSBpcyB1c2VkIGZvciB0aGUgcHVycG9zZSBvZiBjb21iaW5lZCBzYXZpbmcgdXNlciBwcmVmZXJlbmNlcyBpbiBsb2NhbHN0b3JhZ2UgaWYgMiB0YWJsZXMgaGF2ZSB0aGUgc2FtZSB0cmFjayBwcm9wZXJ0aWVzIHRoZXkgd2lsbCBzaGFyZSB0aGUgc2FtZSBsb2NhbHN0b3JhZ2UgZW50cnkuXG4gICAgICogU2ltaWxhcmx5LCB0aGlzIHByb3BlcnR5IGNhbiBhbHNvIGJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0d28gdGFibGVzIG9mIHRoZSBzYW1lIG1vZGVsIG9uIHRoZSBzYW1lIHVybCAoc28gdGhhdCB0aGV5IGhhdmUgc2VwYXJhdGUgZW50cmllcyBpbiBsb2NhbHN0b3JhZ2UpLlxuICAgICAqIEBwYXJhbSBpZGVudGlmaWVyXG4gICAgICovXG4gICAgcHVibGljIHdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUcmFja1Byb3BlcnR5KHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90cmFja1Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxlTW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNvbHVtbihwcm9wZXJ0eToga2V5b2YgVGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5JZHggPSB0aGlzLl9jb2x1bW5zLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5zcGxpY2UoY29sdW1uSWR4LCAxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW48UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsPihwcm9wZXJ0eTogUHJvcGVydHlLZXkpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+LCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkVudW08UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+Pihwcm9wZXJ0eTogUHJvcGVydHlLZXksIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPikge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgY29sdW1uLmFzRW51bVVuc2FmZShlbnVtRGVzYyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5VbnNhZmU8Q29sdW1uTW9kZWwgPSB1bmtub3duPihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxlTW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRDb2x1bW4ocCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbkRlc2NyaXB0b3JzKC4uLmRlc2NyaXB0b3JzOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD5bXSk6IHRoaXMge1xuICAgICAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGQgPT4gdGhpcy53aXRoQ29sdW1uKGQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQYWdpbmF0aW9uTW9kZShwYWdpbmF0aW9uTW9kZTogVGFibGVQYWdpbmF0aW9uTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbk1vZGUgPSBwYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dzUGVyUGFnZShyb3dzOiBudW1iZXIsIG9wdGlvbnM/OiBBcnJheTxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHROdW1Sb3dzID0gcm93cztcbiAgICAgICAgdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRlSGVhZGVyKGhpZGVIZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hpZGVIZWFkZXIgPSBoaWRlSGVhZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvYWRpbmcodGV4dD86IHN0cmluZywgaWNvbj86IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ1RleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLl9sb2FkaW5nSWNvbiA9IGljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1zcGlubmVyJyA6IGljb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHJlb3JkZXJhYmxlIHByb3BlcnR5IG9uIGFsbCBjb2x1bW5zIGN1cnJlbnRseSBpbiB0aGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gY29sdW1uc1Jlb3JkZXJhYmxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFJlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdG9nZ2xlYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGNvbHVtbnNUb2dnbGVhYmxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1RvZ2dsZWFibGUoY29sdW1uc1RvZ2dsZWFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29sLndpdGhUb2dnbGVhYmxlKGNvbHVtbnNUb2dnbGVhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRzLmZpbmQocyA9PiBzLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydElkeCA9IHRoaXMuX3NvcnRzLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fc29ydHMuc3BsaWNlKHNvcnRJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVyTWF4ID0gdGhpcy5fc29ydHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5kZWZhdWx0SXNFbmFibGVkKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgcykgPT4gKHMuZGVmYXVsdE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcy5kZWZhdWx0T3JkZXIgPiBhY2MgPyBzLmRlZmF1bHRPcmRlciA6IGFjYyksIC0xKTtcbiAgICAgICAgICAgIHNvcnQud2l0aERlZmF1bHRTb3J0KHRydWUsIGFzY2VuZGluZywgZGVmYXVsdE9yZGVyTWF4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydHMucHVzaChzb3J0KTtcbiAgICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSwgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KHByb3BlcnR5OiBTb3J0cywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhEZWZhdWx0U29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGFzY2VuZGluZywgb3JkZXIsIGVuYWJsZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIGxldCBzb3J0ID0gdGhpcy5fc29ydHMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFzb3J0KSB7XG4gICAgICAgICAgICBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yKHByb3BlcnR5KTtcbiAgICAgICAgICAgIHRoaXMuX3NvcnRzLnB1c2goc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgc29ydC53aXRoRGVmYXVsdFNvcnQoZW5hYmxlZCA/PyB0cnVlLCBhc2NlbmRpbmcsIG9yZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0cyguLi5wcm9wZXJ0aWVzOiBTb3J0c1tdKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTb3J0c1Vuc2FmZSguLi4ocHJvcGVydGllcyBhcyBzdHJpbmdbXSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydHNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ydHMucHVzaChuZXcgU29ydERlc2NyaXB0b3IocCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbHRlcihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGaWx0ZXIocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpbHRlclVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcklkeCA9IHRoaXMuX2ZpbHRlcnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnNwbGljZShmaWx0ZXJJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXI8RmlsdGVyTW9kZWwgPSBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCA/IFRhYmxlTW9kZWxbRmlsdGVyc10gOiBuZXZlcj4ocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cDxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtGaWx0ZXJzXT4gOiBuZXZlciwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBGaWx0ZXJzLFxuICAgICAgICBwcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IGtleW9mIEZpbHRlck1vZGVsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXBVbnNhZmU8RmlsdGVyTW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KHByb3BlcnR5OiBzdHJpbmcsIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZT4sIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPihwcm9wZXJ0eSwge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5OiBvcHRpb25zVmFsdWVQcm9wZXJ0eVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW08RW51bT4ocHJvcGVydHk6IEZpbHRlcnMsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bSA9IEVudW1Db25zdGFudFR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcihwcm9wZXJ0eSwgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbihwcm9wZXJ0eTogRXh0cmFjdDxGaWx0ZXJzLCBrZXlvZiBUYWJsZU1vZGVsPiwgZm9yY2VTaW1wbGUgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgZm9yY2VTaW1wbGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zKC4uLnByb3BlcnRpZXM6IEV4dHJhY3Q8RmlsdGVycywga2V5b2YgVGFibGVNb2RlbD5bXSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLihwcm9wZXJ0aWVzIGFzIHN0cmluZ1tdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJzRnJvbUNvbHVtbnNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckZyb21Db2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZywgZm9yY2VTaW1wbGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYE5vIGNvbHVtbiBmb3VuZCBmb3IgZmlsdGVyIHByb3BlcnR5IFwiJHtwcm9wZXJ0eX1cImApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckZyb21Db2x1bW5EZXNjcmlwdG9yVW5zYWZlKGNvbHVtbiwgZm9yY2VTaW1wbGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZTxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWU+KFxuICAgICAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPixcbiAgICAgICAgZm9yY2VTaW1wbGUgPSBmYWxzZVxuICAgICk6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGxldCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPihjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICBsZXQgZmlsdGVyVHlwZTogRmlsdGVyVHlwZUVudW07XG5cbiAgICAgICAgc3dpdGNoIChjb2x1bW4uY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICBpZiAoIWZvcmNlU2ltcGxlICYmIGNvbHVtbi5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IoY29sdW1uLnByb3BlcnR5LCBjb2x1bW4uZW51bSk7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckRlc2NyaXB0b3IuYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zID0gY29sdW1uLmRpc3BsYXlGb3JtYXQ/LnNwbGl0KCcuJyk/LlsxXT8uc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zICYmIGRpc3BsYXlGb3JtYXRGcmFjdGlvbnMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3Iud2l0aE51bWJlckZyYWN0aW9ucyhwYXJzZUludChkaXNwbGF5Rm9ybWF0RnJhY3Rpb25zWzBdKSwgcGFyc2VJbnQoZGlzcGxheUZvcm1hdEZyYWN0aW9uc1sxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBjb2x1bW4uZGlzcGxheUZvcm1hdDtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGlzcGxheUZvcm1hdCA9IGZyb21Bbmd1bGFyRGF0ZUZvcm1hdFRvUHJpbWUoZGlzcGxheUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGltZSA9IGFuZ3VsYXJEYXRlRm9ybWF0SGFzVGltZShkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNTZWNvbmRzID0gYW5ndWxhckRhdGVGb3JtYXRIYXNTZWNvbmRzKGRpc3BsYXlGb3JtYXQpO1xuICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3Iud2l0aERhdGVGb3JtYXQoZmlsdGVyRGlzcGxheUZvcm1hdCwgaGFzVGltZSwgaGFzU2Vjb25kcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyRGVzY3JpcHRvcik7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXI8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBGaWx0ZXJzLCBmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIGlmIChmaWx0ZXIucHJvcGVydHkgIT09IHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBwcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCIgYW5kIEZpbHRlciBkZXNjcmlwdG9yIHByb3BlcnR5IFwiJHtmaWx0ZXIucHJvcGVydHl9XCIgZG8gbm90IG1hdGNoLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IFRhYmxlU2l6ZUVudW0gPSBUYWJsZVNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYWJsZUZ1bGxIZWlnaHRPZmZzZXQodGFibGVGdWxsSGVpZ2h0T2Zmc2V0OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGFibGVGdWxsSGVpZ2h0T2Zmc2V0ID0gdGFibGVGdWxsSGVpZ2h0T2Zmc2V0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0hlaWdodChyb3dIZWlnaHQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSG92ZXIoaG92ZXI6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzSG92ZXIgPSBob3ZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHcmlkbGluZXMoZ3JpZGxpbmVzOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0dyaWRsaW5lcyA9IGdyaWRsaW5lcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgZW5hYmxlcy9kaXNhYmxlZCBjb2x1bW4gcmVzaXplIGZlYXR1cmUgd2l0aCBjb2x1bW5SZXNpemVNb2RlIG9uIGFsbCBjb2x1bW5zLlxuICAgICAqIEBwYXJhbSByZXNpemFibGVDb2x1bW5zIFRydWUgaWYgZW5hYmxlZFxuICAgICAqIEBwYXJhbSBjb2x1bW5SZXNpemVNb2RlICdmaXQnIG9yICdleHBhbmQnIG1vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNSZXNpemFibGUocmVzaXphYmxlQ29sdW1ucyA9IHRydWUsIGNvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZml0Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zID0gcmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgdGhpcy5fY29sdW1uUmVzaXplTW9kZSA9IGNvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY29sdW1uIHRvICh1bilmcm96ZW4uXG4gICAgICogQHBhcmFtIHNlbGVjdGlvbkNvbHVtbkZyb3plbiBUcnVlIHRvIGZyZWV6ZSBzZWxlY3Rpb24gY29sdW1uLCBmYWxzZSB0byB1bmZyZWV6ZSBpdC5cbiAgICAgKiBAcGFyYW0gYWN0aW9uQ29sdW1uRnJvemVuIFRydWUgdG8gZnJlZXplIGFjdGlvbiBjb2x1bW4sIGZhbHNlIHRvIHVuZnJlZXplIGl0LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uRnJvemVuKHNlbGVjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW4sIGFjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuID0gc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICB0aGlzLl9hY3Rpb25Db2x1bW5Gcm96ZW4gPSBhY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm93Q2xhc3NOYW1lKHJvd0NsYXNzTmFtZT86IHN0cmluZywgY2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVGFibGVNb2RlbCkgPT4gc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzTmFtZSA9IHJvd0NsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3NOYW1lTWFwRm4gPSBjbGFzc05hbWVNYXBGbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIZWFkZXJDbGFzc05hbWUoaGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVhZGVyQ2xhc3NOYW1lID0gaGVhZGVyQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXplZCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0V4cGFuZGFibGUocHJvcGVydHk/OiBrZXlvZiBUYWJsZU1vZGVsLCBjb2xTcGFuPzogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sU3Bhbikge1xuICAgICAgICAgICAgdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW4gPSBjb2xTcGFuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhSb3dSZW9yZGVyYWJsZShyZW9yZGFibGUgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3Jvd1Jlb3JkZXJhYmxlID0gcmVvcmRhYmxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnksIGFueSwgYW55Pikge1xuICAgICAgICBvYmouX3RpdGxlID0gdGhpcy5fdGl0bGU7XG4gICAgICAgIG9iai5faGlkZUhlYWRlciA9IHRoaXMuX2hpZGVIZWFkZXI7XG4gICAgICAgIG9iai5fdHJhY2tQcm9wZXJ0eSA9IHRoaXMuX3RyYWNrUHJvcGVydHk7XG4gICAgICAgIG9iai5fZmlsdGVycyA9IHRoaXMuX2ZpbHRlcnMubWFwKGYgPT4gZi5jb3B5KCkpO1xuICAgICAgICBvYmouX3NvcnRzID0gdGhpcy5fc29ydHMubWFwKHMgPT4gcy5jb3B5KCkpO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5fc2l6ZTtcbiAgICAgICAgb2JqLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQgPSB0aGlzLl90YWJsZUZ1bGxIZWlnaHRPZmZzZXQ7XG4gICAgICAgIG9iai5fcm93SGVpZ2h0ID0gdGhpcy5fcm93SGVpZ2h0O1xuICAgICAgICBvYmouX2hhc0hvdmVyID0gdGhpcy5faGFzSG92ZXI7XG4gICAgICAgIG9iai5faGFzR3JpZGxpbmVzID0gdGhpcy5faGFzR3JpZGxpbmVzO1xuICAgICAgICBvYmouX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgICAgICBvYmouX2NvbHVtblJlc2l6ZU1vZGUgPSB0aGlzLl9jb2x1bW5SZXNpemVNb2RlO1xuICAgICAgICBvYmouX2FjdGlvbkNvbHVtbkZyb3plbiA9IHRoaXMuX2FjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgb2JqLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4gPSB0aGlzLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIG9iai5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgb2JqLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICBvYmouX3BhZ2luYXRpb25Nb2RlID0gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIG9iai5fcm93c1BlclBhZ2VPcHRpb25zID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGUgPSB0aGlzLl9yb3dFeHBhbmRhYmxlO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW47XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZVByb3BlcnR5ID0gdGhpcy5fcm93RXhwYW5kYWJsZVByb3BlcnR5O1xuICAgICAgICBvYmouX3Jvd1Jlb3JkZXJhYmxlID0gdGhpcy5fcm93UmVvcmRlcmFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCBleHRlbmRzIFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfc29ydENvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERTtcbiAgICBwcml2YXRlIF9maWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2NvbHVtbnM6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwudGl0bGVQcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFRpdGxlKG1vZGVsLnRpdGxlUHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGV4Y2x1ZGVkIGNvbHVtbnMgd2hlbiBnZW5lcmF0aW5nIGRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0gZXhjbHVkZWRDb2x1bW4gbmFtZXMgb2YgZXhjbHVkZWQgY29sdW1uc1xuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0V4Y2x1ZGVkKGV4Y2x1ZGVkQ29sdW1uOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9leGNsdWRlZENvbHVtbnMgPSBleGNsdWRlZENvbHVtbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBjb2x1bW4gcHJvcGVydGllcyBvbiB3aGljaCBzb3J0IGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBzb3J0Q29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBzb3J0T25Db2x1bW5zIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBzb3J0Q29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgc29ydCwgRVhDTFVERSBnaXZlbiBjb2x1bW5zIHdpbGwgTk9UIGhhdmUgc29ydFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc1NvcnQoc29ydE9uQ29sdW1uczogc3RyaW5nW10sIHNvcnRDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1uTW9kZSA9IHNvcnRDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1ucyA9IHNvcnRPbkNvbHVtbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggZmlsdGVyIGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBmaWx0ZXJDb2x1bW5Nb2RlXG4gICAgICogQHBhcmFtIGZpbHRlck9uQ29sdW1uIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBmaWx0ZXJDb2x1bW5Nb2RlIElOQ0xVREVfT05MWSAoZGVmYXVsdCkgb25seSBnaXZlbiBjb2x1bW5zIHdpbGwgaGF2ZSBmaWx0ZXIsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIGZpbHRlclxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0ZpbHRlcihmaWx0ZXJPbkNvbHVtbjogc3RyaW5nW10sIGZpbHRlckNvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPSBmaWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5zID0gZmlsdGVyT25Db2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgZ2l2ZW4gdHlwZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGUgY3VzdG9tIHR5cGUgZm9yIGNvbHVtblxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBjdXN0b20gY29sdW1uIHZhbHVlIGRpc3BsYXkgdHlwZVxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uIGFyZ3VtZW50cyBmb3IgY29sdW1uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5QcmVzZXRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBwcm9wZXJ0eSA9PT0gY29sLnByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSkud2l0aFRpdGxlKHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLmFzVHlwZSh0eXBlLCBkaXNwbGF5VHlwZSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB0aXRsZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlIGNvbHVtbidzIHRpdGxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5UaXRsZShwcm9wZXJ0eTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKHRpdGxlLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbnMgZGVmaW5lZCBvbiB0YWJsZSBiYXNlZCBvbiBkYXRhIGZldGNoZWQgZnJvbSBhcGlcbiAgICAgKiBAcGFyYW0gZGF0YSBkYXRhIGZyb20gYXBpXG4gICAgICovXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yRnJvbURhdGEoZGF0YTogRGF0YUxpc3RSZXN1bHQpOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgICAgICBjb25zdCB0YWJsZURlc2NyaXB0b3IgPSB0aGlzLnRvVGFibGVEZXNjcmlwdG9yKCk7XG5cbiAgICAgICAgaWYgKGRhdGEuZGF0YSA9PSBudWxsIHx8IGRhdGEuZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE1vZGVsID0gZGF0YS5kYXRhWzBdO1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gZmxhdHRlbk9iamVjdEtleXMob2JqZWN0TW9kZWwpXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXRoaXMuX2V4Y2x1ZGVkQ29sdW1ucy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpOyAvL2V4Y2x1ZGUgYXJyYXlzIGFuZCBzZXRzXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3QgbWV0YUNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBrZXkpO1xuICAgICAgICAgICAgbGV0IGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT47XG4gICAgICAgICAgICBpZiAobWV0YUNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YUNvbHVtbi52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBtZXRhQ29sdW1uLnRvQ29sdW1uRGVzY3JpcHRvcigpO1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci53aXRoQ29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRhYmxlRGVzY3JpcHRvci5hZGRDb2x1bW4oa2V5KS53aXRoVGl0bGUoa2V5KTtcbiAgICAgICAgICAgICAgICBjb2x1bW5Ub0RhdGVOdW1iZXJPckJvb2xlYW4oY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5ICYmICFjb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoJ3JldicpKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLndpdGhUaXRsZShbdGhpcy5tb2RlbC5pMThuQmFzZUtleSwgJ3Byb3BlcnRpZXMnLCBjb2x1bW4ucHJvcGVydHldLmpvaW4oJy4nKS5yZXBsYWNlKCdzdGF0ZS4nLCAnJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T2ZTb3J0Q29sdW1ucyA9IHRoaXMuX3NvcnRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mU29ydENvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZICYmIGVsZW1lbnRPZlNvcnRDb2x1bW5zKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLndpdGhTb3J0VW5zYWZlKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPZkZpbHRlckNvbHVtbnMgPSB0aGlzLl9maWx0ZXJDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgKCh0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mRmlsdGVyQ29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mRmlsdGVyQ29sdW1ucykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3IuYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmUoY29sdW1uLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgdG8gdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFZpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiB0YWJsZSBkeW5hbWljIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QodGhpcy5tb2RlbC5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoYyA9PiBjLmNvcHkoKSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2V4Y2x1ZGVkQ29sdW1ucyA9IFsuLi50aGlzLl9leGNsdWRlZENvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJDb2x1bW5zID0gWy4uLnRoaXMuX2ZpbHRlckNvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1ucyA9IFsuLi50aGlzLl9zb3J0Q29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckNvbHVtbk1vZGUgPSB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1uTW9kZSA9IHRoaXMuX3NvcnRDb2x1bW5Nb2RlO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9UYWJsZURlc2NyaXB0b3IoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4odGhpcy5tb2RlbCk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=
658
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsb0JBQW9CLEVBQTJFLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0osT0FBTyxFQUFDLGdCQUFnQixFQUF5QixzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUcxSixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQXdCLGNBQWMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRzdFLE9BQU8sRUFBQywyQkFBMkIsRUFBMkIsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUcsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE1BQU0sT0FBTyxtQkFBbUI7SUFxRDVCLFlBQW1CLEtBQWtDLEVBQUUsYUFBYSxHQUFHLEtBQUs7UUExQ2xFLGFBQVEsR0FBNkMsRUFBRSxDQUFDO1FBRTFELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGlCQUFZLEdBQWtCLGVBQWUsQ0FBQztRQUV0RCxRQUFRO1FBQ0EsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFPckMsVUFBVTtRQUNGLFVBQUssR0FBa0IsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMzQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBT3hCLGdCQUFnQjtRQUNSLGFBQVEsR0FBd0MsRUFBRSxDQUFDO1FBQ25ELFdBQU0sR0FB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QVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNhLElBQUk7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsVUFBVSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxVQUFVLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDdEQsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBEYXRhTGlzdFJlc3VsdCwgRW51bUNvbnN0YW50VHlwZSwgSUxvb2t1cERhdGFQcm92aWRlciwgSVRhYmxlRGVzY3JpcHRvciwgZmxhdHRlbk9iamVjdEtleXN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckRpc3BsYXlUeXBlRW51bSwgRmlsdGVyTG9va3VwRGVzY3JpcHRvciwgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IsIEZpbHRlclR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBNb2RlbERlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge2NvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbn0gZnJvbSAnLi4vaGVscGVycy9jbGFzcy1hdHRyaWJ1dGUtY29udmVydGVyJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQge0lSb3dFeHBhbmRhYmxlQ29tcG9uZW50fSBmcm9tICcuLi9tb2RlbHMvcm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7SUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7VGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLCBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSwgVGFibGVTaXplRW51bX0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvciwgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3J9IGZyb20gJy4vY29sdW1uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtTb3J0RGVzY3JpcHRvcn0gZnJvbSAnLi9zb3J0LmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cyA9IGtleW9mIFRhYmxlTW9kZWwsIEZpbHRlcnMgPSBrZXlvZiBUYWJsZU1vZGVsPlxuICAgIGltcGxlbWVudHMgSVRhYmxlRGVzY3JpcHRvcjxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4sIElDb2x1bW5zTWFuYWdlSW50ZXJmYWNlPFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPlxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VGFibGVNb2RlbD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hdXRvR2VuZXJhdGVkO1xuXG4gICAgcHJpdmF0ZSBfaWRlbnRpZmllcj86IHN0cmluZztcbiAgICBwcml2YXRlIF90cmFja1Byb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3BhZ2luYXRpb25Nb2RlPzogVGFibGVQYWdpbmF0aW9uTW9kZUVudW07XG4gICAgcHJpdmF0ZSBfcm93c1BlclBhZ2VPcHRpb25zPzogbnVtYmVyW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdE51bVJvd3M/OiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9jb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD4+ID0gW107XG4gICAgcHJpdmF0ZSBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaGlkZUhlYWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvYWRpbmdUZXh0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xvYWRpbmdJY29uOiBzdHJpbmcgfCBudWxsID0gJ3BpIHBpLXNwaW5uZXInO1xuXG4gICAgLy8gZXh0cmFcbiAgICBwcml2YXRlIF9oYXNIb3ZlciA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGFzR3JpZGxpbmVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaGFzUmVzaXphYmxlQ29sdW1ucyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbHVtblJlc2l6ZU1vZGU/OiAnZml0JyB8ICdleHBhbmQnO1xuXG4gICAgLy8gc3BlY2lhbCBjb2x1bW5zXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9hY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuO1xuXG4gICAgLy8gc3R5bGluZ1xuICAgIHByaXZhdGUgX3NpemU6IFRhYmxlU2l6ZUVudW0gPSBUYWJsZVNpemVFbnVtLkxhcmdlO1xuICAgIHByaXZhdGUgX2NsYXNzTmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX2hlYWRlckNsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcm93Q2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVGFibGVNb2RlbCkgPT4gc3RyaW5nO1xuICAgIHByaXZhdGUgX3RhYmxlRnVsbEhlaWdodE9mZnNldD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9yb3dIZWlnaHQ/OiBudW1iZXI7XG5cbiAgICAvLyBmaWx0ZXJzJnNvcnRzXG4gICAgcHJpdmF0ZSBfZmlsdGVyczogRmlsdGVyRGVzY3JpcHRvcjxhbnksIFRhYmxlTW9kZWw+W10gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0czogU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD5bXSA9IFtdO1xuXG4gICAgLy8gbG9jYWxpemF0aW9uXG4gICAgcHJpdmF0ZSBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8vIHJvdyBleHBhbmRcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZUNvbFNwYW4gPSAxMDA7XG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVDb21wb25lbnRUeXBlPzogVHlwZTxJUm93RXhwYW5kYWJsZUNvbXBvbmVudDxUYWJsZU1vZGVsPj47XG5cbiAgICAvLyByb3cgcmVvcmRlclxuICAgIHByaXZhdGUgX3Jvd1Jlb3JkZXJhYmxlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPiwgYXV0b0dlbmVyYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RyYWNrUHJvcGVydHkgPSB0aGlzLl9tb2RlbC5pZFByb3BlcnR5O1xuICAgICAgICB0aGlzLl9hdXRvR2VuZXJhdGVkID0gYXV0b0dlbmVyYXRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZGVudGlmaWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHJhY2tQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNrUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYWdpbmF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25Nb2RlO1xuICAgIH1cblxuICAgIGdldCByb3dzUGVyUGFnZU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHROdW1Sb3dzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE51bVJvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1RleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdJY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGVGdWxsSGVpZ2h0T2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVGdWxsSGVpZ2h0T2Zmc2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNIb3ZlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0dyaWRsaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc2l6YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uUmVzaXplTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dSZW9yZGVyYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlQ29sU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGFibGUgbW9kZWwgcHJvcGVydHkgdGVsbHMgdXMgaWYgdGhlIHNwZWNpZmljIHJvdyBzaG91bGQgYmUgZXhwYW5kYWJsZSBvciBub3QgYmFzZWQgb24gcm93IGl0ZW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0V4cGFuZGFibGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBjdXN0b20gY29tcG9uZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZXhwYW5kZWQgcm93LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFjayBwcm9wZXJ0eSBpcyB1c2VkIGZvciB0aGUgcHVycG9zZSBvZiBjb21iaW5lZCBzYXZpbmcgdXNlciBwcmVmZXJlbmNlcyBpbiBsb2NhbHN0b3JhZ2UgaWYgMiB0YWJsZXMgaGF2ZSB0aGUgc2FtZSB0cmFjayBwcm9wZXJ0aWVzIHRoZXkgd2lsbCBzaGFyZSB0aGUgc2FtZSBsb2NhbHN0b3JhZ2UgZW50cnkuXG4gICAgICogU2ltaWxhcmx5LCB0aGlzIHByb3BlcnR5IGNhbiBhbHNvIGJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0d28gdGFibGVzIG9mIHRoZSBzYW1lIG1vZGVsIG9uIHRoZSBzYW1lIHVybCAoc28gdGhhdCB0aGV5IGhhdmUgc2VwYXJhdGUgZW50cmllcyBpbiBsb2NhbHN0b3JhZ2UpLlxuICAgICAqIEBwYXJhbSBpZGVudGlmaWVyXG4gICAgICovXG4gICAgcHVibGljIHdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUcmFja1Byb3BlcnR5KHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90cmFja1Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxlTW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNvbHVtbihwcm9wZXJ0eToga2V5b2YgVGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5JZHggPSB0aGlzLl9jb2x1bW5zLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5zcGxpY2UoY29sdW1uSWR4LCAxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW48UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsPihwcm9wZXJ0eTogUHJvcGVydHlLZXkpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+LCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENvbHVtbkVudW08UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+Pihwcm9wZXJ0eTogUHJvcGVydHlLZXksIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPikge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgY29sdW1uLmFzRW51bVVuc2FmZShlbnVtRGVzYyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDb2x1bW5VbnNhZmU8Q29sdW1uTW9kZWwgPSB1bmtub3duPihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxlTW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRDb2x1bW4ocCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbHVtbkRlc2NyaXB0b3JzKC4uLmRlc2NyaXB0b3JzOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD5bXSk6IHRoaXMge1xuICAgICAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGQgPT4gdGhpcy53aXRoQ29sdW1uKGQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQYWdpbmF0aW9uTW9kZShwYWdpbmF0aW9uTW9kZTogVGFibGVQYWdpbmF0aW9uTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbk1vZGUgPSBwYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dzUGVyUGFnZShyb3dzOiBudW1iZXIsIG9wdGlvbnM/OiBBcnJheTxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHROdW1Sb3dzID0gcm93cztcbiAgICAgICAgdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRlSGVhZGVyKGhpZGVIZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hpZGVIZWFkZXIgPSBoaWRlSGVhZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvYWRpbmcodGV4dD86IHN0cmluZywgaWNvbj86IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ1RleHQgPSB0ZXh0O1xuICAgICAgICB0aGlzLl9sb2FkaW5nSWNvbiA9IGljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1zcGlubmVyJyA6IGljb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBtZXRob2QgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHJlb3JkZXJhYmxlIHByb3BlcnR5IG9uIGFsbCBjb2x1bW5zIGN1cnJlbnRseSBpbiB0aGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gY29sdW1uc1Jlb3JkZXJhYmxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFJlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZXMgdG9nZ2xlYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGNvbHVtbnNUb2dnbGVhYmxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1RvZ2dsZWFibGUoY29sdW1uc1RvZ2dsZWFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29sLndpdGhUb2dnbGVhYmxlKGNvbHVtbnNUb2dnbGVhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRzLmZpbmQocyA9PiBzLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU29ydChwcm9wZXJ0eTogU29ydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydElkeCA9IHRoaXMuX3NvcnRzLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fc29ydHMuc3BsaWNlKHNvcnRJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVyTWF4ID0gdGhpcy5fc29ydHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5kZWZhdWx0SXNFbmFibGVkKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgcykgPT4gKHMuZGVmYXVsdE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcy5kZWZhdWx0T3JkZXIgPiBhY2MgPyBzLmRlZmF1bHRPcmRlciA6IGFjYyksIC0xKTtcbiAgICAgICAgICAgIHNvcnQud2l0aERlZmF1bHRTb3J0KHRydWUsIGFzY2VuZGluZywgZGVmYXVsdE9yZGVyTWF4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydHMucHVzaChzb3J0KTtcbiAgICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSwgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KHByb3BlcnR5OiBTb3J0cywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhEZWZhdWx0U29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGFzY2VuZGluZywgb3JkZXIsIGVuYWJsZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgYXNjZW5kaW5nPzogYm9vbGVhbiwgb3JkZXI/OiBudW1iZXIsIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIGxldCBzb3J0ID0gdGhpcy5fc29ydHMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFzb3J0KSB7XG4gICAgICAgICAgICBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yKHByb3BlcnR5KTtcbiAgICAgICAgICAgIHRoaXMuX3NvcnRzLnB1c2goc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgc29ydC53aXRoRGVmYXVsdFNvcnQoZW5hYmxlZCA/PyB0cnVlLCBhc2NlbmRpbmcsIG9yZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3J0cyguLi5wcm9wZXJ0aWVzOiBTb3J0c1tdKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTb3J0c1Vuc2FmZSguLi4ocHJvcGVydGllcyBhcyBzdHJpbmdbXSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU29ydHNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ydHMucHVzaChuZXcgU29ydERlc2NyaXB0b3IocCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbHRlcihwcm9wZXJ0eTogRmlsdGVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGaWx0ZXIocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpbHRlclVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcklkeCA9IHRoaXMuX2ZpbHRlcnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnNwbGljZShmaWx0ZXJJZHgsIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXI8RmlsdGVyTW9kZWwgPSBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCA/IFRhYmxlTW9kZWxbRmlsdGVyc10gOiBuZXZlcj4ocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cDxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtGaWx0ZXJzXT4gOiBuZXZlciwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBGaWx0ZXJzLFxuICAgICAgICBwcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IGtleW9mIEZpbHRlck1vZGVsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXBVbnNhZmU8RmlsdGVyTW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KHByb3BlcnR5OiBzdHJpbmcsIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZT4sIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPihwcm9wZXJ0eSwge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5OiBvcHRpb25zVmFsdWVQcm9wZXJ0eVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW08RW51bT4ocHJvcGVydHk6IEZpbHRlcnMsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bSA9IEVudW1Db25zdGFudFR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcihwcm9wZXJ0eSwgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbihwcm9wZXJ0eTogRXh0cmFjdDxGaWx0ZXJzLCBrZXlvZiBUYWJsZU1vZGVsPiwgZGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sIGZvcmNlU2ltcGxlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGRpc3BsYXlUeXBlLCBmb3JjZVNpbXBsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWx0ZXJzRnJvbUNvbHVtbnMoLi4ucHJvcGVydGllczogRXh0cmFjdDxGaWx0ZXJzLCBrZXlvZiBUYWJsZU1vZGVsPltdKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJzRnJvbUNvbHVtbnNVbnNhZmUoLi4uKHByb3BlcnRpZXMgYXMgc3RyaW5nW10pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbHRlcnNGcm9tQ29sdW1uc1Vuc2FmZSguLi5wcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEZpbHRlckZyb21Db2x1bW5VbnNhZmUocCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSwgZm9yY2VTaW1wbGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtblVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYE5vIGNvbHVtbiBmb3VuZCBmb3IgZmlsdGVyIHByb3BlcnR5IFwiJHtwcm9wZXJ0eX1cImApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmUoY29sdW1uLCBmb3JjZVNpbXBsZSk7XG4gICAgICAgIGlmIChkaXNwbGF5VHlwZSAhPSBudWxsKSBmaWx0ZXIud2l0aERpc3BsYXlUeXBlKGRpc3BsYXlUeXBlKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmU8Q29sdW1uTW9kZWwsIENvbHVtblZhbHVlPihcbiAgICAgICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4sXG4gICAgICAgIGZvcmNlU2ltcGxlID0gZmFsc2VcbiAgICApOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD4ge1xuICAgICAgICBsZXQgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD4oY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgbGV0IGZpbHRlclR5cGU6IEZpbHRlclR5cGVFbnVtO1xuXG4gICAgICAgIHN3aXRjaCAoY29sdW1uLmNvbHVtblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkJvb2xlYW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkRhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkVudW06XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JjZVNpbXBsZSAmJiBjb2x1bW4uZW51bSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yKGNvbHVtbi5wcm9wZXJ0eSwgY29sdW1uLmVudW0pO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uU3RyaW5nOlxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmFzRmlsdGVyVHlwZShmaWx0ZXJUeXBlKTtcbiAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIgfHwgZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkgJiYgY29sdW1uLmRpc3BsYXlGb3JtYXQpIHtcbiAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3Iud2l0aERpc3BsYXlGb3JtYXQoY29sdW1uLmRpc3BsYXlGb3JtYXQsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlckRlc2NyaXB0b3IpO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyPEZpbHRlck1vZGVsPihwcm9wZXJ0eTogRmlsdGVycywgZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICBpZiAoZmlsdGVyLnByb3BlcnR5ICE9PSBwcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBGaWx0ZXIgcHJvcGVydHkgXCIke3Byb3BlcnR5fVwiIGFuZCBGaWx0ZXIgZGVzY3JpcHRvciBwcm9wZXJ0eSBcIiR7ZmlsdGVyLnByb3BlcnR5fVwiIGRvIG5vdCBtYXRjaC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2l6ZShzaXplOiBUYWJsZVNpemVFbnVtID0gVGFibGVTaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGFibGVGdWxsSGVpZ2h0T2Zmc2V0KHRhYmxlRnVsbEhlaWdodE9mZnNldDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dIZWlnaHQocm93SGVpZ2h0OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhvdmVyKGhvdmVyOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0hvdmVyID0gaG92ZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR3JpZGxpbmVzKGdyaWRsaW5lczogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNHcmlkbGluZXMgPSBncmlkbGluZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGVuYWJsZXMvZGlzYWJsZWQgY29sdW1uIHJlc2l6ZSBmZWF0dXJlIHdpdGggY29sdW1uUmVzaXplTW9kZSBvbiBhbGwgY29sdW1ucy5cbiAgICAgKiBAcGFyYW0gcmVzaXphYmxlQ29sdW1ucyBUcnVlIGlmIGVuYWJsZWRcbiAgICAgKiBAcGFyYW0gY29sdW1uUmVzaXplTW9kZSAnZml0JyBvciAnZXhwYW5kJyBtb2RlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zUmVzaXphYmxlKHJlc2l6YWJsZUNvbHVtbnMgPSB0cnVlLCBjb2x1bW5SZXNpemVNb2RlOiAnZml0JyB8ICdleHBhbmQnID0gJ2ZpdCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzUmVzaXphYmxlQ29sdW1ucyA9IHJlc2l6YWJsZUNvbHVtbnM7XG4gICAgICAgIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGUgPSBjb2x1bW5SZXNpemVNb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGNvbHVtbiB0byAodW4pZnJvemVuLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rpb25Db2x1bW5Gcm96ZW4gVHJ1ZSB0byBmcmVlemUgc2VsZWN0aW9uIGNvbHVtbiwgZmFsc2UgdG8gdW5mcmVlemUgaXQuXG4gICAgICogQHBhcmFtIGFjdGlvbkNvbHVtbkZyb3plbiBUcnVlIHRvIGZyZWV6ZSBhY3Rpb24gY29sdW1uLCBmYWxzZSB0byB1bmZyZWV6ZSBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbkZyb3plbihzZWxlY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuLCBhY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbHVtbkZyb3plbiA9IHNlbGVjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuID0gYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvd0NsYXNzTmFtZShyb3dDbGFzc05hbWU/OiBzdHJpbmcsIGNsYXNzTmFtZU1hcEZuPzogKGNsYXNzTmFtZT86IHN0cmluZywgaXRlbT86IFRhYmxlTW9kZWwpID0+IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dDbGFzc05hbWUgPSByb3dDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuID0gY2xhc3NOYW1lTWFwRm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSGVhZGVyQ2xhc3NOYW1lKGhlYWRlckNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hlYWRlckNsYXNzTmFtZSA9IGhlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2NhbGl6ZWQoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eShsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3dFeHBhbmRhYmxlKHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCwgY29sU3Bhbj86IG51bWJlciwgY29tcG9uZW50VHlwZT86IFR5cGU8SVJvd0V4cGFuZGFibGVDb21wb25lbnQ8VGFibGVNb2RlbD4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sU3Bhbikge1xuICAgICAgICAgICAgdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW4gPSBjb2xTcGFuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFJvd1Jlb3JkZXJhYmxlKHJlb3JkYWJsZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fcm93UmVvcmRlcmFibGUgPSByZW9yZGFibGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueSwgYW55LCBhbnk+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgb2JqLl90cmFja1Byb3BlcnR5ID0gdGhpcy5fdHJhY2tQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9maWx0ZXJzID0gdGhpcy5fZmlsdGVycy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIG9iai5fc29ydHMgPSB0aGlzLl9zb3J0cy5tYXAocyA9PiBzLmNvcHkoKSk7XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX3NpemUgPSB0aGlzLl9zaXplO1xuICAgICAgICBvYmouX3RhYmxlRnVsbEhlaWdodE9mZnNldCA9IHRoaXMuX3RhYmxlRnVsbEhlaWdodE9mZnNldDtcbiAgICAgICAgb2JqLl9yb3dIZWlnaHQgPSB0aGlzLl9yb3dIZWlnaHQ7XG4gICAgICAgIG9iai5faGFzSG92ZXIgPSB0aGlzLl9oYXNIb3ZlcjtcbiAgICAgICAgb2JqLl9oYXNHcmlkbGluZXMgPSB0aGlzLl9oYXNHcmlkbGluZXM7XG4gICAgICAgIG9iai5faGFzUmVzaXphYmxlQ29sdW1ucyA9IHRoaXMuX2hhc1Jlc2l6YWJsZUNvbHVtbnM7XG4gICAgICAgIG9iai5fY29sdW1uUmVzaXplTW9kZSA9IHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIG9iai5fYWN0aW9uQ29sdW1uRnJvemVuID0gdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICBvYmouX3NlbGVjdGlvbkNvbHVtbkZyb3plbiA9IHRoaXMuX3NlbGVjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgb2JqLl9pc0xvY2FsaXplZCA9IHRoaXMuX2lzTG9jYWxpemVkO1xuICAgICAgICBvYmouX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgICAgIG9iai5fcGFnaW5hdGlvbk1vZGUgPSB0aGlzLl9wYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgb2JqLl9yb3dzUGVyUGFnZU9wdGlvbnMgPSB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZSA9IHRoaXMuX3Jvd0V4cGFuZGFibGU7XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZUNvbFNwYW4gPSB0aGlzLl9yb3dFeHBhbmRhYmxlQ29sU3BhbjtcbiAgICAgICAgb2JqLl9yb3dFeHBhbmRhYmxlUHJvcGVydHkgPSB0aGlzLl9yb3dFeHBhbmRhYmxlUHJvcGVydHk7XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUgPSB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZTtcbiAgICAgICAgb2JqLl9yb3dSZW9yZGVyYWJsZSA9IHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPih0aGlzLm1vZGVsLmNvcHkoKSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QgZXh0ZW5kcyBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgIHByaXZhdGUgX2V4Y2x1ZGVkQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX2ZpbHRlckNvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0Q29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9jb2x1bW5zOiBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcltdID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxhbnk+KSB7XG4gICAgICAgIHN1cGVyKG1vZGVsKTtcblxuICAgICAgICBpZiAodHlwZW9mIG1vZGVsLnRpdGxlUHJvcGVydHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhUaXRsZShtb2RlbC50aXRsZVByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBleGNsdWRlZCBjb2x1bW5zIHdoZW4gZ2VuZXJhdGluZyBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIGV4Y2x1ZGVkQ29sdW1uIG5hbWVzIG9mIGV4Y2x1ZGVkIGNvbHVtbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNFeGNsdWRlZChleGNsdWRlZENvbHVtbjogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZXhjbHVkZWRDb2x1bW5zID0gZXhjbHVkZWRDb2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggc29ydCBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gc29ydENvbHVtbk1vZGVcbiAgICAgKiBAcGFyYW0gc29ydE9uQ29sdW1ucyBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gc29ydENvbHVtbk1vZGUgSU5DTFVERV9PTkxZIChkZWZhdWx0KSBvbmx5IGdpdmVuIGNvbHVtbnMgd2lsbCBoYXZlIHNvcnQsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIHNvcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNTb3J0KHNvcnRPbkNvbHVtbnM6IHN0cmluZ1tdLCBzb3J0Q29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbk1vZGUgPSBzb3J0Q29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fc29ydENvbHVtbnMgPSBzb3J0T25Db2x1bW5zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGNvbHVtbiBwcm9wZXJ0aWVzIG9uIHdoaWNoIGZpbHRlciBpcyBkZWZpbmVkIG9yIG5vdCBkZXBlbmRpbmcgb24gZmlsdGVyQ29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBmaWx0ZXJPbkNvbHVtbiBjb2x1bW4gbmFtZXNcbiAgICAgKiBAcGFyYW0gZmlsdGVyQ29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgZmlsdGVyLCBFWENMVURFIGdpdmVuIGNvbHVtbnMgd2lsbCBOT1QgaGF2ZSBmaWx0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNGaWx0ZXIoZmlsdGVyT25Db2x1bW46IHN0cmluZ1tdLCBmaWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID0gZmlsdGVyQ29sdW1uTW9kZTtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucyA9IGZpbHRlck9uQ29sdW1uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGdpdmVuIHR5cGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHkgYW5kIHJldHVybnMgdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0eXBlIGN1c3RvbSB0eXBlIGZvciBjb2x1bW5cbiAgICAgKiBAcGFyYW0gZGlzcGxheVR5cGUgY3VzdG9tIGNvbHVtbiB2YWx1ZSBkaXNwbGF5IHR5cGVcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbiBhcmd1bWVudHMgZm9yIGNvbHVtblxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uUHJlc2V0VHlwZShwcm9wZXJ0eTogc3RyaW5nLCB0eXBlOiBDb2x1bW5UeXBlRW51bSwgZGlzcGxheVR5cGU/OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpLndpdGhUaXRsZShwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5hc1R5cGUodHlwZSwgZGlzcGxheVR5cGUsIC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgdGl0bGUgdG8gY29sdW1uIHdpdGggZ2l2ZW4gcHJvcGVydHkgYW5kIHJldHVybnMgdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZSBjb2x1bW4ncyB0aXRsZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uVGl0bGUocHJvcGVydHk6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IHByb3BlcnR5ID09PSBjb2wucHJvcGVydHkpID8/IHRoaXMuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhUaXRsZSh0aXRsZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBjb2x1bW5zIGRlZmluZWQgb24gdGFibGUgYmFzZWQgb24gZGF0YSBmZXRjaGVkIGZyb20gYXBpXG4gICAgICogQHBhcmFtIGRhdGEgZGF0YSBmcm9tIGFwaVxuICAgICAqL1xuICAgIHB1YmxpYyB0b1RhYmxlRGVzY3JpcHRvckZyb21EYXRhKGRhdGE6IERhdGFMaXN0UmVzdWx0KTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICAgICAgY29uc3QgdGFibGVEZXNjcmlwdG9yID0gdGhpcy50b1RhYmxlRGVzY3JpcHRvcigpO1xuXG4gICAgICAgIGlmIChkYXRhLmRhdGEgPT0gbnVsbCB8fCBkYXRhLmRhdGEubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZURlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYmplY3RNb2RlbCA9IGRhdGEuZGF0YVswXTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGZsYXR0ZW5PYmplY3RLZXlzKG9iamVjdE1vZGVsKVxuICAgICAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF0aGlzLl9leGNsdWRlZENvbHVtbnMuaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gIUFycmF5LmlzQXJyYXkodmFsdWUpKTsgLy9leGNsdWRlIGFycmF5cyBhbmQgc2V0c1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFDb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0ga2V5KTtcbiAgICAgICAgICAgIGxldCBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+O1xuICAgICAgICAgICAgaWYgKG1ldGFDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFDb2x1bW4udmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sdW1uID0gbWV0YUNvbHVtbi50b0NvbHVtbkRlc2NyaXB0b3IoKTtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3Iud2l0aENvbHVtbihjb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSB0YWJsZURlc2NyaXB0b3IuYWRkQ29sdW1uKGtleSkud2l0aFRpdGxlKGtleSk7XG4gICAgICAgICAgICAgICAgY29sdW1uVG9EYXRlTnVtYmVyT3JCb29sZWFuKGNvbHVtbiwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pMThuQmFzZUtleSAmJiAhY29sdW1uLnByb3BlcnR5LmluY2x1ZGVzKCdyZXYnKSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoVGl0bGUoW3RoaXMubW9kZWwuaTE4bkJhc2VLZXksICdwcm9wZXJ0aWVzJywgY29sdW1uLnByb3BlcnR5XS5qb2luKCcuJykucmVwbGFjZSgnc3RhdGUuJywgJycpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9mU29ydENvbHVtbnMgPSB0aGlzLl9zb3J0Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLl9zb3J0Q29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREUgJiYgIWVsZW1lbnRPZlNvcnRDb2x1bW5zKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLl9zb3J0Q29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSAmJiBlbGVtZW50T2ZTb3J0Q29sdW1ucylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci53aXRoU29ydFVuc2FmZShjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T2ZGaWx0ZXJDb2x1bW5zID0gdGhpcy5fZmlsdGVyQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICgodGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREUgJiYgIWVsZW1lbnRPZkZpbHRlckNvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZICYmIGVsZW1lbnRPZkZpbHRlckNvbHVtbnMpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLmFkZEZpbHRlckZyb21Db2x1bW5EZXNjcmlwdG9yVW5zYWZlKGNvbHVtbiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGRzIENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHRvIHRoaXMgdGFibGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uJ3MgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBhbnkpOiBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBhbnkpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IHRoaXMuYWRkQ29sdW1uKHByb3BlcnR5KTtcbiAgICAgICAgY29sdW1uLndpdGhWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY3JlYXRlcyBkZWVwIGNvcHkgb2YgdGFibGUgZHluYW1pYyBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3Qge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICBkZXNjcmlwdG9yLl9leGNsdWRlZENvbHVtbnMgPSBbLi4udGhpcy5fZXhjbHVkZWRDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyQ29sdW1ucyA9IFsuLi50aGlzLl9maWx0ZXJDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fc29ydENvbHVtbnMgPSBbLi4udGhpcy5fc29ydENvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJDb2x1bW5Nb2RlID0gdGhpcy5fZmlsdGVyQ29sdW1uTW9kZTtcbiAgICAgICAgZGVzY3JpcHRvci5fc29ydENvbHVtbk1vZGUgPSB0aGlzLl9zb3J0Q29sdW1uTW9kZTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yKCk6IFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+KHRoaXMubW9kZWwpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxufVxuIl19
@@ -16,4 +16,5 @@ export * from './models/column-value.model';
16
16
  export * from './models/table.model';
17
17
  export * from './models/table-columns.model';
18
18
  export * from './models/table-event.model';
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsVUFBVTtBQUNWLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUVuRCxTQUFTO0FBQ1QsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkYXRhIHByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy90YWJsZS5kYXRhLXByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1wcm92aWRlcnMvdGFibGUtZGF0YS1wcm92aWRlci5mYWN0b3J5JztcblxuLy8gZGVzY3JpcHRvcnNcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9zb3J0LmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy90YWJsZS5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvdGFibGUtZGVzY3JpcHRvci5mYWN0b3J5JztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL3RhYmxlLWRlc2NyaXB0b3ItaGVscGVycyc7XG5cbi8vIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvY2xhc3MtdGFibGUtYXR0cmlidXRlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jb2x1bW4tdmFsdWUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvdGFibGUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvdGFibGUtY29sdW1ucy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90YWJsZS1ldmVudC5tb2RlbCc7XG4iXX0=
19
+ export * from './models/row-expandable-component.model';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsVUFBVTtBQUNWLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUVuRCxTQUFTO0FBQ1QsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGRhdGEgcHJvdmlkZXJzXG5leHBvcnQgKiBmcm9tICcuL2RhdGEtcHJvdmlkZXJzL3RhYmxlLmRhdGEtcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy90YWJsZS1kYXRhLXByb3ZpZGVyLmZhY3RvcnknO1xuXG4vLyBkZXNjcmlwdG9yc1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9jb2x1bW4uZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL3NvcnQuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL3RhYmxlLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy90YWJsZS1kZXNjcmlwdG9yLmZhY3RvcnknO1xuXG4vLyBoZWxwZXJzXG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvY2xhc3MtYXR0cmlidXRlLWNvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvdGFibGUtZGVzY3JpcHRvci1oZWxwZXJzJztcblxuLy8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jbGFzcy10YWJsZS1hdHRyaWJ1dGUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NvbHVtbi12YWx1ZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90YWJsZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90YWJsZS1jb2x1bW5zLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RhYmxlLWV2ZW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3Jvdy1leHBhbmRhYmxlLWNvbXBvbmVudC5tb2RlbCc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvYXBpL3NyYy9tb2RlbHMvcm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lucHV0U2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUm93RXhwYW5kYWJsZUNvbXBvbmVudDxJdGVtID0gdW5rbm93bj4ge1xuICAgIGl0ZW06IElucHV0U2lnbmFsPEl0ZW0+O1xufVxuIl19