@vendure/admin-ui 2.0.5 → 2.0.7

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 (113) hide show
  1. package/catalog/components/collection-detail/collection-detail.component.d.ts +3 -1
  2. package/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.d.ts +6 -4
  3. package/catalog/components/facet-detail/facet-detail.component.d.ts +3 -1
  4. package/catalog/components/product-detail/product-detail.component.d.ts +3 -1
  5. package/catalog/components/stock-location-detail/stock-location-detail.component.d.ts +3 -1
  6. package/core/common/utilities/custom-field-default-value.d.ts +6 -0
  7. package/core/common/version.d.ts +1 -1
  8. package/core/providers/dashboard-widget/dashboard-widget.service.d.ts +4 -1
  9. package/core/providers/data-table/data-table-filter-collection.d.ts +10 -6
  10. package/core/providers/data-table/data-table-filter.d.ts +13 -2
  11. package/core/public_api.d.ts +1 -0
  12. package/customer/components/customer-detail/customer-detail.component.d.ts +3 -1
  13. package/customer/components/customer-group-detail/customer-group-detail.component.d.ts +3 -1
  14. package/customer/components/customer-list/customer-list.component.d.ts +1 -0
  15. package/dashboard/components/dashboard/dashboard.component.d.ts +4 -1
  16. package/esm2022/catalog/components/asset-detail/asset-detail.component.mjs +3 -3
  17. package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +3 -3
  18. package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +3 -3
  19. package/esm2022/catalog/components/collection-list/collection-list.component.mjs +2 -1
  20. package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +8 -5
  21. package/esm2022/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
  22. package/esm2022/catalog/components/facet-list/facet-list.component.mjs +2 -1
  23. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +5 -5
  24. package/esm2022/catalog/components/product-list/product-list.component.mjs +2 -7
  25. package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +4 -4
  26. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +2 -7
  27. package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +7 -5
  28. package/esm2022/catalog/components/stock-location-detail/stock-location-detail.component.mjs +3 -3
  29. package/esm2022/catalog/components/stock-location-list/stock-location-list.component.mjs +2 -7
  30. package/esm2022/core/common/utilities/create-updated-translatable.mjs +5 -23
  31. package/esm2022/core/common/utilities/custom-field-default-value.mjs +28 -0
  32. package/esm2022/core/common/version.mjs +2 -2
  33. package/esm2022/core/components/channel-switcher/channel-switcher.component.mjs +3 -3
  34. package/esm2022/core/data/data.module.mjs +1 -1
  35. package/esm2022/core/providers/dashboard-widget/dashboard-widget.service.mjs +5 -5
  36. package/esm2022/core/providers/dashboard-widget/register-dashboard-widget.mjs +1 -1
  37. package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +51 -22
  38. package/esm2022/core/providers/data-table/data-table-filter.mjs +8 -1
  39. package/esm2022/core/providers/local-storage/local-storage.service.mjs +1 -1
  40. package/esm2022/core/public_api.mjs +2 -1
  41. package/esm2022/core/shared/components/affixed-input/affixed-input.component.mjs +2 -2
  42. package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +3 -3
  43. package/esm2022/core/shared/components/card/card.component.mjs +1 -1
  44. package/esm2022/core/shared/components/chip/chip.component.mjs +2 -2
  45. package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +3 -3
  46. package/esm2022/core/shared/components/data-table-filter-label/data-table-filter-label.component.mjs +3 -3
  47. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +23 -4
  48. package/esm2022/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +2 -2
  49. package/esm2022/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +2 -2
  50. package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +2 -2
  51. package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +3 -3
  52. package/esm2022/customer/components/customer-group-detail/customer-group-detail.component.mjs +3 -3
  53. package/esm2022/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.mjs +3 -2
  54. package/esm2022/customer/components/customer-group-list/customer-group-list.component.mjs +2 -1
  55. package/esm2022/customer/components/customer-list/customer-list.component.mjs +34 -30
  56. package/esm2022/dashboard/components/dashboard/dashboard.component.mjs +4 -4
  57. package/esm2022/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +1 -1
  58. package/esm2022/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
  59. package/esm2022/marketing/components/promotion-list/promotion-list.component.mjs +2 -1
  60. package/esm2022/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +5 -3
  61. package/esm2022/order/components/order-data-table/order-data-table.component.mjs +3 -3
  62. package/esm2022/order/components/order-detail/order-detail.component.mjs +15 -13
  63. package/esm2022/order/components/order-list/order-list.component.mjs +2 -1
  64. package/esm2022/settings/components/admin-detail/admin-detail.component.mjs +3 -3
  65. package/esm2022/settings/components/administrator-list/administrator-list.component.mjs +2 -1
  66. package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +10 -10
  67. package/esm2022/settings/components/channel-list/channel-list.component.mjs +2 -1
  68. package/esm2022/settings/components/country-detail/country-detail.component.mjs +3 -3
  69. package/esm2022/settings/components/country-list/country-list.component.mjs +3 -2
  70. package/esm2022/settings/components/global-settings/global-settings.component.mjs +3 -3
  71. package/esm2022/settings/components/payment-method-detail/payment-method-detail.component.mjs +3 -3
  72. package/esm2022/settings/components/payment-method-list/payment-method-list.component.mjs +2 -1
  73. package/esm2022/settings/components/profile/profile.component.mjs +3 -3
  74. package/esm2022/settings/components/role-list/role-list.component.mjs +2 -1
  75. package/esm2022/settings/components/seller-detail/seller-detail.component.mjs +3 -3
  76. package/esm2022/settings/components/seller-list/seller-list.component.mjs +2 -1
  77. package/esm2022/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +3 -3
  78. package/esm2022/settings/components/shipping-method-list/shipping-method-list.component.mjs +2 -1
  79. package/esm2022/settings/components/tax-category-detail/tax-category-detail.component.mjs +3 -3
  80. package/esm2022/settings/components/tax-category-list/tax-category-list.component.mjs +2 -1
  81. package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +3 -3
  82. package/esm2022/settings/components/tax-rate-list/tax-rate-list.component.mjs +2 -1
  83. package/esm2022/settings/components/zone-detail/zone-detail.component.mjs +3 -3
  84. package/esm2022/settings/components/zone-list/zone-list.component.mjs +2 -1
  85. package/fesm2022/vendure-admin-ui-catalog.mjs +30 -39
  86. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  87. package/fesm2022/vendure-admin-ui-core.mjs +131 -68
  88. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  89. package/fesm2022/vendure-admin-ui-customer.mjs +34 -29
  90. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  91. package/fesm2022/vendure-admin-ui-dashboard.mjs +3 -3
  92. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  93. package/fesm2022/vendure-admin-ui-marketing.mjs +3 -2
  94. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  95. package/fesm2022/vendure-admin-ui-order.mjs +21 -16
  96. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  97. package/fesm2022/vendure-admin-ui-settings.mjs +30 -20
  98. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  99. package/marketing/components/promotion-detail/promotion-detail.component.d.ts +3 -1
  100. package/order/components/order-detail/order-detail.component.d.ts +3 -1
  101. package/package.json +2 -2
  102. package/settings/components/admin-detail/admin-detail.component.d.ts +3 -1
  103. package/settings/components/channel-detail/channel-detail.component.d.ts +5 -3
  104. package/settings/components/country-detail/country-detail.component.d.ts +3 -1
  105. package/settings/components/global-settings/global-settings.component.d.ts +3 -1
  106. package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +3 -1
  107. package/settings/components/profile/profile.component.d.ts +3 -1
  108. package/settings/components/seller-detail/seller-detail.component.d.ts +3 -1
  109. package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +3 -1
  110. package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +3 -1
  111. package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +3 -1
  112. package/settings/components/zone-detail/zone-detail.component.d.ts +3 -1
  113. package/static/i18n-messages/it.json +169 -169
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
4
- import { COLLECTION_FRAGMENT, createUpdatedTranslatable, encodeConfigArgValue, findTranslation, getConfigArgValue, Permission, TypedBaseDetailComponent, unicodePatternValidator, } from '@vendure/admin-ui/core';
4
+ import { COLLECTION_FRAGMENT, createUpdatedTranslatable, encodeConfigArgValue, findTranslation, getConfigArgValue, getCustomFieldsDefaults, Permission, TypedBaseDetailComponent, unicodePatternValidator, } from '@vendure/admin-ui/core';
5
5
  import { normalizeString } from '@vendure/common/lib/normalize-string';
6
6
  import { gql } from 'apollo-angular';
7
7
  import { combineLatest, merge, of, Subject } from 'rxjs';
@@ -40,7 +40,7 @@ export class CollectionDetailComponent extends TypedBaseDetailComponent {
40
40
  visible: false,
41
41
  inheritFilters: true,
42
42
  filters: this.formBuilder.array([]),
43
- customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {})),
43
+ customFields: this.formBuilder.group(getCustomFieldsDefaults(this.customFields)),
44
44
  });
45
45
  this.assetChanges = {};
46
46
  this.filters = [];
@@ -261,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
261
261
  type: ViewChild,
262
262
  args: ['collectionContents']
263
263
  }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tZGV0YWlsL2NvbGxlY3Rpb24tZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRldGFpbC9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFHVCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFHSCxtQkFBbUIsRUFPbkIseUJBQXlCLEVBRXpCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsaUJBQWlCLEVBS2pCLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsdUJBQXVCLEdBRTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBSTVHLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcs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QyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDcEQsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDbkYsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQixDQUN6QixVQUFtQyxFQUNuQyxtQkFBd0I7UUFFeEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLElBQUk7Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQzthQUNyQyxDQUFDLENBQUM7U0FDTixDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7OEdBMVNRLHlCQUF5QjtrR0FBekIseUJBQXlCLDZNQ3hEdEMsbTdXQXFPQTs7MkZEN0thLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDSSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU07MlBBMkJkLGlCQUFpQjtzQkFBakQsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQXNzZXQsXHJcbiAgICBDb2xsZWN0aW9uLFxyXG4gICAgQ09MTEVDVElPTl9GUkFHTUVOVCxcclxuICAgIENvbGxlY3Rpb25EZXRhaWxRdWVyeURvY3VtZW50LFxyXG4gICAgQ29sbGVjdGlvbkZyYWdtZW50LFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uLFxyXG4gICAgQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0LFxyXG4gICAgQ3JlYXRlQ29sbGVjdGlvbklucHV0LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZW5jb2RlQ29uZmlnQXJnVmFsdWUsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDb25maWdBcmdWYWx1ZSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFR5cGVkQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yLFxyXG4gICAgVXBkYXRlQ29sbGVjdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25Db250ZW50c0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbGxlY3Rpb24tY29udGVudHMvY29sbGVjdGlvbi1jb250ZW50cy5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTExFQ1RJT05fREVUQUlMX1FVRVJZID0gZ3FsYFxyXG4gICAgcXVlcnkgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5KCRpZDogSUQhKSB7XHJcbiAgICAgICAgY29sbGVjdGlvbihpZDogJGlkKSB7XHJcbiAgICAgICAgICAgIC4uLkNvbGxlY3Rpb25cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAke0NPTExFQ1RJT05fRlJBR01FTlR9XHJcbmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNvbGxlY3Rpb24tZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5RG9jdW1lbnQsICdjb2xsZWN0aW9uJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnQ29sbGVjdGlvbicpO1xyXG4gICAgZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc2x1ZzogWycnLCB1bmljb2RlUGF0dGVyblZhbGlkYXRvcigvXltcXHB7TGV0dGVyfTAtOS5fLV0rJC8pXSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgaW5oZXJpdEZpbHRlcnM6IHRydWUsXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgKSxcclxuICAgIH0pO1xyXG4gICAgYXNzZXRDaGFuZ2VzOiB7IGFzc2V0cz86IEFzc2V0W107IGZlYXR1cmVkQXNzZXQ/OiBBc3NldCB9ID0ge307XHJcbiAgICBmaWx0ZXJzOiBDb25maWd1cmFibGVPcGVyYXRpb25bXSA9IFtdO1xyXG4gICAgYWxsRmlsdGVyczogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbltdID0gW107XHJcbiAgICB1cGRhdGVkRmlsdGVycyQ6IE9ic2VydmFibGU8Q29uZmlndXJhYmxlT3BlcmF0aW9uSW5wdXRbXT47XHJcbiAgICBpbmhlcml0RmlsdGVycyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBsaXZlUHJldmlldyA9IGZhbHNlO1xyXG4gICAgcGFyZW50SWQkOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD47XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVDb2xsZWN0aW9uXTtcclxuICAgIHByaXZhdGUgZmlsdGVyUmVtb3ZlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgQFZpZXdDaGlsZCgnY29sbGVjdGlvbkNvbnRlbnRzJykgY29udGVudHNDb21wb25lbnQ6IENvbGxlY3Rpb25Db250ZW50c0NvbXBvbmVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5saXZlUHJldmlldyA9IHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXQoJ2xpdmVQcmV2aWV3Q29sbGVjdGlvbkNvbnRlbnRzJykgPz8gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmdldENvbGxlY3Rpb25GaWx0ZXJzKCkuc2luZ2xlJC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hbGxGaWx0ZXJzID0gcmVzLmNvbGxlY3Rpb25GaWx0ZXJzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnNGb3JtQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBjb25zdCBpbmhlcml0RmlsdGVyc0NvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdpbmhlcml0RmlsdGVycycpIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAgICAgICB0aGlzLmluaGVyaXRGaWx0ZXJzJCA9IGluaGVyaXRGaWx0ZXJzQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZWRGaWx0ZXJzJCA9IG1lcmdlKGZpbHRlcnNGb3JtQXJyYXkuc3RhdHVzQ2hhbmdlcywgdGhpcy5maWx0ZXJSZW1vdmVkJCkucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiBmaWx0ZXJzRm9ybUFycmF5LnRvdWNoZWQpLFxyXG4gICAgICAgICAgICBtYXAoKCkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMubWFwT3BlcmF0aW9uc1RvSW5wdXRzKHRoaXMuZmlsdGVycywgZmlsdGVyc0Zvcm1BcnJheS52YWx1ZSkuZmlsdGVyKF9maWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBhbGwgdGhlIGFyZ3VtZW50cyBoYXZlIHZhbGlkIHZhbHVlcy4gRS5nLiBhIG5ld2x5LWFkZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyIHdpbGwgbm90IHlldCBoYXZlIHZhbGlkIHZhbHVlc1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIF9maWx0ZXIuYXJndW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucGFyZW50SWQkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocG0gPT4gcG0uZ2V0KCdwYXJlbnRJZCcpIHx8IHVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChwYXJlbnRJZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YocGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbnRpdHkkLnBpcGUobWFwKGNvbGxlY3Rpb24gPT4gY29sbGVjdGlvbi5wYXJlbnQ/LmlkKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyRGVmaW5pdGlvbihfZmlsdGVyOiBDb25maWd1cmFibGVPcGVyYXRpb24pOiBDb25maWd1cmFibGVPcGVyYXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGxGaWx0ZXJzLmZpbmQoZiA9PiBmLmNvZGUgPT09IF9maWx0ZXIuY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjcmVhdGluZyBhIG5ldyBDb2xsZWN0aW9uLCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzbHVnIGJhc2VkIG9uIHRoZSBjb2xsZWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNsdWcobmFtZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzbHVnQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydzbHVnJ10pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IHRoaXMuZW50aXR5ID8gZmluZFRyYW5zbGF0aW9uKHRoaXMuZW50aXR5LCB0aGlzLmxhbmd1YWdlQ29kZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFNsdWdJc0VtcHR5ID0gIWN1cnJlbnRUcmFuc2xhdGlvbiB8fCAhY3VycmVudFRyYW5zbGF0aW9uLnNsdWc7XHJcbiAgICAgICAgaWYgKHNsdWdDb250cm9sICYmIHNsdWdDb250cm9sLnByaXN0aW5lICYmIGN1cnJlbnRTbHVnSXNFbXB0eSkge1xyXG4gICAgICAgICAgICBzbHVnQ29udHJvbC5zZXRWYWx1ZShub3JtYWxpemVTdHJpbmcoYCR7bmFtZVZhbHVlfWAsICctJykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRGaWx0ZXIoY29sbGVjdGlvbkZpbHRlcjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyc0FycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmlsdGVycycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgY29uc3QgYXJnc0hhc2ggPSBjb2xsZWN0aW9uRmlsdGVyLmFyZ3MucmVkdWNlKFxyXG4gICAgICAgICAgICAob3V0cHV0LCBhcmcpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAuLi5vdXRwdXQsXHJcbiAgICAgICAgICAgICAgICBbYXJnLm5hbWVdOiBnZXRDb25maWdBcmdWYWx1ZShhcmcudmFsdWUpLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmaWx0ZXJzQXJyYXkucHVzaChcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IGNvbGxlY3Rpb25GaWx0ZXIuY29kZSxcclxuICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3NIYXNoLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgICAgY29kZTogY29sbGVjdGlvbkZpbHRlci5jb2RlLFxyXG4gICAgICAgICAgICBhcmdzOiBjb2xsZWN0aW9uRmlsdGVyLmFyZ3MubWFwKGEgPT4gKHsgbmFtZTogYS5uYW1lLCB2YWx1ZTogZ2V0Q29uZmlnQXJnVmFsdWUoYS52YWx1ZSkgfSkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZpbHRlcihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyc0FycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmlsdGVycycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgICBmaWx0ZXJzQXJyYXkubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgZmlsdGVyc0FycmF5Lm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyUmVtb3ZlZCQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZENvbGxlY3Rpb24oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogJycsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogJycsXHJcbiAgICAgICAgICAgICAgICBpc1ByaXZhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYnJlYWRjcnVtYnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZWRBc3NldDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW10sXHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgaW5oZXJpdEZpbHRlcnM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgIHBhcmVudDoge30gYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgKSBhcyBDcmVhdGVDb2xsZWN0aW9uSW5wdXQ7XHJcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncGFyZW50SWQnKTtcclxuICAgICAgICBpZiAocGFyZW50SWQpIHtcclxuICAgICAgICAgICAgaW5wdXQucGFyZW50SWQgPSBwYXJlbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmNyZWF0ZUNvbGxlY3Rpb24oaW5wdXQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgZGF0YS5jcmVhdGVDb2xsZWN0aW9uLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW2NhdGVnb3J5LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRDb2xsZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVDb2xsZWN0aW9uSW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi51cGRhdGVDb2xsZWN0aW9uKGlucHV0KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRzQ29tcG9uZW50LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0NvbGxlY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5EZWFjdGl2YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5jYW5EZWFjdGl2YXRlKCkgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmFzc2V0cyAmJiAhdGhpcy5hc3NldENoYW5nZXMuZmVhdHVyZWRBc3NldDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVMaXZlUHJldmlldygpIHtcclxuICAgICAgICB0aGlzLmxpdmVQcmV2aWV3ID0gIXRoaXMubGl2ZVByZXZpZXc7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldCgnbGl2ZVByZXZpZXdDb2xsZWN0aW9uQ29udGVudHMnLCB0aGlzLmxpdmVQcmV2aWV3KTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogQ29uZmlndXJhYmxlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBmb3JtIG9uIGNoYW5nZXMgdG8gdGhlIGNhdGVnb3J5IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogQ29sbGVjdGlvbkZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihlbnRpdHksIGxhbmd1YWdlQ29kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgc2x1ZzogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLnNsdWcgOiAnJyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhZW50aXR5LmlzUHJpdmF0ZSxcclxuICAgICAgICAgICAgaW5oZXJpdEZpbHRlcnM6IGVudGl0eS5pbmhlcml0RmlsdGVycyxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmlsdGVycycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgaWYgKGZvcm1BcnJheS5sZW5ndGggIT09IGVudGl0eS5maWx0ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3JtQXJyYXkuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XHJcbiAgICAgICAgICAgIGVudGl0eS5maWx0ZXJzLmZvckVhY2goZiA9PiB0aGlzLmFkZEZpbHRlcihmKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uZ2V0KFsnY3VzdG9tRmllbGRzJ10pLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgY2F0ZWdvcnkgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIGNhdGVnb3J5IHdoaWNoXHJcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkQ29sbGVjdGlvbihcclxuICAgICAgICBjYXRlZ29yeTogQ29sbGVjdGlvbkZyYWdtZW50LFxyXG4gICAgICAgIGZvcm06IHR5cGVvZiB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBDcmVhdGVDb2xsZWN0aW9uSW5wdXQgfCBVcGRhdGVDb2xsZWN0aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDYXRlZ29yeSA9IGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUoe1xyXG4gICAgICAgICAgICB0cmFuc2xhdGFibGU6IGNhdGVnb3J5LFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBmb3JtLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBjYXRlZ29yeS5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgc2x1ZzogY2F0ZWdvcnkuc2x1ZyB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjYXRlZ29yeS5kZXNjcmlwdGlvbiB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi51cGRhdGVkQ2F0ZWdvcnksXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBpc1ByaXZhdGU6ICFmb3JtLnZhbHVlLnZpc2libGUsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMubWFwT3BlcmF0aW9uc1RvSW5wdXRzKHRoaXMuZmlsdGVycywgdGhpcy5kZXRhaWxGb3JtLnZhbHVlLmZpbHRlcnMpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXBzIGFuIGFycmF5IG9mIGNvbmRpdGlvbnMgb3IgYWN0aW9ucyB0byB0aGUgaW5wdXQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBHcmFwaFFMIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtYXBPcGVyYXRpb25zVG9JbnB1dHMoXHJcbiAgICAgICAgb3BlcmF0aW9uczogQ29uZmlndXJhYmxlT3BlcmF0aW9uW10sXHJcbiAgICAgICAgZm9ybVZhbHVlT3BlcmF0aW9uczogYW55LFxyXG4gICAgKTogQ29uZmlndXJhYmxlT3BlcmF0aW9uSW5wdXRbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbnMubWFwKChvLCBpKSA9PiAoe1xyXG4gICAgICAgICAgICBjb2RlOiBvLmNvZGUsXHJcbiAgICAgICAgICAgIGFyZ3VtZW50czogT2JqZWN0LmVudHJpZXMoZm9ybVZhbHVlT3BlcmF0aW9uc1tpXS5hcmdzKS5tYXAoKFtuYW1lLCB2YWx1ZV0sIGopID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGVuY29kZUNvbmZpZ0FyZ1ZhbHVlKHZhbHVlKSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cImNvbGxlY3Rpb24tZGV0YWlsXCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB1cGRhdGVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXRhaWxGb3JtLmludmFsaWQgfHwgZGV0YWlsRm9ybS5wcmlzdGluZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1cGRhdGVCdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihkZXRhaWxGb3JtLmludmFsaWQgfHwgZGV0YWlsRm9ybS5wcmlzdGluZSkgJiYgIWFzc2V0c0NoYW5nZWQoKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT48L3Zkci1hYi1yaWdodFxyXG4gICAgICAgID5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiPlxyXG4gICAgPHZkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbiAgICAgICAgPHZkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnZpc2liaWxpdHknIHwgdHJhbnNsYXRlXCIgZm9yPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidmlzaWJsZS10b2dnbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXRhaWxGb3JtLnZhbHVlLnZpc2libGU7IGVsc2UgcHJpdmF0ZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGFsb2cucHVibGljJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJpdmF0ZT57eyAnY2F0YWxvZy5wcml2YXRlJyB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgZW50aXR5XCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXBhZ2UtZW50aXR5LWluZm8gW2VudGl0eV09XCJlbnRpdHlcIj48L3Zkci1wYWdlLWVudGl0eS1pbmZvPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcblxyXG4gICAgICAgIDx2ZHItcGFnZS1ibG9jayAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIlxyXG4gICAgICAgICAgICA+PG5hdiByb2xlPVwibmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29sbGVjdGlvbi1icmVhZGNydW1ic1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYnJlYWRjcnVtYiBvZiBlbnRpdHkuYnJlYWRjcnVtYnM7IGxldCBpc0ZpcnN0ID0gZmlyc3Q7IGxldCBpc0xhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL2NhdGFsb2cvY29sbGVjdGlvbnMnXVwiICpuZ0lmPVwiaXNGaXJzdFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5yb290LWNvbGxlY3Rpb24nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvY2F0YWxvZy9jb2xsZWN0aW9ucycsIGJyZWFkY3J1bWIuaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRmlyc3QgJiYgIWlzTGFzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgYnJlYWRjcnVtYi5uYW1lIHwgdHJhbnNsYXRlIH19PC9hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTGFzdFwiPnt7IGJyZWFkY3J1bWIubmFtZSB8IHRyYW5zbGF0ZSB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L25hdj5cclxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG5cclxuICAgICAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVTbHVnKCRldmVudC50YXJnZXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NhdGFsb2cuc2x1ZycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Vycm9yc109XCJ7IHBhdHRlcm46ICgnY2F0YWxvZy5zbHVnLXBhdHRlcm4tZXJyb3InIHwgdHJhbnNsYXRlKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JpZC1zcGFuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb21tb24uZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwic2x1Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXJpY2gtdGV4dC1lZGl0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1yaWNoLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXBOYW1lPVwiY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiQ29sbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWN1c3RvbS1kZXRhaWwtY29tcG9uZW50LWhvc3RcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJjb2xsZWN0aW9uLWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5hc3NldHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgIFthc3NldHNdPVwiZW50aXR5Py5hc3NldHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmZWF0dXJlZEFzc2V0XT1cImVudGl0eT8uZmVhdHVyZWRBc3NldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3VwZGF0ZVBlcm1pc3Npb25zXT1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXNzZXRDaGFuZ2VzID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1hc3NldHM+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cuZmlsdGVycycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy5maWx0ZXItaW5oZXJpdGFuY2UnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJpbmhlcml0RmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbmhlcml0RmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImluaGVyaXRGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZHJEaXNhYmxlZF09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZpc2libGUtdG9nZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGV0YWlsRm9ybS52YWx1ZS5pbmhlcml0RmlsdGVyczsgZWxzZSBub0luaGVyaXRcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLmluaGVyaXQtZmlsdGVycy1mcm9tLXBhcmVudCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSW5oZXJpdD57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLmRvLW5vdC1pbmhlcml0LWZpbHRlcnMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jb25maWd1cmFibGUtaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmlsdGVyKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpb25dPVwiZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpb25EZWZpbml0aW9uXT1cImdldEZpbHRlckRlZmluaXRpb24oZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWNvbmZpZ3VyYWJsZS1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgdmRyRHJvcGRvd25UcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnbWFya2V0aW5nLmFkZC1jb25kaXRpb24nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFsbEZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLmRlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY29tbW9uLmNvbnRlbnRzJyB8IHRyYW5zbGF0ZVwiIFtwYWRkaW5nWF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1jb2xsZWN0aW9uLWNvbnRlbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25JZF09XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmVudElkXT1cInBhcmVudElkJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbdXBkYXRlZEZpbHRlcnNdPVwidXBkYXRlZEZpbHRlcnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbmhlcml0RmlsdGVyc109XCJpbmhlcml0RmlsdGVycyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdVcGRhdGVkRmlsdGVyc109XCJsaXZlUHJldmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgI2NvbGxlY3Rpb25Db250ZW50c1xyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY291bnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudHMtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5jb2xsZWN0aW9uLWNvbnRlbnRzJyB8IHRyYW5zbGF0ZSB9fSAoe3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5yZXN1bHRzLWNvdW50JyB8IHRyYW5zbGF0ZSA6IHsgY291bnQ6IGNvdW50IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyIFtjbGFzcy5kaXNhYmxlZF09XCJkZXRhaWxGb3JtLmdldCgnZmlsdGVycycpPy5wcmlzdGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5nZXQoJ2ZpbHRlcnMnKT8ucHJpc3RpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsaXZlUHJldmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZUxpdmVQcmV2aWV3KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjYXRhbG9nLmxpdmUtcHJldmlldy1jb250ZW50cycgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWNvbGxlY3Rpb24tY29udGVudHM+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPC92ZHItcGFnZS1ibG9jaz5cclxuICAgIDwvdmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuPC9mb3JtPlxyXG4iXX0=
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tZGV0YWlsL2NvbGxlY3Rpb24tZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWRldGFpbC9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFHVCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFFSCxtQkFBbUIsRUFPbkIseUJBQXlCLEVBRXpCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUt2QixVQUFVLEVBQ1Ysd0JBQXdCLEVBQ3hCLHVCQUF1QixHQUUxQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQUk1RyxNQUFNLENBQUMsTUFBTSx1QkFB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Q0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNuRixDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCLENBQ3pCLFVBQW1DLEVBQ25DLG1CQUF3QjtRQUV4QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtZQUNaLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUUsSUFBSTtnQkFDSixLQUFLLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDO2FBQ3JDLENBQUMsQ0FBQztTQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzs4R0F4U1EseUJBQXlCO2tHQUF6Qix5QkFBeUIsNk1DeER0QyxtN1dBcU9BOzsyRkQ3S2EseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNJLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTsyUEF5QmQsaUJBQWlCO3NCQUFqRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBBc3NldCxcclxuICAgIENPTExFQ1RJT05fRlJBR01FTlQsXHJcbiAgICBDb2xsZWN0aW9uRGV0YWlsUXVlcnlEb2N1bWVudCxcclxuICAgIENvbGxlY3Rpb25GcmFnbWVudCxcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb24sXHJcbiAgICBDb25maWd1cmFibGVPcGVyYXRpb25JbnB1dCxcclxuICAgIENyZWF0ZUNvbGxlY3Rpb25JbnB1dCxcclxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIGVuY29kZUNvbmZpZ0FyZ1ZhbHVlLFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgZ2V0Q29uZmlnQXJnVmFsdWUsXHJcbiAgICBnZXRDdXN0b21GaWVsZHNEZWZhdWx0cyxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFR5cGVkQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yLFxyXG4gICAgVXBkYXRlQ29sbGVjdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBncWwgfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25Db250ZW50c0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbGxlY3Rpb24tY29udGVudHMvY29sbGVjdGlvbi1jb250ZW50cy5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTExFQ1RJT05fREVUQUlMX1FVRVJZID0gZ3FsYFxyXG4gICAgcXVlcnkgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5KCRpZDogSUQhKSB7XHJcbiAgICAgICAgY29sbGVjdGlvbihpZDogJGlkKSB7XHJcbiAgICAgICAgICAgIC4uLkNvbGxlY3Rpb25cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAke0NPTExFQ1RJT05fRlJBR01FTlR9XHJcbmA7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNvbGxlY3Rpb24tZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgQ29sbGVjdGlvbkRldGFpbFF1ZXJ5RG9jdW1lbnQsICdjb2xsZWN0aW9uJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnQ29sbGVjdGlvbicpO1xyXG4gICAgZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc2x1ZzogWycnLCB1bmljb2RlUGF0dGVyblZhbGlkYXRvcigvXltcXHB7TGV0dGVyfTAtOS5fLV0rJC8pXSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgaW5oZXJpdEZpbHRlcnM6IHRydWUsXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSksXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdldEN1c3RvbUZpZWxkc0RlZmF1bHRzKHRoaXMuY3VzdG9tRmllbGRzKSksXHJcbiAgICB9KTtcclxuICAgIGFzc2V0Q2hhbmdlczogeyBhc3NldHM/OiBBc3NldFtdOyBmZWF0dXJlZEFzc2V0PzogQXNzZXQgfSA9IHt9O1xyXG4gICAgZmlsdGVyczogQ29uZmlndXJhYmxlT3BlcmF0aW9uW10gPSBbXTtcclxuICAgIGFsbEZpbHRlcnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb25bXSA9IFtdO1xyXG4gICAgdXBkYXRlZEZpbHRlcnMkOiBPYnNlcnZhYmxlPENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0W10+O1xyXG4gICAgaW5oZXJpdEZpbHRlcnMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgbGl2ZVByZXZpZXcgPSBmYWxzZTtcclxuICAgIHBhcmVudElkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xyXG4gICAgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbiA9IFtQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2csIFBlcm1pc3Npb24uVXBkYXRlQ29sbGVjdGlvbl07XHJcbiAgICBwcml2YXRlIGZpbHRlclJlbW92ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbGxlY3Rpb25Db250ZW50cycpIGNvbnRlbnRzQ29tcG9uZW50OiBDb2xsZWN0aW9uQ29udGVudHNDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubGl2ZVByZXZpZXcgPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0KCdsaXZlUHJldmlld0NvbGxlY3Rpb25Db250ZW50cycpID8/IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5nZXRDb2xsZWN0aW9uRmlsdGVycygpLnNpbmdsZSQuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsRmlsdGVycyA9IHJlcy5jb2xsZWN0aW9uRmlsdGVycztcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzRm9ybUFycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmlsdGVycycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgY29uc3QgaW5oZXJpdEZpbHRlcnNDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnaW5oZXJpdEZpbHRlcnMnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgdGhpcy5pbmhlcml0RmlsdGVycyQgPSBpbmhlcml0RmlsdGVyc0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVkRmlsdGVycyQgPSBtZXJnZShmaWx0ZXJzRm9ybUFycmF5LnN0YXR1c0NoYW5nZXMsIHRoaXMuZmlsdGVyUmVtb3ZlZCQpLnBpcGUoXHJcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gZmlsdGVyc0Zvcm1BcnJheS50b3VjaGVkKSxcclxuICAgICAgICAgICAgbWFwKCgpID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcE9wZXJhdGlvbnNUb0lucHV0cyh0aGlzLmZpbHRlcnMsIGZpbHRlcnNGb3JtQXJyYXkudmFsdWUpLmZpbHRlcihfZmlsdGVyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgYWxsIHRoZSBhcmd1bWVudHMgaGF2ZSB2YWxpZCB2YWx1ZXMuIEUuZy4gYSBuZXdseS1hZGRlZFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlciB3aWxsIG5vdCB5ZXQgaGF2ZSB2YWxpZCB2YWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBfZmlsdGVyLmFyZ3VtZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnLnZhbHVlID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBhcmVudElkJCA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHBtID0+IHBtLmdldCgncGFyZW50SWQnKSB8fCB1bmRlZmluZWQpLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFyZW50SWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50aXR5JC5waXBlKG1hcChjb2xsZWN0aW9uID0+IGNvbGxlY3Rpb24ucGFyZW50Py5pZCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbHRlckRlZmluaXRpb24oX2ZpbHRlcjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKTogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsRmlsdGVycy5maW5kKGYgPT4gZi5jb2RlID09PSBfZmlsdGVyLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2V0c0NoYW5nZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhT2JqZWN0LnZhbHVlcyh0aGlzLmFzc2V0Q2hhbmdlcykubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgY3JlYXRpbmcgYSBuZXcgQ29sbGVjdGlvbiwgYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgc2x1ZyBiYXNlZCBvbiB0aGUgY29sbGVjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVTbHVnKG5hbWVWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc2x1Z0NvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsnc2x1ZyddKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSB0aGlzLmVudGl0eSA/IGZpbmRUcmFuc2xhdGlvbih0aGlzLmVudGl0eSwgdGhpcy5sYW5ndWFnZUNvZGUpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTbHVnSXNFbXB0eSA9ICFjdXJyZW50VHJhbnNsYXRpb24gfHwgIWN1cnJlbnRUcmFuc2xhdGlvbi5zbHVnO1xyXG4gICAgICAgIGlmIChzbHVnQ29udHJvbCAmJiBzbHVnQ29udHJvbC5wcmlzdGluZSAmJiBjdXJyZW50U2x1Z0lzRW1wdHkpIHtcclxuICAgICAgICAgICAgc2x1Z0NvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplU3RyaW5nKGAke25hbWVWYWx1ZX1gLCAnLScpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRmlsdGVyKGNvbGxlY3Rpb25GaWx0ZXI6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnNBcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2ZpbHRlcnMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IGFyZ3NIYXNoID0gY29sbGVjdGlvbkZpbHRlci5hcmdzLnJlZHVjZShcclxuICAgICAgICAgICAgKG91dHB1dCwgYXJnKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgLi4ub3V0cHV0LFxyXG4gICAgICAgICAgICAgICAgW2FyZy5uYW1lXTogZ2V0Q29uZmlnQXJnVmFsdWUoYXJnLnZhbHVlKSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZmlsdGVyc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiBjb2xsZWN0aW9uRmlsdGVyLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzSGFzaCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGNvZGU6IGNvbGxlY3Rpb25GaWx0ZXIuY29kZSxcclxuICAgICAgICAgICAgYXJnczogY29sbGVjdGlvbkZpbHRlci5hcmdzLm1hcChhID0+ICh7IG5hbWU6IGEubmFtZSwgdmFsdWU6IGdldENvbmZpZ0FyZ1ZhbHVlKGEudmFsdWUpIH0pKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGaWx0ZXIoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnNBcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2ZpbHRlcnMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgZmlsdGVyc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICAgICAgZmlsdGVyc0FycmF5Lm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBcnJheS5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlclJlbW92ZWQkLm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kZXRhaWxGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRDb2xsZWN0aW9uKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZDogJycsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiAnJyxcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgIHNsdWc6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNQcml2YXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzOiBbXSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICAgICAgICAgIGZlYXR1cmVkQXNzZXQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBbXSxcclxuICAgICAgICAgICAgICAgIGluaGVyaXRGaWx0ZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHt9IGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBudWxsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICkgYXMgQ3JlYXRlQ29sbGVjdGlvbklucHV0O1xyXG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3BhcmVudElkJyk7XHJcbiAgICAgICAgaWYgKHBhcmVudElkKSB7XHJcbiAgICAgICAgICAgIGlucHV0LnBhcmVudElkID0gcGFyZW50SWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5jcmVhdGVDb2xsZWN0aW9uKGlucHV0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIGRhdGEuY3JlYXRlQ29sbGVjdGlvbi5pZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFtjYXRlZ29yeSwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkQ29sbGVjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlQ29sbGVjdGlvbklucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb24udXBkYXRlQ29sbGVjdGlvbihpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50c0NvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuY2FuRGVhY3RpdmF0ZSgpICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHMgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlTGl2ZVByZXZpZXcoKSB7XHJcbiAgICAgICAgdGhpcy5saXZlUHJldmlldyA9ICF0aGlzLmxpdmVQcmV2aWV3O1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXQoJ2xpdmVQcmV2aWV3Q29sbGVjdGlvbkNvbnRlbnRzJywgdGhpcy5saXZlUHJldmlldyk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IENvbmZpZ3VyYWJsZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZhbHVlcyBvZiB0aGUgZm9ybSBvbiBjaGFuZ2VzIHRvIHRoZSBjYXRlZ29yeSBvciBjdXJyZW50IGxhbmd1YWdlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IENvbGxlY3Rpb25GcmFnbWVudCwgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSBmaW5kVHJhbnNsYXRpb24oZW50aXR5LCBsYW5ndWFnZUNvZGUpO1xyXG5cclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5uYW1lIDogJycsXHJcbiAgICAgICAgICAgIHNsdWc6IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5zbHVnIDogJycsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjdXJyZW50VHJhbnNsYXRpb24gPyBjdXJyZW50VHJhbnNsYXRpb24uZGVzY3JpcHRpb24gOiAnJyxcclxuICAgICAgICAgICAgdmlzaWJsZTogIWVudGl0eS5pc1ByaXZhdGUsXHJcbiAgICAgICAgICAgIGluaGVyaXRGaWx0ZXJzOiBlbnRpdHkuaW5oZXJpdEZpbHRlcnMsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2ZpbHRlcnMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICAgIGlmIChmb3JtQXJyYXkubGVuZ3RoICE9PSBlbnRpdHkuZmlsdGVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9ybUFycmF5LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICBlbnRpdHkuZmlsdGVycy5mb3JFYWNoKGYgPT4gdGhpcy5hZGRGaWx0ZXIoZikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2N1c3RvbUZpZWxkcyddKSxcclxuICAgICAgICAgICAgICAgIGVudGl0eSxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIGNhdGVnb3J5IGFuZCB0aGUgdmFsdWUgb2YgdGhlIGZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gdXBkYXRlZCBjb3B5IG9mIHRoZSBjYXRlZ29yeSB3aGljaFxyXG4gICAgICogY2FuIHRoZW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZENvbGxlY3Rpb24oXHJcbiAgICAgICAgY2F0ZWdvcnk6IENvbGxlY3Rpb25GcmFnbWVudCxcclxuICAgICAgICBmb3JtOiB0eXBlb2YgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogQ3JlYXRlQ29sbGVjdGlvbklucHV0IHwgVXBkYXRlQ29sbGVjdGlvbklucHV0IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVkQ2F0ZWdvcnkgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBjYXRlZ29yeSxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogZm9ybS52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHNsdWc6IGNhdGVnb3J5LnNsdWcgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogY2F0ZWdvcnkuZGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZENhdGVnb3J5LFxyXG4gICAgICAgICAgICBhc3NldElkczogdGhpcy5hc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKSxcclxuICAgICAgICAgICAgZmVhdHVyZWRBc3NldElkOiB0aGlzLmFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0Py5pZCxcclxuICAgICAgICAgICAgaXNQcml2YXRlOiAhZm9ybS52YWx1ZS52aXNpYmxlLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLm1hcE9wZXJhdGlvbnNUb0lucHV0cyh0aGlzLmZpbHRlcnMsIHRoaXMuZGV0YWlsRm9ybS52YWx1ZS5maWx0ZXJzKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFwcyBhbiBhcnJheSBvZiBjb25kaXRpb25zIG9yIGFjdGlvbnMgdG8gdGhlIGlucHV0IGZvcm1hdCBleHBlY3RlZCBieSB0aGUgR3JhcGhRTCBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWFwT3BlcmF0aW9uc1RvSW5wdXRzKFxyXG4gICAgICAgIG9wZXJhdGlvbnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbltdLFxyXG4gICAgICAgIGZvcm1WYWx1ZU9wZXJhdGlvbnM6IGFueSxcclxuICAgICk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0W10ge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobywgaSkgPT4gKHtcclxuICAgICAgICAgICAgY29kZTogby5jb2RlLFxyXG4gICAgICAgICAgICBhcmd1bWVudHM6IE9iamVjdC5lbnRyaWVzKGZvcm1WYWx1ZU9wZXJhdGlvbnNbaV0uYXJncykubWFwKChbbmFtZSwgdmFsdWVdLCBqKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBlbmNvZGVDb25maWdBcmdWYWx1ZSh2YWx1ZSksXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTmV3JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgKGxhbmd1YWdlQ29kZUNoYW5nZSk9XCJzZXRMYW5ndWFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJjb2xsZWN0aW9uLWRldGFpbFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNOZXckIHwgYXN5bmM7IGVsc2UgdXBkYXRlQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5pbnZhbGlkIHx8IGRldGFpbEZvcm0ucHJpc3RpbmVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmNyZWF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwidXBkYXRlUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZGV0YWlsRm9ybS5pbnZhbGlkIHx8IGRldGFpbEZvcm0ucHJpc3RpbmUpICYmICFhc3NldHNDaGFuZ2VkKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+PC92ZHItYWItcmlnaHRcclxuICAgICAgICA+XHJcbiAgICA8L3Zkci1hY3Rpb24tYmFyPlxyXG48L3Zkci1wYWdlLWJsb2NrPlxyXG48Zm9ybSBjbGFzcz1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImRldGFpbEZvcm1cIj5cclxuICAgIDx2ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG4gICAgICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy52aXNpYmlsaXR5JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInZpc2liaWxpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZpc2libGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ2aXNpYmlsaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZHJEaXNhYmxlZF09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZpc2libGUtdG9nZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGV0YWlsRm9ybS52YWx1ZS52aXNpYmxlOyBlbHNlIHByaXZhdGVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLnB1YmxpYycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ByaXZhdGU+e3sgJ2NhdGFsb2cucHJpdmF0ZScgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZW50aXR5XCI+PC92ZHItcGFnZS1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG5cclxuICAgICAgICA8dmRyLXBhZ2UtYmxvY2sgKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgZW50aXR5XCJcclxuICAgICAgICAgICAgPjxuYXYgcm9sZT1cIm5hdmlnYXRpb25cIj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbGxlY3Rpb24tYnJlYWRjcnVtYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGJyZWFkY3J1bWIgb2YgZW50aXR5LmJyZWFkY3J1bWJzOyBsZXQgaXNGaXJzdCA9IGZpcnN0OyBsZXQgaXNMYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9jYXRhbG9nL2NvbGxlY3Rpb25zJ11cIiAqbmdJZj1cImlzRmlyc3RcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGFsb2cucm9vdC1jb2xsZWN0aW9uJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2NhdGFsb2cvY29sbGVjdGlvbnMnLCBicmVhZGNydW1iLmlkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0ZpcnN0ICYmICFpc0xhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGJyZWFkY3J1bWIubmFtZSB8IHRyYW5zbGF0ZSB9fTwvYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xhc3RcIj57eyBicmVhZGNydW1iLm5hbWUgfCB0cmFuc2xhdGUgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgPC92ZHItcGFnZS1ibG9jaz5cclxuXHJcbiAgICAgICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlU2x1ZygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjYXRhbG9nLnNsdWcnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwic2x1Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcnNdPVwieyBwYXR0ZXJuOiAoJ2NhdGFsb2cuc2x1Zy1wYXR0ZXJuLWVycm9yJyB8IHRyYW5zbGF0ZSkgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2x1Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzbHVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWdyaWQtc3BhblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29tbW9uLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInNsdWdcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1yaWNoLXRleHQtZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcmljaC10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwTmFtZT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1c3RvbUZpZWxkcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIkNvbGxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cImRldGFpbEZvcm0uZ2V0KCdjdXN0b21GaWVsZHMnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1kZXRhaWxcIlxyXG4gICAgICAgICAgICAgICAgW2VudGl0eSRdPVwiZW50aXR5JFwiXHJcbiAgICAgICAgICAgICAgICBbZGV0YWlsRm9ybV09XCJkZXRhaWxGb3JtXCJcclxuICAgICAgICAgICAgPjwvdmRyLWN1c3RvbS1kZXRhaWwtY29tcG9uZW50LWhvc3Q+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cuYXNzZXRzJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1hc3NldHNcclxuICAgICAgICAgICAgICAgICAgICBbYXNzZXRzXT1cImVudGl0eT8uYXNzZXRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbZmVhdHVyZWRBc3NldF09XCJlbnRpdHk/LmZlYXR1cmVkQXNzZXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt1cGRhdGVQZXJtaXNzaW9uc109XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImFzc2V0Q2hhbmdlcyA9ICRldmVudFwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItYXNzZXRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgW3RpdGxlXT1cIidjYXRhbG9nLmZpbHRlcnMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NhdGFsb2cuZmlsdGVyLWluaGVyaXRhbmNlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yPVwiaW5oZXJpdEZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW5oZXJpdEZpbHRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpbmhlcml0RmlsdGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmRyRGlzYWJsZWRdPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2aXNpYmxlLXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldGFpbEZvcm0udmFsdWUuaW5oZXJpdEZpbHRlcnM7IGVsc2Ugbm9Jbmhlcml0XCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5pbmhlcml0LWZpbHRlcnMtZnJvbS1wYXJlbnQnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0luaGVyaXQ+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0YWxvZy5kby1ub3QtaW5oZXJpdC1maWx0ZXJzJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyczsgaW5kZXggYXMgaTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY29uZmlndXJhYmxlLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZpbHRlcihpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uXT1cImZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uRGVmaW5pdGlvbl09XCJnZXRGaWx0ZXJEZWZpbml0aW9uKGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1jb25maWd1cmFibGUtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ21hcmtldGluZy5hZGQtY29uZGl0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVsbGlwc2lzLXZlcnRpY2FsXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBhbGxGaWx0ZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlci5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NvbW1vbi5jb250ZW50cycgfCB0cmFuc2xhdGVcIiBbcGFkZGluZ1hdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY29sbGVjdGlvbi1jb250ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xsZWN0aW9uSWRdPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwYXJlbnRJZF09XCJwYXJlbnRJZCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3VwZGF0ZWRGaWx0ZXJzXT1cInVwZGF0ZWRGaWx0ZXJzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbaW5oZXJpdEZpbHRlcnNdPVwiaW5oZXJpdEZpbHRlcnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3VXBkYXRlZEZpbHRlcnNdPVwibGl2ZVByZXZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICNjb2xsZWN0aW9uQ29udGVudHNcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvdW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRzLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuY29sbGVjdGlvbi1jb250ZW50cycgfCB0cmFuc2xhdGUgfX0gKHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tb24ucmVzdWx0cy1jb3VudCcgfCB0cmFuc2xhdGUgOiB7IGNvdW50OiBjb3VudCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlciBbY2xhc3MuZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5nZXQoJ2ZpbHRlcnMnKT8ucHJpc3RpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJyk/LnByaXN0aW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGl2ZVByZXZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVMaXZlUHJldmlldygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5saXZlLXByZXZpZXctY29udGVudHMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1jb2xsZWN0aW9uLWNvbnRlbnRzPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8L3Zkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbjwvZm9ybT5cclxuIl19
@@ -20,6 +20,7 @@ export class CollectionListComponent extends TypedBaseListComponent {
20
20
  this.expandedIds = [];
21
21
  this.customFields = this.getCustomFieldConfig('Collection');
22
22
  this.filters = this.createFilterCollection()
23
+ .addIdFilter()
23
24
  .addDateFilters()
24
25
  .addFilter({
25
26
  name: 'slug',
@@ -153,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImpor
153
154
  type: Component,
154
155
  args: [{ selector: 'vdr-collection-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateCollection']\"\r\n [routerLink]=\"['./create']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-collection' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-split-view [rightPanelOpen]=\"activeCollectionId$ | async\" (closeClicked)=\"closeContents()\">\r\n <ng-template vdrSplitViewLeft>\r\n <vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n [activeIndex]=\"activeCollectionIndex$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (changeOrder)=\"onRearrange($event)\"\r\n >\r\n <vdr-bulk-action-menu\r\n locationId=\"collection-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.position' | translate\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('position')\"\r\n >\r\n <ng-template let-collection=\"item\">\r\n {{ collection.position }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.name' | translate\"\r\n [optional]=\"false\"\r\n [sort]=\"sorts.get('name')\"\r\n >\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <a class=\"button-ghost\" [routerLink]=\"['./', collection.id]\"\r\n ><span>{{ collection.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\">\r\n <ng-template let-collection=\"item\">\r\n <vdr-chip *ngIf=\"collection.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!collection.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.view-contents' | translate\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\">\r\n <a\r\n class=\"button-small bg-weight-150\"\r\n [routerLink]=\"['./', { contents: collection.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <span>{{ 'common.view-contents' | translate }}</span>\r\n <clr-icon shape=\"file-group\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n </vdr-collection-data-table>\r\n </ng-template>\r\n <ng-template vdrSplitViewRight [splitViewTitle]=\"activeCollectionTitle$ | async\">\r\n <ng-container *ngIf=\"activeCollectionId$ | async as activeGroup\">\r\n <vdr-collection-contents [collectionId]=\"activeCollectionId$ | async\"></vdr-collection-contents>\r\n </ng-container>\r\n </ng-template>\r\n</vdr-split-view>\r\n", styles: [":host{--indent-spacing: 18px}.indent-1{padding-left:var(--indent-spacing)}.indent-2{padding-left:calc(var(--indent-spacing) * 2)}.indent-3{padding-left:calc(var(--indent-spacing) * 3)}.indent-4,.indent-5,.indent-6,.indent-7,.indent-8,.indent-9{padding-left:calc(var(--indent-spacing) * 4)}.child-arrow{margin:1px 6px}.child-arrow.transparent{opacity:0}.breadcrumb{display:flex}.separator{color:var(--color-weight-500);margin:0 3px}\n"] }]
155
156
  }], ctorParameters: function () { return [{ type: i1.DataService }, { type: i1.NotificationService }]; } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgseUJBQXlCLEVBS3pCLHNCQUFzQixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBU2pGLE1BQU0sT0FBTyx1QkFDVCxTQUFRLHNCQUF1RTtJQXFDL0UsWUFBc0IsV0FBd0IsRUFBVSxtQkFBd0M7UUFDNUYsS0FBSyxFQUFFLENBQUM7UUFEVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUE5QmhHLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELFlBQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDM0MsY0FBYyxFQUFFO2FBQ2hCLFNBQVMsQ0FBQztZQUNQLElBQUksRUFBRSxN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VSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDSCxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEU7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLFdBQVcsRUFBRTtnQkFDVCxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ3JEO1lBQ0QsbUJBQW1CLEVBQUUsT0FBTztZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDekIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F2S1EsdUJBQXVCO2tHQUF2Qix1QkFBdUIsa0ZDckJwQyw0NFBBZ0tBOzsyRkQzSWEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCxcclxuICAgIEdldENvbGxlY3Rpb25MaXN0UXVlcnksXHJcbiAgICBJdGVtT2YsXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgVHlwZWRCYXNlTGlzdENvbXBvbmVudCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25PcmRlckV2ZW50IH0gZnJvbSAnLi4vY29sbGVjdGlvbi1kYXRhLXRhYmxlL2NvbGxlY3Rpb24tZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jb2xsZWN0aW9uLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50LnNjc3MnLCAnLi9jb2xsZWN0aW9uLWxpc3QtY29tbW9uLnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkxpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCwgJ2NvbGxlY3Rpb25zJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIGFjdGl2ZUNvbGxlY3Rpb25JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uVGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBzdWJDb2xsZWN0aW9ucyQ6IE9ic2VydmFibGU8QXJyYXk8SXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+Pj47XHJcbiAgICBleHBhbmRlZElkczogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0NvbGxlY3Rpb24nKTtcclxuICAgIHJlYWRvbmx5IGZpbHRlcnMgPSB0aGlzLmNyZWF0ZUZpbHRlckNvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5hZGREYXRlRmlsdGVycygpXHJcbiAgICAgICAgLmFkZEZpbHRlcih7XHJcbiAgICAgICAgICAgIG5hbWU6ICdzbHVnJyxcclxuICAgICAgICAgICAgbGFiZWw6IF8oJ2NvbW1vbi5zbHVnJyksXHJcbiAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnc2x1ZycsXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICB0eXBlOiB7IGtpbmQ6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICBsYWJlbDogXygnY29tbW9uLnZpc2liaWxpdHknKSxcclxuICAgICAgICAgICAgdG9GaWx0ZXJJbnB1dDogdmFsdWUgPT4gKHtcclxuICAgICAgICAgICAgICAgIGlzUHJpdmF0ZTogeyBlcTogIXZhbHVlIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmFkZEN1c3RvbUZpZWxkRmlsdGVycyh0aGlzLmN1c3RvbUZpZWxkcylcclxuICAgICAgICAuY29ubmVjdFRvUm91dGUodGhpcy5yb3V0ZSk7XHJcbiAgICByZWFkb25seSBzb3J0cyA9IHRoaXMuY3JlYXRlU29ydENvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5kZWZhdWx0U29ydCgncG9zaXRpb24nLCAnQVNDJylcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICdjcmVhdGVkQXQnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAndXBkYXRlZEF0JyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ25hbWUnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnc2x1ZycgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICdwb3NpdGlvbicgfSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRTb3J0cyh0aGlzLmN1c3RvbUZpZWxkcylcclxuICAgICAgICAuY29ubmVjdFRvUm91dGUodGhpcy5yb3V0ZSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSwgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBzdXBlci5jb25maWd1cmUoe1xyXG4gICAgICAgICAgICBkb2N1bWVudDogR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCxcclxuICAgICAgICAgICAgZ2V0SXRlbXM6IGRhdGEgPT4gZGF0YS5jb2xsZWN0aW9ucyxcclxuICAgICAgICAgICAgc2V0VmFyaWFibGVzOiAoc2tpcCwgX3Rha2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvcExldmVsT25seSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtQ29udHJvbC52YWx1ZSA9PT0gJycgJiYgdGhpcy5maWx0ZXJzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiBfdGFrZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB7IGNvbnRhaW5zOiB0aGlzLnNlYXJjaFRlcm1Db250cm9sLnZhbHVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmZpbHRlcnMuY3JlYXRlRmlsdGVySW5wdXQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxPbmx5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnNvcnRzLmNyZWF0ZVNvcnRJbnB1dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWZyZXNoTGlzdE9uQ2hhbmdlczogW3RoaXMuZmlsdGVycy52YWx1ZUNoYW5nZXMsIHRoaXMuc29ydHMudmFsdWVDaGFuZ2VzXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbklkJCA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHBtID0+IHBtLmdldCgnY29udGVudHMnKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBleHBhbmRlZElkcyQgPSB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHFwbSA9PiBxcG0uZ2V0KCdleHBhbmRlZCcpKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgbWFwKGlkcyA9PiAoaWRzID8gaWRzLnNwbGl0KCcsJykgOiBbXSkpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZXhwYW5kZWRJZHMkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoaWRzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leHBhbmRlZElkcyA9IGlkcztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnN1YkNvbGxlY3Rpb25zJCA9IGNvbWJpbmVMYXRlc3QoZXhwYW5kZWRJZHMkLCB0aGlzLnJlZnJlc2gkKS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKFtpZHNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldENvbGxlY3Rpb25zKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IDk5OSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB7IGluOiBpZHMgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmNvbGxlY3Rpb25zLml0ZW1zKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb2xsZWN0aW9uVGl0bGUkID0gY29tYmluZUxhdGVzdChcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDb2xsZWN0aW9uSWQkLFxyXG4gICAgICAgICAgICB0aGlzLml0ZW1zJCxcclxuICAgICAgICAgICAgdGhpcy5zdWJDb2xsZWN0aW9ucyQsXHJcbiAgICAgICAgKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtpZCwgY29sbGVjdGlvbnMsIHN1YkNvbGxlY3Rpb25zXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBbLi4uY29sbGVjdGlvbnMsIC4uLnN1YkNvbGxlY3Rpb25zXS5maW5kKGMgPT4gYy5pZCA9PT0gaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoLm5hbWUgOiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25JbmRleCQgPSBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25JZCQsXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMkLFxyXG4gICAgICAgICAgICB0aGlzLnN1YkNvbGxlY3Rpb25zJCxcclxuICAgICAgICApLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2lkLCBjb2xsZWN0aW9ucywgc3ViQ29sbGVjdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDb2xsZWN0aW9uczogdHlwZW9mIGNvbGxlY3Rpb25zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zLnB1c2goY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YkNvbGxlY3Rpb25NYXRjaGVzID0gc3ViQ29sbGVjdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9PiBjLnBhcmVudElkICYmIGMucGFyZW50SWQgPT09IGNvbGxlY3Rpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbGxlY3Rpb25zLnB1c2goLi4uc3ViQ29sbGVjdGlvbk1hdGNoZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsQ29sbGVjdGlvbnMuZmluZEluZGV4KGMgPT4gYy5pZCA9PT0gaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVhcnJhbmdlKGV2ZW50OiBDb2xsZWN0aW9uT3JkZXJFdmVudCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5tb3ZlQ29sbGVjdGlvbihbZXZlbnRdKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXNhdmVkLWNoYW5nZXMnKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1zYXZlLWNoYW5nZXMtZXJyb3InKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VDb250ZW50cygpIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucGFyYW1zIH07XHJcbiAgICAgICAgZGVsZXRlIHBhcmFtcy5jb250ZW50cztcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4vJywgcGFyYW1zXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAncHJlc2VydmUnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExhbmd1YWdlKGNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50LnNldENvbnRlbnRMYW5ndWFnZShjb2RlKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVFeHBhbmRlZChjb2xsZWN0aW9uOiBJdGVtT2Y8R2V0Q29sbGVjdGlvbkxpc3RRdWVyeSwgJ2NvbGxlY3Rpb25zJz4pIHtcclxuICAgICAgICBsZXQgZXhwYW5kZWRJZHMgPSB0aGlzLmV4cGFuZGVkSWRzO1xyXG4gICAgICAgIGlmICghZXhwYW5kZWRJZHMuaW5jbHVkZXMoY29sbGVjdGlvbi5pZCkpIHtcclxuICAgICAgICAgICAgZXhwYW5kZWRJZHMucHVzaChjb2xsZWN0aW9uLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleHBhbmRlZElkcyA9IGV4cGFuZGVkSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gY29sbGVjdGlvbi5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkSWRzLmZpbHRlcihpZCA9PiAhIWlkKS5qb2luKCcsJyksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImNvbnRlbnRMYW5ndWFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cImNvbGxlY3Rpb24tbGlzdFwiPjwvdmRyLWFjdGlvbi1iYXItaXRlbXM+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIlsnQ3JlYXRlQ2F0YWxvZycsICdDcmVhdGVDb2xsZWN0aW9uJ11cIlxyXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycuL2NyZWF0ZSddXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5jcmVhdGUtbmV3LWNvbGxlY3Rpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjx2ZHItc3BsaXQtdmlldyBbcmlnaHRQYW5lbE9wZW5dPVwiYWN0aXZlQ29sbGVjdGlvbklkJCB8IGFzeW5jXCIgKGNsb3NlQ2xpY2tlZCk9XCJjbG9zZUNvbnRlbnRzKClcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSB2ZHJTcGxpdFZpZXdMZWZ0PlxyXG4gICAgICAgIDx2ZHItY29sbGVjdGlvbi1kYXRhLXRhYmxlXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgIGlkPVwiY29sbGVjdGlvbi1saXN0XCJcclxuICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW1zJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgW3N1YkNvbGxlY3Rpb25zXT1cInN1YkNvbGxlY3Rpb25zJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgICAgICAgICAgIFthY3RpdmVJbmRleF09XCJhY3RpdmVDb2xsZWN0aW9uSW5kZXgkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJzZXRQYWdlTnVtYmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldEl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNoYW5nZU9yZGVyKT1cIm9uUmVhcnJhbmdlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPHZkci1idWxrLWFjdGlvbi1tZW51XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1saXN0XCJcclxuICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1hbmFnZXJdPVwic2VsZWN0aW9uTWFuYWdlclwiXHJcbiAgICAgICAgICAgID48L3Zkci1idWxrLWFjdGlvbi1tZW51PlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1zZWFyY2hcclxuICAgICAgICAgICAgICAgIFtzZWFyY2hUZXJtQ29udHJvbF09XCJzZWFyY2hUZXJtQ29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICBbc2VhcmNoVGVybVBsYWNlaG9sZGVyXT1cIidjb21tb24uc2VhcmNoLWJ5LW5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgPjwvdmRyLWR0Mi1zZWFyY2g+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmlkJyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24uaWQgfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jcmVhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCdjcmVhdGVkQXQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRzLmdldCgndXBkYXRlZEF0JylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi51cGRhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLnBvc2l0aW9uJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCdwb3NpdGlvbicpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24ucG9zaXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbb3B0aW9uYWxdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCIgbGV0LWRlcHRoPVwiZGVwdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIidpbmRlbnQtJyArIGRlcHRoXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpbGQtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudHJhbnNwYXJlbnRdPVwiZGVwdGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cImNoaWxkLWFycm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sbGVjdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1idXR0b24gZm9sZGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sbGVjdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKGNvbGxlY3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImZvbGRlclwiICpuZ0lmPVwiIWV4cGFuZGVkSWRzLmluY2x1ZGVzKGNvbGxlY3Rpb24uaWQpXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZm9sZGVyLW9wZW5cIiAqbmdJZj1cImV4cGFuZGVkSWRzLmluY2x1ZGVzKGNvbGxlY3Rpb24uaWQpXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ1dHRvbi1naG9zdFwiIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCBjb2xsZWN0aW9uLmlkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48c3Bhbj57eyBjb2xsZWN0aW9uLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5icmVhZGNydW1iJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmVhZGNydW1iXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2xsZWN0aW9uIHwgY29sbGVjdGlvbkJyZWFkY3J1bWIgYXMgYnJlYWRjcnVtYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJicmVhZGNydW1icy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJyZWFkY3J1bWJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VwYXJhdG9yXCI+Lzwvc3Bhbj57eyBpdGVtLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIiAqbmdJZj1cIiFicmVhZGNydW1icy5sZW5ndGhcIj4vPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLnNsdWcnIHwgdHJhbnNsYXRlXCIgW3NvcnRdPVwic29ydHMuZ2V0KCdzbHVnJylcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLnNsdWcgfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLnZpc2liaWxpdHknIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwICpuZ0lmPVwiY29sbGVjdGlvbi5pc1ByaXZhdGVcIiBjb2xvclR5cGU9XCJ3YXJuaW5nXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5wcml2YXRlJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwICpuZ0lmPVwiIWNvbGxlY3Rpb24uaXNQcml2YXRlXCIgY29sb3JUeXBlPVwic3VjY2Vzc1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb21tb24ucHVibGljJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi52aWV3LWNvbnRlbnRzJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsIGJnLXdlaWdodC0xNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vJywgeyBjb250ZW50czogY29sbGVjdGlvbi5pZCB9XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc9XCJwcmVzZXJ2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnY29tbW9uLnZpZXctY29udGVudHMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmaWxlLWdyb3VwXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jdXN0b20tZmllbGQtY29sdW1uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VzdG9tRmllbGQgb2YgY3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZF09XCJjdXN0b21GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbc29ydHNdPVwic29ydHNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvdmRyLWNvbGxlY3Rpb24tZGF0YS10YWJsZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgdmRyU3BsaXRWaWV3UmlnaHQgW3NwbGl0Vmlld1RpdGxlXT1cImFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgfCBhc3luY1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmMgYXMgYWN0aXZlR3JvdXBcIj5cclxuICAgICAgICAgICAgPHZkci1jb2xsZWN0aW9uLWNvbnRlbnRzIFtjb2xsZWN0aW9uSWRdPVwiYWN0aXZlQ29sbGVjdGlvbklkJCB8IGFzeW5jXCI+PC92ZHItY29sbGVjdGlvbi1jb250ZW50cz5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvdmRyLXNwbGl0LXZpZXc+XHJcbiJdfQ==
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgseUJBQXlCLEVBS3pCLHNCQUFzQixHQUN6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBU2pGLE1BQU0sT0FBTyx1QkFDVCxTQUFRLHNCQUF1RTtJQXNDL0UsWUFBc0IsV0FBd0IsRUFBVSxtQkFBd0M7UUFDNUYsS0FBSyxFQUFFLENBQUM7UUFEVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUEvQmhHLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELFlBQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDM0MsV0FBVyxFQUFFO2FBQ2IsY0FBYyxFQUFFO2FBQ2hCLFNBQVMsQ0FBQztZ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QyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDSCxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEU7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLFdBQVcsRUFBRTtnQkFDVCxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ3JEO1lBQ0QsbUJBQW1CLEVBQUUsT0FBTztZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDekIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F4S1EsdUJBQXVCO2tHQUF2Qix1QkFBdUIsa0ZDckJwQyw0NFBBZ0tBOzsyRkQzSWEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCxcclxuICAgIEdldENvbGxlY3Rpb25MaXN0UXVlcnksXHJcbiAgICBJdGVtT2YsXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgVHlwZWRCYXNlTGlzdENvbXBvbmVudCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25PcmRlckV2ZW50IH0gZnJvbSAnLi4vY29sbGVjdGlvbi1kYXRhLXRhYmxlL2NvbGxlY3Rpb24tZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jb2xsZWN0aW9uLWxpc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50LnNjc3MnLCAnLi9jb2xsZWN0aW9uLWxpc3QtY29tbW9uLnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkxpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlTGlzdENvbXBvbmVudDx0eXBlb2YgR2V0Q29sbGVjdGlvbkxpc3REb2N1bWVudCwgJ2NvbGxlY3Rpb25zJz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIGFjdGl2ZUNvbGxlY3Rpb25JZCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBhY3RpdmVDb2xsZWN0aW9uVGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBzdWJDb2xsZWN0aW9ucyQ6IE9ic2VydmFibGU8QXJyYXk8SXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+Pj47XHJcbiAgICBleHBhbmRlZElkczogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0NvbGxlY3Rpb24nKTtcclxuICAgIHJlYWRvbmx5IGZpbHRlcnMgPSB0aGlzLmNyZWF0ZUZpbHRlckNvbGxlY3Rpb24oKVxyXG4gICAgICAgIC5hZGRJZEZpbHRlcigpXHJcbiAgICAgICAgLmFkZERhdGVGaWx0ZXJzKClcclxuICAgICAgICAuYWRkRmlsdGVyKHtcclxuICAgICAgICAgICAgbmFtZTogJ3NsdWcnLFxyXG4gICAgICAgICAgICBsYWJlbDogXygnY29tbW9uLnNsdWcnKSxcclxuICAgICAgICAgICAgdHlwZTogeyBraW5kOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQ6ICdzbHVnJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hZGRGaWx0ZXIoe1xyXG4gICAgICAgICAgICBuYW1lOiAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgIHR5cGU6IHsga2luZDogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgICAgIGxhYmVsOiBfKCdjb21tb24udmlzaWJpbGl0eScpLFxyXG4gICAgICAgICAgICB0b0ZpbHRlcklucHV0OiB2YWx1ZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaXNQcml2YXRlOiB7IGVxOiAhdmFsdWUgfSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYWRkQ3VzdG9tRmllbGRGaWx0ZXJzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuICAgIHJlYWRvbmx5IHNvcnRzID0gdGhpcy5jcmVhdGVTb3J0Q29sbGVjdGlvbigpXHJcbiAgICAgICAgLmRlZmF1bHRTb3J0KCdwb3NpdGlvbicsICdBU0MnKVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ2NyZWF0ZWRBdCcgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICd1cGRhdGVkQXQnIH0pXHJcbiAgICAgICAgLmFkZFNvcnQoeyBuYW1lOiAnbmFtZScgfSlcclxuICAgICAgICAuYWRkU29ydCh7IG5hbWU6ICdzbHVnJyB9KVxyXG4gICAgICAgIC5hZGRTb3J0KHsgbmFtZTogJ3Bvc2l0aW9uJyB9KVxyXG4gICAgICAgIC5hZGRDdXN0b21GaWVsZFNvcnRzKHRoaXMuY3VzdG9tRmllbGRzKVxyXG4gICAgICAgIC5jb25uZWN0VG9Sb3V0ZSh0aGlzLnJvdXRlKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHN1cGVyLmNvbmZpZ3VyZSh7XHJcbiAgICAgICAgICAgIGRvY3VtZW50OiBHZXRDb2xsZWN0aW9uTGlzdERvY3VtZW50LFxyXG4gICAgICAgICAgICBnZXRJdGVtczogZGF0YSA9PiBkYXRhLmNvbGxlY3Rpb25zLFxyXG4gICAgICAgICAgICBzZXRWYXJpYWJsZXM6IChza2lwLCBfdGFrZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wTGV2ZWxPbmx5ID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1Db250cm9sLnZhbHVlID09PSAnJyAmJiB0aGlzLmZpbHRlcnMuYWN0aXZlRmlsdGVycy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IF90YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHsgY29udGFpbnM6IHRoaXMuc2VhcmNoVGVybUNvbnRyb2wudmFsdWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVycy5jcmVhdGVGaWx0ZXJJbnB1dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BMZXZlbE9ubHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydHMuY3JlYXRlU29ydElucHV0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0T25DaGFuZ2VzOiBbdGhpcy5maWx0ZXJzLnZhbHVlQ2hhbmdlcywgdGhpcy5zb3J0cy52YWx1ZUNoYW5nZXNdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVDb2xsZWN0aW9uSWQkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocG0gPT4gcG0uZ2V0KCdjb250ZW50cycpKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkSWRzJCA9IHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocXBtID0+IHFwbS5nZXQoJ2V4cGFuZGVkJykpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBtYXAoaWRzID0+IChpZHMgPyBpZHMuc3BsaXQoJywnKSA6IFtdKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBleHBhbmRlZElkcyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShpZHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkSWRzID0gaWRzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3ViQ29sbGVjdGlvbnMkID0gY29tYmluZUxhdGVzdChleHBhbmRlZElkcyQsIHRoaXMucmVmcmVzaCQpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW2lkc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q29sbGVjdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogOTk5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHsgaW46IGlkcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFN0cmVhbShkYXRhID0+IGRhdGEuY29sbGVjdGlvbnMuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25UaXRsZSQgPSBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbGxlY3Rpb25JZCQsXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMkLFxyXG4gICAgICAgICAgICB0aGlzLnN1YkNvbGxlY3Rpb25zJCxcclxuICAgICAgICApLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2lkLCBjb2xsZWN0aW9ucywgc3ViQ29sbGVjdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IFsuLi5jb2xsZWN0aW9ucywgLi4uc3ViQ29sbGVjdGlvbnNdLmZpbmQoYyA9PiBjLmlkID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2gubmFtZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbkluZGV4JCA9IGNvbWJpbmVMYXRlc3QoXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29sbGVjdGlvbklkJCxcclxuICAgICAgICAgICAgdGhpcy5pdGVtcyQsXHJcbiAgICAgICAgICAgIHRoaXMuc3ViQ29sbGVjdGlvbnMkLFxyXG4gICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgbWFwKChbaWQsIGNvbGxlY3Rpb25zLCBzdWJDb2xsZWN0aW9uc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbENvbGxlY3Rpb25zOiB0eXBlb2YgY29sbGVjdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMucHVzaChjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViQ29sbGVjdGlvbk1hdGNoZXMgPSBzdWJDb2xsZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0+IGMucGFyZW50SWQgJiYgYy5wYXJlbnRJZCA9PT0gY29sbGVjdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sbGVjdGlvbnMucHVzaCguLi5zdWJDb2xsZWN0aW9uTWF0Y2hlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxDb2xsZWN0aW9ucy5maW5kSW5kZXgoYyA9PiBjLmlkID09PSBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWFycmFuZ2UoZXZlbnQ6IENvbGxlY3Rpb25PcmRlckV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLm1vdmVDb2xsZWN0aW9uKFtldmVudF0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktc2F2ZWQtY2hhbmdlcycpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXNhdmUtY2hhbmdlcy1lcnJvcicpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUNvbnRlbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMgfTtcclxuICAgICAgICBkZWxldGUgcGFyYW1zLmNvbnRlbnRzO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nLCBwYXJhbXNdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGFuZ3VhZ2UoY29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jbGllbnQuc2V0Q29udGVudExhbmd1YWdlKGNvZGUpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZGVkKGNvbGxlY3Rpb246IEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPikge1xyXG4gICAgICAgIGxldCBleHBhbmRlZElkcyA9IHRoaXMuZXhwYW5kZWRJZHM7XHJcbiAgICAgICAgaWYgKCFleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICBleHBhbmRlZElkcy5wdXNoKGNvbGxlY3Rpb24uaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkSWRzID0gZXhwYW5kZWRJZHMuZmlsdGVyKGlkID0+IGlkICE9PSBjb2xsZWN0aW9uLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWRJZHMuZmlsdGVyKGlkID0+ICEhaWQpLmpvaW4oJywnKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc109XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwiY29udGVudExhbmd1YWdlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L3Zkci1sYW5ndWFnZS1zZWxlY3Rvcj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwiY29sbGVjdGlvbi1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVDYXRhbG9nJywgJ0NyZWF0ZUNvbGxlY3Rpb24nXVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4vY3JlYXRlJ11cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmNyZWF0ZS1uZXctY29sbGVjdGlvbicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPHZkci1zcGxpdC12aWV3IFtyaWdodFBhbmVsT3Blbl09XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmNcIiAoY2xvc2VDbGlja2VkKT1cImNsb3NlQ29udGVudHMoKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHZkclNwbGl0Vmlld0xlZnQ+XHJcbiAgICAgICAgPHZkci1jb2xsZWN0aW9uLWRhdGEtdGFibGVcclxuICAgICAgICAgICAgY2xhc3M9XCJtdC0yXCJcclxuICAgICAgICAgICAgaWQ9XCJjb2xsZWN0aW9uLWxpc3RcIlxyXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbc3ViQ29sbGVjdGlvbnNdPVwic3ViQ29sbGVjdGlvbnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICAgICAgICAgICAgW2FjdGl2ZUluZGV4XT1cImFjdGl2ZUNvbGxlY3Rpb25JbmRleCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInNldFBhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlT3JkZXIpPVwib25SZWFycmFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dmRyLWJ1bGstYWN0aW9uLW1lbnVcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uSWQ9XCJjb2xsZWN0aW9uLWxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTWFuYWdlcl09XCJzZWxlY3Rpb25NYW5hZ2VyXCJcclxuICAgICAgICAgICAgPjwvdmRyLWJ1bGstYWN0aW9uLW1lbnU+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLXNlYXJjaFxyXG4gICAgICAgICAgICAgICAgW3NlYXJjaFRlcm1Db250cm9sXT1cInNlYXJjaFRlcm1Db250cm9sXCJcclxuICAgICAgICAgICAgICAgIFtzZWFyY2hUZXJtUGxhY2Vob2xkZXJdPVwiJ2NvbW1vbi5zZWFyY2gtYnktbmFtZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICA+PC92ZHItZHQyLXNlYXJjaD5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi5pZCB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ2NyZWF0ZWRBdCcpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24uY3JlYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydHMuZ2V0KCd1cGRhdGVkQXQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLnVwZGF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24ucG9zaXRpb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ3Bvc2l0aW9uJylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi5wb3NpdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uXHJcbiAgICAgICAgICAgICAgICBbaGVhZGluZ109XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtvcHRpb25hbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbc29ydF09XCJzb3J0cy5nZXQoJ25hbWUnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIiBsZXQtZGVwdGg9XCJkZXB0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiJ2luZGVudC0nICsgZGVwdGhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlsZC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50cmFuc3BhcmVudF09XCJkZXB0aCA9PT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwiY2hpbGQtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2xsZWN0aW9uLmNoaWxkcmVuPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLWJ1dHRvbiBmb2xkZXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2xsZWN0aW9uLmNoaWxkcmVuPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoY29sbGVjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZm9sZGVyXCIgKm5nSWY9XCIhZXhwYW5kZWRJZHMuaW5jbHVkZXMoY29sbGVjdGlvbi5pZClcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXItb3BlblwiICpuZ0lmPVwiZXhwYW5kZWRJZHMuaW5jbHVkZXMoY29sbGVjdGlvbi5pZClcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnV0dG9uLWdob3N0XCIgW3JvdXRlckxpbmtdPVwiWycuLycsIGNvbGxlY3Rpb24uaWRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxzcGFuPnt7IGNvbGxlY3Rpb24ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiYXJyb3cgcmlnaHRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmJyZWFkY3J1bWInIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJyZWFkY3J1bWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbGxlY3Rpb24gfCBjb2xsZWN0aW9uQnJlYWRjcnVtYiBhcyBicmVhZGNydW1ic1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJyZWFkY3J1bWJzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYnJlYWRjcnVtYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIj4vPC9zcGFuPnt7IGl0ZW0ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiICpuZ0lmPVwiIWJyZWFkY3J1bWJzLmxlbmd0aFwiPi88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uc2x1ZycgfCB0cmFuc2xhdGVcIiBbc29ydF09XCJzb3J0cy5nZXQoJ3NsdWcnKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24uc2x1ZyB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udmlzaWJpbGl0eScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJjb2xsZWN0aW9uLmlzUHJpdmF0ZVwiIGNvbG9yVHlwZT1cIndhcm5pbmdcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLnByaXZhdGUnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCIhY29sbGVjdGlvbi5pc1ByaXZhdGVcIiBjb2xvclR5cGU9XCJzdWNjZXNzXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5wdWJsaWMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLnZpZXctY29udGVudHMnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tc21hbGwgYmctd2VpZ2h0LTE1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCB7IGNvbnRlbnRzOiBjb2xsZWN0aW9uLmlkIH1dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZz1cInByZXNlcnZlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdjb21tb24udmlldy1jb250ZW50cycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImZpbGUtZ3JvdXBcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgIDx2ZHItZHQyLWN1c3RvbS1maWVsZC1jb2x1bW5cclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjdXN0b21GaWVsZCBvZiBjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkXT1cImN1c3RvbUZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtzb3J0c109XCJzb3J0c1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgPC92ZHItY29sbGVjdGlvbi1kYXRhLXRhYmxlPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSB2ZHJTcGxpdFZpZXdSaWdodCBbc3BsaXRWaWV3VGl0bGVdPVwiYWN0aXZlQ29sbGVjdGlvblRpdGxlJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUNvbGxlY3Rpb25JZCQgfCBhc3luYyBhcyBhY3RpdmVHcm91cFwiPlxyXG4gICAgICAgICAgICA8dmRyLWNvbGxlY3Rpb24tY29udGVudHMgW2NvbGxlY3Rpb25JZF09XCJhY3RpdmVDb2xsZWN0aW9uSWQkIHwgYXN5bmNcIj48L3Zkci1jb2xsZWN0aW9uLWNvbnRlbnRzPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC92ZHItc3BsaXQtdmlldz5cclxuIl19
@@ -14,10 +14,12 @@ export class CreateProductVariantDialogComponent {
14
14
  this.form = this.formBuilder.group({
15
15
  name: ['', Validators.required],
16
16
  sku: ['', Validators.required],
17
+ price: ['', Validators.required],
17
18
  options: this.formBuilder.record({}),
18
19
  });
19
20
  }
20
21
  ngOnInit() {
22
+ this.currencyCode = this.product.variants[0].currencyCode;
21
23
  for (const optionGroup of this.product.optionGroups) {
22
24
  this.form.get('options').addControl(optionGroup.code, new FormControl('', Validators.required));
23
25
  }
@@ -41,14 +43,15 @@ export class CreateProductVariantDialogComponent {
41
43
  });
42
44
  }
43
45
  confirm() {
44
- const { name, sku, options } = this.form.value;
45
- if (!name || !sku || !options) {
46
+ const { name, sku, options, price } = this.form.value;
47
+ if (!name || !sku || !options || !price) {
46
48
  return;
47
49
  }
48
50
  const optionIds = Object.values(options).filter(notNullOrUndefined);
49
51
  this.resolveWith({
50
52
  productId: this.product.id,
51
53
  sku,
54
+ price: Number(price),
52
55
  optionIds,
53
56
  translations: [
54
57
  {
@@ -68,10 +71,10 @@ export class CreateProductVariantDialogComponent {
68
71
  return this.product.optionGroups.find(og => og.code === code)?.id ?? '';
69
72
  }
70
73
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: CreateProductVariantDialogComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: CreateProductVariantDialogComponent, selector: "vdr-create-product-variant-dialog", ngImport: i0, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <div formGroupName=\"options\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\r\n <ng-select\r\n [items]=\"optionGroup.options\"\r\n [formControlName]=\"optionGroup.code\"\r\n bindLabel=\"name\"\r\n bindValue=\"id\"\r\n appendTo=\"body\"\r\n >\r\n </ng-select>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"product.optionGroups.length === 0\"\r\n clrAlertType=\"warning\"\r\n [clrAlertClosable]=\"false\"\r\n class=\"form-grid-span\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.cannot-create-variants-without-options' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div *ngIf=\"existingVariant\" class=\"mt-2\">\r\n <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\r\n existingVariant.sku\r\n }})\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-field [label]=\"'common.name' | translate\">\r\n <input type=\"text\" formControlName=\"name\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\">\r\n <input type=\"text\" formControlName=\"sku\" />\r\n </vdr-form-field>\r\n </div>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"confirm()\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\"\r\n >\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "component", type: i2.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { kind: "component", type: i2.ClrAlertItem, selector: "clr-alert-item" }, { kind: "directive", type: i2.ClrAlertText, selector: ".alert-text" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i5.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i5.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "directive", type: i5.DialogButtonsDirective, selector: "[vdrDialogButtons]" }, { kind: "directive", type: i5.DialogTitleDirective, selector: "[vdrDialogTitle]" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
74
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: CreateProductVariantDialogComponent, selector: "vdr-create-product-variant-dialog", ngImport: i0, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <div formGroupName=\"options\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\r\n <ng-select [items]=\"optionGroup.options\" [formControlName]=\"optionGroup.code\" bindLabel=\"name\"\r\n bindValue=\"id\" appendTo=\"body\">\r\n </ng-select>\r\n </vdr-form-field>\r\n <clr-alert *ngIf=\"product.optionGroups.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\"\r\n class=\"form-grid-span\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.cannot-create-variants-without-options' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div *ngIf=\"existingVariant\" class=\"mt-2\">\r\n <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\r\n existingVariant.sku\r\n }})\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-field [label]=\"'common.name' | translate\">\r\n <input type=\"text\" formControlName=\"name\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\">\r\n <input type=\"text\" formControlName=\"sku\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.price' | translate\">\r\n <vdr-currency-input name=\"price\" [currencyCode]=\"currencyCode\" formControlName=\"price\" />\r\n </vdr-form-field>\r\n </div>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>", styles: [""], dependencies: [{ kind: "component", type: i2.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { kind: "component", type: i2.ClrAlertItem, selector: "clr-alert-item" }, { kind: "directive", type: i2.ClrAlertText, selector: ".alert-text" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i5.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { kind: "component", type: i5.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i5.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "directive", type: i5.DialogButtonsDirective, selector: "[vdrDialogButtons]" }, { kind: "directive", type: i5.DialogTitleDirective, selector: "[vdrDialogTitle]" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
72
75
  }
73
76
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: CreateProductVariantDialogComponent, decorators: [{
74
77
  type: Component,
75
- args: [{ selector: 'vdr-create-product-variant-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <div formGroupName=\"options\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\r\n <ng-select\r\n [items]=\"optionGroup.options\"\r\n [formControlName]=\"optionGroup.code\"\r\n bindLabel=\"name\"\r\n bindValue=\"id\"\r\n appendTo=\"body\"\r\n >\r\n </ng-select>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"product.optionGroups.length === 0\"\r\n clrAlertType=\"warning\"\r\n [clrAlertClosable]=\"false\"\r\n class=\"form-grid-span\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.cannot-create-variants-without-options' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div *ngIf=\"existingVariant\" class=\"mt-2\">\r\n <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\r\n existingVariant.sku\r\n }})\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-field [label]=\"'common.name' | translate\">\r\n <input type=\"text\" formControlName=\"name\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\">\r\n <input type=\"text\" formControlName=\"sku\" />\r\n </vdr-form-field>\r\n </div>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"confirm()\"\r\n class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\"\r\n >\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n" }]
78
+ args: [{ selector: 'vdr-create-product-variant-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <div formGroupName=\"options\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\r\n <ng-select [items]=\"optionGroup.options\" [formControlName]=\"optionGroup.code\" bindLabel=\"name\"\r\n bindValue=\"id\" appendTo=\"body\">\r\n </ng-select>\r\n </vdr-form-field>\r\n <clr-alert *ngIf=\"product.optionGroups.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\"\r\n class=\"form-grid-span\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.cannot-create-variants-without-options' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div *ngIf=\"existingVariant\" class=\"mt-2\">\r\n <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\r\n existingVariant.sku\r\n }})\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-field [label]=\"'common.name' | translate\">\r\n <input type=\"text\" formControlName=\"name\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\">\r\n <input type=\"text\" formControlName=\"sku\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.price' | translate\">\r\n <vdr-currency-input name=\"price\" [currencyCode]=\"currencyCode\" formControlName=\"price\" />\r\n </vdr-form-field>\r\n </div>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>" }]
76
79
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb2R1Y3QtdmFyaWFudC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBZSxXQUFXLEVBQWMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7O0FBUXRFLE1BQU0sT0FBTyxtQ0FBbUM7SUFVNUMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFQNUMsU0FBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzFCLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQy9CLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBUyxFQUFFLENBQUM7U0FDL0MsQ0FBQyxDQUFDO0lBRzRDLENBQUM7SUFFaEQsUUFBUTtRQUNKLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFnQixDQUFDLFVBQVUsQ0FDL0MsV0FBVyxDQUFDLElBQUksRUFDaEIsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDM0MsQ0FBQztTQUNMO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFlLENBQUM7UUFDN0QsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtnQkFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7cUJBQzdCLEdBQUcsQ0FDQSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO3FCQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztvQkFDbEMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQ3ZEO3FCQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN4RDtZQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQy9ELElBQUksV0FBVyxFQUFFO2dCQUNiLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2xELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUN2QixDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3pFLFFBQVEsQ0FDZixDQUNKLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzNCLE9BQU87U0FDVjtRQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsR0FBRztZQUNILFNBQVM7WUFDVCxZQUFZLEVBQUU7Z0JBQ1Y7b0JBQ0ksWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtvQkFDdkMsSUFBSTtpQkFDUDthQUNKO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEVBQVU7UUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVk7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUUsQ0FBQzs4R0E1RVEsbUNBQW1DO2tHQUFuQyxtQ0FBbUMseUVDWGhELGc0RUEyREE7OzJGRGhEYSxtQ0FBbUM7a0JBTi9DLFNBQVM7K0JBQ0ksbUNBQW1DLG1CQUc1Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybVJlY29yZCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCwgRGlhbG9nLCBHZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeSB9IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVQcm9kdWN0VmFyaWFudERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIERpYWxvZzxDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0PiwgT25Jbml0IHtcclxuICAgIHJlc29sdmVXaXRoOiAocmVzdWx0PzogQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCkgPT4gdm9pZDtcclxuICAgIHByb2R1Y3Q6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5Wydwcm9kdWN0J10+O1xyXG4gICAgZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc2t1OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZm9ybUJ1aWxkZXIucmVjb3JkPHN0cmluZz4oe30pLFxyXG4gICAgfSk7XHJcbiAgICBleGlzdGluZ1ZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5Wydwcm9kdWN0J10+Wyd2YXJpYW50cyddW251bWJlcl0gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb25Hcm91cCBvZiB0aGlzLnByb2R1Y3Qub3B0aW9uR3JvdXBzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZvcm0uZ2V0KCdvcHRpb25zJykgYXMgRm9ybVJlY29yZCkuYWRkQ29udHJvbChcclxuICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zUmVjb3JkID0gdGhpcy5mb3JtLmdldCgnb3B0aW9ucycpIGFzIEZvcm1SZWNvcmQ7XHJcbiAgICAgICAgb3B0aW9uc1JlY29yZC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbE51bGwgPSBPYmplY3QudmFsdWVzKHZhbHVlKS5ldmVyeSh2ID0+IHYgPT0gbnVsbCk7XHJcbiAgICAgICAgICAgIGlmICghYWxsTnVsbCAmJiB2YWx1ZSAmJiBuYW1lQ29udHJvbCAmJiAhbmFtZUNvbnRyb2wuZGlydHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBPYmplY3QuZW50cmllcyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoW2dyb3VwQ29kZSwgb3B0aW9uSWRdKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0Lm9wdGlvbkdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKG9nID0+IG9nLmNvZGUgPT09IGdyb3VwQ29kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Lm9wdGlvbnMuZmluZChvID0+IG8uaWQgPT09IG9wdGlvbklkKT8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcclxuICAgICAgICAgICAgICAgIG5hbWVDb250cm9sLnNldFZhbHVlKGAke3RoaXMucHJvZHVjdC5uYW1lfSAke25hbWV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKHZhbHVlKS5ldmVyeSh2ID0+IHYgIT0gbnVsbCk7XHJcbiAgICAgICAgICAgIGlmIChhbGxTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ1ZhcmlhbnQgPSB0aGlzLnByb2R1Y3QudmFyaWFudHMuZmluZCh2ID0+XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmV2ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoW2dyb3VwQ29kZSwgb3B0aW9uSWRdKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vcHRpb25zLmZpbmQobyA9PiBvLmdyb3VwSWQgPT09IHRoaXMuZ2V0R3JvdXBJZEZyb21Db2RlKGdyb3VwQ29kZSkpPy5pZCA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybSgpIHtcclxuICAgICAgICBjb25zdCB7IG5hbWUsIHNrdSwgb3B0aW9ucyB9ID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhc2t1IHx8ICFvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uSWRzID0gT2JqZWN0LnZhbHVlcyhvcHRpb25zKS5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLnJlc29sdmVXaXRoKHtcclxuICAgICAgICAgICAgcHJvZHVjdElkOiB0aGlzLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgIHNrdSxcclxuICAgICAgICAgICAgb3B0aW9uSWRzLFxyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGU6IHRoaXMucHJvZHVjdC5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEdyb3VwQ29kZUZyb21JZChpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0Lm9wdGlvbkdyb3Vwcy5maW5kKG9nID0+IG9nLmlkID09PSBpZCk/LmNvZGUgPz8gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRHcm91cElkRnJvbUNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0Lm9wdGlvbkdyb3Vwcy5maW5kKG9nID0+IG9nLmNvZGUgPT09IGNvZGUpPy5pZCA/PyAnJztcclxuICAgIH1cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgdmRyRGlhbG9nVGl0bGU+XHJcbiAgICB7eyAnY2F0YWxvZy5jcmVhdGUtcHJvZHVjdC12YXJpYW50JyB8IHRyYW5zbGF0ZSB9fVxyXG48L25nLXRlbXBsYXRlPlxyXG48Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cIm9wdGlvbnNcIiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwib3B0aW9uR3JvdXAubmFtZVwiICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBwcm9kdWN0Lm9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICA8bmctc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwib3B0aW9uR3JvdXAub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm9wdGlvbkdyb3VwLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGNsci1hbGVydFxyXG4gICAgICAgICAgICAqbmdJZj1cInByb2R1Y3Qub3B0aW9uR3JvdXBzLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgICAgICAgIGNsckFsZXJ0VHlwZT1cIndhcm5pbmdcIlxyXG4gICAgICAgICAgICBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkLXNwYW5cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGNsci1hbGVydC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGVydC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuY2Fubm90LWNyZWF0ZS12YXJpYW50cy13aXRob3V0LW9wdGlvbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvY2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJleGlzdGluZ1ZhcmlhbnRcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICA8Y2xyLWFsZXJ0IGNsckFsZXJ0VHlwZT1cIndhcm5pbmdcIiBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgIDxjbHItYWxlcnQtaXRlbT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWxlcnQtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnByb2R1Y3QtdmFyaWFudC1leGlzdHMnIHwgdHJhbnNsYXRlIH19OiB7eyBleGlzdGluZ1ZhcmlhbnQubmFtZSB9fSAoe3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdWYXJpYW50LnNrdVxyXG4gICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Nsci1hbGVydC1pdGVtPlxyXG4gICAgICAgIDwvY2xyLWFsZXJ0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkIG10LTJcIj5cclxuICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIC8+XHJcbiAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnNrdScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwic2t1XCIgLz5cclxuICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuPG5nLXRlbXBsYXRlIHZkckRpYWxvZ0J1dHRvbnM+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiPnt7ICdjb21tb24uY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgIChjbGljayk9XCJjb25maXJtKClcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGV4aXN0aW5nVmFyaWFudCB8fCBwcm9kdWN0Lm9wdGlvbkdyb3Vwcy5sZW5ndGggPT09IDBcIlxyXG4gICAgPlxyXG4gICAgICAgIHt7ICdjb21tb24uY29uZmlybScgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb2R1Y3QtdmFyaWFudC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBZSxXQUFXLEVBQXlCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTzdGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7OztBQVN0RSxNQUFNLE9BQU8sbUNBQW1DO0lBWTVDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVDVDLFNBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMxQixJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUMvQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQVMsRUFBRSxDQUFDO1NBQy9DLENBQUMsQ0FBQztJQUk0QyxDQUFDO0lBRWhELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxH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Q0FBQztRQUNwRSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQixHQUFHO1lBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsU0FBUztZQUNULFlBQVksRUFBRTtnQkFDVjtvQkFDSSxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO29CQUN2QyxJQUFJO2lCQUNQO2FBQ0o7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsRUFBVTtRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBWTtRQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM1RSxDQUFDOzhHQWpGUSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyx5RUNqQmhELDA0RUFnRGM7OzJGRC9CRCxtQ0FBbUM7a0JBTi9DLFNBQVM7K0JBQ0ksbUNBQW1DLG1CQUc1Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtUmVjb3JkLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxuICAgIEN1cnJlbmN5Q29kZSxcclxuICAgIERpYWxvZyxcclxuICAgIEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItY3JlYXRlLXByb2R1Y3QtdmFyaWFudC1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZVByb2R1Y3RWYXJpYW50RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgRGlhbG9nPENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQ+LCBPbkluaXQge1xyXG4gICAgcmVzb2x2ZVdpdGg6IChyZXN1bHQ/OiBDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0KSA9PiB2b2lkO1xyXG4gICAgcHJvZHVjdDogTm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnlbJ3Byb2R1Y3QnXT47XHJcbiAgICBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBza3U6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgcHJpY2U6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgb3B0aW9uczogdGhpcy5mb3JtQnVpbGRlci5yZWNvcmQ8c3RyaW5nPih7fSksXHJcbiAgICB9KTtcclxuICAgIGV4aXN0aW5nVmFyaWFudDogTm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnlbJ3Byb2R1Y3QnXT5bJ3ZhcmlhbnRzJ11bbnVtYmVyXSB8IHVuZGVmaW5lZDtcclxuICAgIGN1cnJlbmN5Q29kZTogQ3VycmVuY3lDb2RlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVuY3lDb2RlID0gdGhpcy5wcm9kdWN0LnZhcmlhbnRzWzBdLmN1cnJlbmN5Q29kZTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwIG9mIHRoaXMucHJvZHVjdC5vcHRpb25Hcm91cHMpIHtcclxuICAgICAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtUmVjb3JkKS5hZGRDb250cm9sKFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uR3JvdXAuY29kZSxcclxuICAgICAgICAgICAgICAgIG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnNSZWNvcmQgPSB0aGlzLmZvcm0uZ2V0KCdvcHRpb25zJykgYXMgRm9ybVJlY29yZDtcclxuICAgICAgICBvcHRpb25zUmVjb3JkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ25hbWUnKTtcclxuICAgICAgICAgICAgY29uc3QgYWxsTnVsbCA9IE9iamVjdC52YWx1ZXModmFsdWUpLmV2ZXJ5KHYgPT4gdiA9PSBudWxsKTtcclxuICAgICAgICAgICAgaWYgKCFhbGxOdWxsICYmIHZhbHVlICYmIG5hbWVDb250cm9sICYmICFuYW1lQ29udHJvbC5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChbZ3JvdXBDb2RlLCBvcHRpb25JZF0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3Qub3B0aW9uR3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQob2cgPT4gb2cuY29kZSA9PT0gZ3JvdXBDb2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ub3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uSWQpPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuam9pbignICcpO1xyXG4gICAgICAgICAgICAgICAgbmFtZUNvbnRyb2wuc2V0VmFsdWUoYCR7dGhpcy5wcm9kdWN0Lm5hbWV9ICR7bmFtZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhbGxTZWxlY3RlZCA9IE9iamVjdC52YWx1ZXModmFsdWUpLmV2ZXJ5KHYgPT4gdiAhPSBudWxsKTtcclxuICAgICAgICAgICAgaWYgKGFsbFNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nVmFyaWFudCA9IHRoaXMucHJvZHVjdC52YXJpYW50cy5maW5kKHYgPT5cclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZXZlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChbZ3JvdXBDb2RlLCBvcHRpb25JZF0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Lm9wdGlvbnMuZmluZChvID0+IG8uZ3JvdXBJZCA9PT0gdGhpcy5nZXRHcm91cElkRnJvbUNvZGUoZ3JvdXBDb2RlKSk/LmlkID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtKCkge1xyXG4gICAgICAgIGNvbnN0IHsgbmFtZSwgc2t1LCBvcHRpb25zLCBwcmljZSB9ID0gdGhpcy5mb3JtLnZhbHVlO1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhc2t1IHx8ICFvcHRpb25zIHx8ICFwcmljZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvcHRpb25JZHMgPSBPYmplY3QudmFsdWVzKG9wdGlvbnMpLmZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xyXG4gICAgICAgICAgICBwcm9kdWN0SWQ6IHRoaXMucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgc2t1LFxyXG4gICAgICAgICAgICBwcmljZTogTnVtYmVyKHByaWNlKSxcclxuICAgICAgICAgICAgb3B0aW9uSWRzLFxyXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGU6IHRoaXMucHJvZHVjdC5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEdyb3VwQ29kZUZyb21JZChpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0Lm9wdGlvbkdyb3Vwcy5maW5kKG9nID0+IG9nLmlkID09PSBpZCk/LmNvZGUgPz8gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRHcm91cElkRnJvbUNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0Lm9wdGlvbkdyb3Vwcy5maW5kKG9nID0+IG9nLmNvZGUgPT09IGNvZGUpPy5pZCA/PyAnJztcclxuICAgIH1cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgdmRyRGlhbG9nVGl0bGU+XHJcbiAgICB7eyAnY2F0YWxvZy5jcmVhdGUtcHJvZHVjdC12YXJpYW50JyB8IHRyYW5zbGF0ZSB9fVxyXG48L25nLXRlbXBsYXRlPlxyXG48Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cIm9wdGlvbnNcIiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwib3B0aW9uR3JvdXAubmFtZVwiICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBwcm9kdWN0Lm9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJvcHRpb25Hcm91cC5vcHRpb25zXCIgW2Zvcm1Db250cm9sTmFtZV09XCJvcHRpb25Hcm91cC5jb2RlXCIgYmluZExhYmVsPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiIGFwcGVuZFRvPVwiYm9keVwiPlxyXG4gICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxjbHItYWxlcnQgKm5nSWY9XCJwcm9kdWN0Lm9wdGlvbkdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbHJBbGVydFR5cGU9XCJ3YXJuaW5nXCIgW2NsckFsZXJ0Q2xvc2FibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JpZC1zcGFuXCI+XHJcbiAgICAgICAgICAgIDxjbHItYWxlcnQtaXRlbT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWxlcnQtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmNhbm5vdC1jcmVhdGUtdmFyaWFudHMtd2l0aG91dC1vcHRpb25zJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Nsci1hbGVydC1pdGVtPlxyXG4gICAgICAgIDwvY2xyLWFsZXJ0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZXhpc3RpbmdWYXJpYW50XCIgY2xhc3M9XCJtdC0yXCI+XHJcbiAgICAgICAgPGNsci1hbGVydCBjbHJBbGVydFR5cGU9XCJ3YXJuaW5nXCIgW2NsckFsZXJ0Q2xvc2FibGVdPVwiZmFsc2VcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICA8Y2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFsZXJ0LXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5wcm9kdWN0LXZhcmlhbnQtZXhpc3RzJyB8IHRyYW5zbGF0ZSB9fToge3sgZXhpc3RpbmdWYXJpYW50Lm5hbWUgfX0gKHt7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdWYXJpYW50LnNrdVxyXG4gICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Nsci1hbGVydC1pdGVtPlxyXG4gICAgICAgIDwvY2xyLWFsZXJ0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkIG10LTJcIj5cclxuICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIC8+XHJcbiAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnNrdScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwic2t1XCIgLz5cclxuICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cucHJpY2UnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDx2ZHItY3VycmVuY3ktaW5wdXQgbmFtZT1cInByaWNlXCIgW2N1cnJlbmN5Q29kZV09XCJjdXJyZW5jeUNvZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVwiIC8+XHJcbiAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG48L2Zvcm0+XHJcbjxuZy10ZW1wbGF0ZSB2ZHJEaWFsb2dCdXR0b25zPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwiY2FuY2VsKClcIj57eyAnY29tbW9uLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJjb25maXJtKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZCB8fCBleGlzdGluZ1ZhcmlhbnQgfHwgcHJvZHVjdC5vcHRpb25Hcm91cHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAge3sgJ2NvbW1vbi5jb25maXJtJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+Il19