@ifsworld/granite-components 7.7.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/date-picker/lib/date-picker-base.d.ts +3 -3
  2. package/date-picker/lib/date-picker-trigger-for.directive.d.ts +1 -1
  3. package/date-picker/lib/date-picker.component.d.ts +1 -1
  4. package/date-picker/lib/date-picker.module.d.ts +6 -7
  5. package/date-picker/lib/date-range-picker.component.d.ts +1 -1
  6. package/esm2020/date-picker/lib/date-picker-base.mjs +4 -4
  7. package/esm2020/date-picker/lib/date-picker-trigger-for.directive.mjs +4 -4
  8. package/esm2020/date-picker/lib/date-picker.component.mjs +9 -9
  9. package/esm2020/date-picker/lib/date-picker.module.mjs +14 -20
  10. package/esm2020/date-picker/lib/date-range-picker.component.mjs +9 -9
  11. package/esm2020/lib/arrange-grid/arrange-grid-item.component.mjs +12 -12
  12. package/esm2020/lib/arrange-grid/arrange-grid.component.mjs +19 -19
  13. package/esm2020/lib/arrange-grid/arrange-grid.module.mjs +5 -5
  14. package/esm2020/lib/badge/badge.component.mjs +5 -5
  15. package/esm2020/lib/badge/badge.module.mjs +5 -5
  16. package/esm2020/lib/button/button.component.mjs +9 -9
  17. package/esm2020/lib/button/button.module.mjs +5 -5
  18. package/esm2020/lib/checkbox/checkbox-group.component.mjs +4 -4
  19. package/esm2020/lib/checkbox/checkbox.component.mjs +5 -5
  20. package/esm2020/lib/checkbox/checkbox.module.mjs +5 -5
  21. package/esm2020/lib/chips/chip-input.mjs +25 -25
  22. package/esm2020/lib/chips/chip-list.component.mjs +47 -47
  23. package/esm2020/lib/chips/chip.component.mjs +48 -48
  24. package/esm2020/lib/chips/chips.module.mjs +5 -5
  25. package/esm2020/lib/core/common-behaviors/disabled.mjs +4 -4
  26. package/esm2020/lib/core/core.module.mjs +5 -5
  27. package/esm2020/lib/core/devices/client-input-desktop.directive.mjs +4 -4
  28. package/esm2020/lib/core/devices/client-input-touch.directive.mjs +4 -4
  29. package/esm2020/lib/core/devices/client-output-desktop.directive.mjs +4 -4
  30. package/esm2020/lib/core/devices/client-output-touch.directive.mjs +4 -4
  31. package/esm2020/lib/core/pipes/pure-pipes.module.mjs +5 -5
  32. package/esm2020/lib/core/pipes/title.pipe.mjs +4 -4
  33. package/esm2020/lib/core/radio-checkbox-base.mjs +4 -4
  34. package/esm2020/lib/grid/grid.component.mjs +10 -10
  35. package/esm2020/lib/grid/grid.module.mjs +5 -5
  36. package/esm2020/lib/icon/icon.component.mjs +5 -5
  37. package/esm2020/lib/icon/icon.module.mjs +5 -5
  38. package/esm2020/lib/input-field/input-field.component.mjs +7 -7
  39. package/esm2020/lib/input-field/input-field.module.mjs +5 -5
  40. package/esm2020/lib/label/label.component.mjs +4 -4
  41. package/esm2020/lib/label/label.module.mjs +5 -5
  42. package/esm2020/lib/menu/divider.directive.mjs +4 -4
  43. package/esm2020/lib/menu/menu-base.mjs +31 -31
  44. package/esm2020/lib/menu/menu-item.component.mjs +8 -8
  45. package/esm2020/lib/menu/menu-touch-close.component.mjs +5 -5
  46. package/esm2020/lib/menu/menu-touch-title.component.mjs +8 -8
  47. package/esm2020/lib/menu/menu-trigger-for.directive.mjs +4 -4
  48. package/esm2020/lib/menu/menu.component.mjs +8 -8
  49. package/esm2020/lib/menu/menu.module.mjs +5 -5
  50. package/esm2020/lib/menu/title.directive.mjs +4 -4
  51. package/esm2020/lib/radio-button/radio-button.component.mjs +5 -5
  52. package/esm2020/lib/radio-button/radio-button.module.mjs +5 -5
  53. package/esm2020/lib/radio-button/radio-group.component.mjs +4 -4
  54. package/esm2020/lib/toggle-switch/toggle-switch.component.mjs +5 -5
  55. package/esm2020/lib/toggle-switch/toggle-switch.module.mjs +5 -5
  56. package/esm2020/table/lib/cell/cell-align/cell-align-classes.directive.mjs +4 -4
  57. package/esm2020/table/lib/cell/cell.mjs +4 -4
  58. package/esm2020/table/lib/cell/table-data-cell.component.mjs +5 -5
  59. package/esm2020/table/lib/cell/table-header-cell.component.mjs +5 -5
  60. package/esm2020/table/lib/column/table-column.directive.mjs +4 -4
  61. package/esm2020/table/lib/table.component.mjs +9 -9
  62. package/esm2020/table/lib/table.module.mjs +5 -5
  63. package/esm2020/tooltip/lib/tooltip-trigger-for.directive.mjs +4 -4
  64. package/esm2020/tooltip/lib/tooltip.component.mjs +5 -5
  65. package/esm2020/tooltip/lib/tooltip.module.mjs +5 -5
  66. package/fesm2015/ifsworld-granite-components-date-picker.mjs +32 -38
  67. package/fesm2015/ifsworld-granite-components-date-picker.mjs.map +1 -1
  68. package/fesm2015/ifsworld-granite-components-table.mjs +26 -26
  69. package/fesm2015/ifsworld-granite-components-table.mjs.map +1 -1
  70. package/fesm2015/ifsworld-granite-components-tooltip.mjs +11 -11
  71. package/fesm2015/ifsworld-granite-components-tooltip.mjs.map +1 -1
  72. package/fesm2015/ifsworld-granite-components.mjs +342 -342
  73. package/fesm2015/ifsworld-granite-components.mjs.map +1 -1
  74. package/fesm2020/ifsworld-granite-components-date-picker.mjs +32 -38
  75. package/fesm2020/ifsworld-granite-components-date-picker.mjs.map +1 -1
  76. package/fesm2020/ifsworld-granite-components-table.mjs +26 -26
  77. package/fesm2020/ifsworld-granite-components-table.mjs.map +1 -1
  78. package/fesm2020/ifsworld-granite-components-tooltip.mjs +11 -11
  79. package/fesm2020/ifsworld-granite-components-tooltip.mjs.map +1 -1
  80. package/fesm2020/ifsworld-granite-components.mjs +342 -342
  81. package/fesm2020/ifsworld-granite-components.mjs.map +1 -1
  82. package/lib/arrange-grid/arrange-grid-item.component.d.ts +1 -1
  83. package/lib/arrange-grid/arrange-grid.component.d.ts +1 -1
  84. package/lib/badge/badge.component.d.ts +1 -1
  85. package/lib/button/button.component.d.ts +2 -2
  86. package/lib/checkbox/checkbox-group.component.d.ts +1 -1
  87. package/lib/checkbox/checkbox.component.d.ts +1 -1
  88. package/lib/chips/chip-input.d.ts +1 -1
  89. package/lib/chips/chip-list.component.d.ts +1 -1
  90. package/lib/chips/chip.component.d.ts +1 -1
  91. package/lib/core/client-environment.d.ts +2 -2
  92. package/lib/core/common-behaviors/disabled.d.ts +1 -1
  93. package/lib/core/devices/client-input-desktop.directive.d.ts +1 -1
  94. package/lib/core/devices/client-input-touch.directive.d.ts +1 -1
  95. package/lib/core/devices/client-output-desktop.directive.d.ts +1 -1
  96. package/lib/core/devices/client-output-touch.directive.d.ts +1 -1
  97. package/lib/core/pipes/title.pipe.d.ts +1 -1
  98. package/lib/core/radio-checkbox-base.d.ts +1 -1
  99. package/lib/core/types.d.ts +2 -2
  100. package/lib/grid/grid.component.d.ts +2 -2
  101. package/lib/icon/icon.component.d.ts +1 -1
  102. package/lib/input-field/input-field.component.d.ts +1 -1
  103. package/lib/label/label.component.d.ts +1 -1
  104. package/lib/menu/divider.directive.d.ts +1 -1
  105. package/lib/menu/menu-base.d.ts +3 -3
  106. package/lib/menu/menu-item.component.d.ts +1 -1
  107. package/lib/menu/menu-panel.d.ts +1 -1
  108. package/lib/menu/menu-positions.d.ts +2 -2
  109. package/lib/menu/menu-touch-close.component.d.ts +1 -1
  110. package/lib/menu/menu-touch-title.component.d.ts +1 -1
  111. package/lib/menu/menu-trigger-for.directive.d.ts +1 -1
  112. package/lib/menu/menu.component.d.ts +1 -1
  113. package/lib/menu/title.directive.d.ts +1 -1
  114. package/lib/radio-button/radio-button.component.d.ts +1 -1
  115. package/lib/radio-button/radio-group.component.d.ts +1 -1
  116. package/lib/toggle-switch/toggle-switch.component.d.ts +1 -1
  117. package/package.json +18 -15
  118. package/src/lib/core/style/_mixins.scss +10 -6
  119. package/src/lib/core/style/_overlay.scss +2 -2
  120. package/src/lib/core/style/_tokens.scss +1 -1
  121. package/src/lib/core/style/_z-index.scss +4 -0
  122. package/table/lib/cell/cell-align/cell-align-classes.directive.d.ts +1 -1
  123. package/table/lib/cell/cell.d.ts +1 -1
  124. package/table/lib/cell/table-data-cell.component.d.ts +1 -1
  125. package/table/lib/cell/table-header-cell.component.d.ts +1 -1
  126. package/table/lib/column/table-column.directive.d.ts +1 -1
  127. package/table/lib/table.component.d.ts +1 -1
  128. package/table/lib/table.types.d.ts +1 -1
  129. package/tooltip/lib/tooltip-trigger-for.directive.d.ts +1 -1
  130. package/tooltip/lib/tooltip.component.d.ts +1 -1
  131. package/date-picker/ifsworld-granite-components-date-picker.d.ts +0 -5
  132. package/date-picker/package.json +0 -19
  133. package/ifsworld-granite-components.d.ts +0 -5
  134. package/table/ifsworld-granite-components-table.d.ts +0 -5
  135. package/table/package.json +0 -18
  136. package/tooltip/ifsworld-granite-components-tooltip.d.ts +0 -5
  137. package/tooltip/package.json +0 -10
@@ -656,9 +656,9 @@ export class GraniteMenuTriggerForDirective {
656
656
  : target * (-Math.pow(2, (-10 * current) / end) + 1) + offset;
657
657
  }
658
658
  }
659
- GraniteMenuTriggerForDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuTriggerForDirective, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: GRANITE_MENU_PANEL, optional: true }, { token: GRANITE_CLIENT_INPUT, optional: true }, { token: GRANITE_CLIENT_OUTPUT, optional: true }, { token: i2.GraniteMenuItemComponent, optional: true, self: true }, { token: i3.Directionality, optional: true }, { token: i4.FocusMonitor }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
660
- GraniteMenuTriggerForDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: GraniteMenuTriggerForDirective, selector: "[graniteMenuTriggerFor]", inputs: { menu: ["graniteMenuTriggerFor", "menu"], openOnClick: "openOnClick" }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "mousedown": "_handleMousedown($event)", "keydown": "_handleKeydown($event)", "click": "_handleClick($event)" }, properties: { "attr.aria-expanded": "_isMenuOpen || null", "attr.aria-controls": "_isMenuOpen ? menu.panelId : null" }, classAttribute: "granite-menu-trigger" }, usesOnChanges: true, ngImport: i0 });
661
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuTriggerForDirective, decorators: [{
659
+ GraniteMenuTriggerForDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuTriggerForDirective, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: GRANITE_MENU_PANEL, optional: true }, { token: GRANITE_CLIENT_INPUT, optional: true }, { token: GRANITE_CLIENT_OUTPUT, optional: true }, { token: i2.GraniteMenuItemComponent, optional: true, self: true }, { token: i3.Directionality, optional: true }, { token: i4.FocusMonitor }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
660
+ GraniteMenuTriggerForDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: GraniteMenuTriggerForDirective, selector: "[graniteMenuTriggerFor]", inputs: { menu: ["graniteMenuTriggerFor", "menu"], openOnClick: "openOnClick" }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "mousedown": "_handleMousedown($event)", "keydown": "_handleKeydown($event)", "click": "_handleClick($event)" }, properties: { "attr.aria-expanded": "_isMenuOpen || null", "attr.aria-controls": "_isMenuOpen ? menu.panelId : null" }, classAttribute: "granite-menu-trigger" }, usesOnChanges: true, ngImport: i0 });
661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuTriggerForDirective, decorators: [{
662
662
  type: Directive,
663
663
  args: [{
664
664
  selector: `[graniteMenuTriggerFor]`,
@@ -702,4 +702,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
702
702
  }], openOnClick: [{
703
703
  type: Input
704
704
  }] } });
705
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10cmlnZ2VyLWZvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS10cmlnZ2VyLWZvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsSUFBSSxFQUVKLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUNMLFlBQVksRUFFWiwrQkFBK0IsR0FDaEMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUdMLE9BQU8sRUFDUCxhQUFhLEdBSWQsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUNMLGFBQWEsRUFDYixTQUFTLEVBQ1QsS0FBSyxFQUVMLEVBQUUsSUFBSSxZQUFZLEVBQ2xCLFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRSw2Q0FBNkM7QUFDN0MsT0FBTyxFQUdM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NkJBTWxCLG9CQUFvQiw2QkFLcEIscUJBQXFCLDJLQWlCckIsUUFBUTtnSEE1RVAsOEJBQThCOzRGQUE5Qiw4QkFBOEI7a0JBWjFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxzQkFBc0I7d0JBQzdCLGVBQWUsRUFBRSxNQUFNO3dCQUN2QixzQkFBc0IsRUFBRSxxQkFBcUI7d0JBQzdDLHNCQUFzQixFQUFFLG1DQUFtQzt3QkFDM0QsYUFBYSxFQUFFLDBCQUEwQjt3QkFDekMsV0FBVyxFQUFFLHdCQUF3Qjt3QkFDckMsU0FBUyxFQUFFLHNCQUFzQjtxQkFDbEM7aUJBQ0Y7OzBCQWlESSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLFFBQVE7OzBCQUtSLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsUUFBUTs7MEJBSVIsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixRQUFROzswQkFXUixRQUFROzswQkFBSSxJQUFJOzswQkFFaEIsUUFBUTs7MEJBR1IsTUFBTTsyQkFBQyxRQUFROzRDQXRFbEIsSUFBSTtzQkFESCxLQUFLO3VCQUFDLHVCQUF1QjtnQkFHckIsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgRm9jdXNNb25pdG9yLFxuICBGb2N1c09yaWdpbixcbiAgaXNGYWtlTW91c2Vkb3duRnJvbVNjcmVlblJlYWRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbiAgSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3MsXG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlSZWYsXG4gIFBvc2l0aW9uU3RyYXRlZ3ksXG4gIFZlcnRpY2FsQ29ubmVjdGlvblBvcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHtcbiAgYXNhcFNjaGVkdWxlcixcbiAgZnJvbUV2ZW50LFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YgYXMgb2JzZXJ2YWJsZU9mLFxuICBTdWJzY3JpcHRpb24sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBfTWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuL21lbnUtYmFzZSc7XG5pbXBvcnQgeyBHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL21lbnUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xvc2VkRXZlbnRUeXBlLCBHUkFOSVRFX01FTlVfUEFORUwgfSBmcm9tICcuL21lbnUtcGFuZWwnO1xuXG4vLyNyZWdpb24gLS0tIFRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS1cbmltcG9ydCB7XG4gIENsaWVudElucHV0SW50ZXJmYWNlLFxuICBDbGllbnRPdXRwdXRJbnRlcmZhY2UsXG4gIEdSQU5JVEVfQ0xJRU5UX0lOUFVULFxuICBHUkFOSVRFX0NMSUVOVF9PVVRQVVQsXG59IGZyb20gJy4uL2NvcmUvY2xpZW50LWVudmlyb25tZW50JztcbmltcG9ydCB7IHRocm93R3Jhbml0ZU1lbnVNaXNzaW5nRXJyb3IgfSBmcm9tICcuL21lbnUtZXJyb3JzJztcblxuLyoqIE9wdGlvbnMgZm9yIGJpbmRpbmcgYSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVyLiAqL1xuY29uc3QgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zID0gbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7XG4gIHBhc3NpdmU6IHRydWUsXG59KTtcbi8vI2VuZHJlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuXG4vKipcbiAqIERpcmVjdGl2ZSB1c2VkIHRvIHR1cm4gYSBidXR0b24gZWxlbWVudCBpbnRvIGEgKHBvcHVwKSBtZW51IHRyaWdnZXJcbiAqXG4gKiBTdHJpcHBlZC1kb3duIHZlcnNpb24gb2YgQW5ndWxhciBNYXRlcmlhbCdzIG1lbnUgdHJpZ2dlciBkaXJlY3RpdmUgKC4uLi9tZW51L21lbnUtdHJpZ2dlci50cylcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW2dyYW5pdGVNZW51VHJpZ2dlckZvcl1gLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdncmFuaXRlLW1lbnUtdHJpZ2dlcicsIC8vIFJlcXVpcmVkIGZvciB0ZXN0IGhhcm5lc3MgaG9zdCBzZWxlY3RvclxuICAgICdhcmlhLWhhc3BvcHVwJzogJ3RydWUnLFxuICAgICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdfaXNNZW51T3BlbiB8fCBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1jb250cm9sc10nOiAnX2lzTWVudU9wZW4gPyBtZW51LnBhbmVsSWQgOiBudWxsJyxcbiAgICAnKG1vdXNlZG93biknOiAnX2hhbmRsZU1vdXNlZG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24pJzogJ19oYW5kbGVLZXlkb3duKCRldmVudCknLFxuICAgICcoY2xpY2spJzogJ19oYW5kbGVDbGljaygkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR3Jhbml0ZU1lbnVUcmlnZ2VyRm9yRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgLyoqIFJlZmVyZW5jZXMgdGhlIG1lbnUgaW5zdGFuY2UgdGhhdCB0aGUgdHJpZ2dlciBpcyBhc3NvY2lhdGVkIHdpdGguICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnZ3Jhbml0ZU1lbnVUcmlnZ2VyRm9yJylcbiAgbWVudTogX01lbnVCYXNlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIG9wZW5PbkNsaWNrPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgbWVudSBpcyBvcGVuICovXG4gIF9pc01lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gVHJhY2tpbmcgaW5wdXQgdHlwZSBpcyBuZWNlc3Nhcnkgc28gaXQncyBwb3NzaWJsZSB0byBvbmx5IGF1dG8tZm9jdXNcbiAgLy8gdGhlIGZpcnN0IGl0ZW0gb2YgdGhlIGxpc3Qgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZFxuICBfb3BlbmVkQnk6ICdtb3VzZScgfCAndG91Y2gnIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfaG92ZXJTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX21lbnVDbG9zZVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgcHJpdmF0ZSBfcG9ydGFsOiBUZW1wbGF0ZVBvcnRhbCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2RvY3VtZW50PzogRG9jdW1lbnQ7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbiAgLy8gLS0tIEhlcmUgYmUgcG9vciBtYW4ncyB0b3VjaCBnZXN0dXJlcyAtLS0gLy9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggSGFtbWVyIG9yIG90aGVyIGdlc3R1cmUgbGlicmFyeVxuXG4gIHByaXZhdGUgX3RvdWNoU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoVGltZVRha2VuOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoU3RhcnRYOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoU3RhcnRZOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoQ3VycmVudFg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG91Y2hDdXJyZW50WTogbnVtYmVyO1xuICBwcml2YXRlIF90b3VjaFRyYW5zbGF0ZVg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG91Y2hMb2NrZWRYOiBib29sZWFuIHwgbnVsbDtcbiAgcHJpdmF0ZSBfdG91Y2hNYXhYOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoVG91Y2hpbmdFbGVtZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuXG4gICAgLyoqIElmIHRoaXMgaXMgYSBfc3VibWVudV8gdHJpZ2dlciwgaXQgd2lsbCBoYXZlIGEgcGFyZW50IG1lbnUgKi9cbiAgICBASW5qZWN0KEdSQU5JVEVfTUVOVV9QQU5FTClcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByaXZhdGUgX3BhcmVudE1lbnU6IF9NZW51QmFzZUNvbXBvbmVudCxcblxuICAgIC8vI3JlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgIC8qKiBDbGllbnQgaW5wdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9JTlBVVClcbiAgICBAT3B0aW9uYWwoKVxuICAgIHB1YmxpYyBfY2xpZW50SW5wdXQ6IENsaWVudElucHV0SW50ZXJmYWNlLFxuXG4gICAgLyoqIENsaWVudCBvdXRwdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9PVVRQVVQpXG4gICAgQE9wdGlvbmFsKClcbiAgICBwdWJsaWMgX2NsaWVudE91dHB1dDogQ2xpZW50T3V0cHV0SW50ZXJmYWNlLFxuICAgIC8vI2VuZHJlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBpcyBhIF9zdWJtZW51XyB0cmlnZ2VyLCB0aGVyZSBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIG1lbnVcbiAgICAgKiBpdGVtIGRpcmVjdGl2ZSBwcmVzZW50IGFzIHdlbGw6XG4gICAgICpcbiAgICAgKiAgICAgPGJ1dHRvbiBncmFuaXRlTWVudUl0ZW0gW2dyYW5pdGVNZW51VHJpZ2dlckZvcl09XCIuLi5cIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBeLS0gVGhpcyBvbmVcbiAgICAgKi9cbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByaXZhdGUgX21lbnVJdGVtSW5zdGFuY2U6IEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCxcblxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudD86IGFueVxuICApIHtcbiAgICBfZWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAndG91Y2hzdGFydCcsXG4gICAgICB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIGlmIChfbWVudUl0ZW1JbnN0YW5jZSkge1xuICAgICAgX21lbnVJdGVtSW5zdGFuY2UuX3RyaWdnZXJzU3VibWVudSA9IHRoaXMudHJpZ2dlcnNTdWJtZW51KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZG9jdW1lbnQgPSBkb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tZW51KSB7XG4gICAgICB0aGlzLl9oYW5kbGVNZW51Q2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8vIHJlbW92ZWQgY2hlY2tNZW51IGhlcmUgdG8gYXZvaWQgZXJyb3JzIGluIGR5bmFtaWNhbGx5IGdlbmFyYXRlZCBtZW51c1xuICAgIC8vIG1lbnUgaXMgY2hlY2tlZCB3aGVuIG9wZW5pbmcgdGhlIG1lbnVcbiAgICAvLyB0aGlzLl9jaGVja01lbnUoKTtcbiAgICB0aGlzLl9oYW5kbGVIb3ZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIC8vI3JlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgICAgdGhpcy5yZW1vdmVPdmVybGF5TGlzdGVuZXJzKCk7XG4gICAgICAvLyNlbmRyZWdpb24gLS0tIFRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS1cbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAndG91Y2hzdGFydCcsXG4gICAgICB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGNoYW5nZSBvZiBhc3NvY2lhdGVkIG1lbnUgKi9cbiAgX2hhbmRsZU1lbnVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBDbG9zZSB0aGUgbWVudSBvdmVybGF5IHdoZW4gdGhlIG1lbnUgaXRzZWxmIHNheXMgaXQgd2FudHMgdG8gYmUgY2xvc2VkXG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgY29uc3QgY2xvc2VkID0gdGhpcy5tZW51LmNsb3NlZCBhcyBPYnNlcnZhYmxlPENsb3NlZEV2ZW50VHlwZT47XG5cbiAgICAgIHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbiA9IGNsb3NlZC5zdWJzY3JpYmUoKHJlYXNvbikgPT4ge1xuICAgICAgICAvLyNyZWdpb24gLS0tIFRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS1cbiAgICAgICAgaWYgKHRoaXMubWVudS5faXNDbG9zaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudS5faXNDbG9zaW5nID0gdHJ1ZTtcblxuICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBtZW51IGFuZCB0ZWxsIGFueSBwYXJlbnQgdG8gcmVzdG9yZSBpdHMgcG9zaXRpb25cbiAgICAgICAgaWYgKHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcpIHtcbiAgICAgICAgICAvLyBGaXJzdCB3ZSB3YWl0IGZvciBhbnkgcnVubmluZyBhbmltYXRpb24gdG8gY29tcGxldGVcbiAgICAgICAgICBjb25zdCBydW5uaW5nQW5pbWF0aW9uRG9uZTogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tZW51Ll9pc0FuaW1hdGluZ1xuICAgICAgICAgICAgPyB0aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmVcbiAgICAgICAgICAgIDogb2JzZXJ2YWJsZU9mKFtudWxsXSk7XG5cbiAgICAgICAgICBydW5uaW5nQW5pbWF0aW9uRG9uZVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSwgZGVsYXkoMCwgYXNhcFNjaGVkdWxlcikpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hbmltYXRlQ2xvc2VNZW51KHJlYXNvbiAhPT0gJ2tleWRvd24nLCByZWFzb24gPT09ICdjbGljaycpO1xuICAgICAgICAgICAgICB0aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmVcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpLCBkZWxheSgwLCBhc2FwU2NoZWR1bGVyKSlcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9kZXN0cm95TWVudSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vI2VuZHJlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lNZW51KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNsaWNrIGNsb3NlZCB0aGUgbWVudSwgd2Ugc2hvdWxkIGNsb3NlIHRoZSBlbnRpcmUgY2hhaW4gb2YgbmVzdGVkIG1lbnVzLlxuICAgICAgICBpZiAoKHJlYXNvbiA9PT0gJ2NsaWNrJyB8fCByZWFzb24gPT09ICd0YWInKSAmJiB0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICAgICAgdGhpcy5fcGFyZW50TWVudS5jbG9zZWQuZW1pdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWVudU9wZW47XG4gIH1cblxuICAvKiogT3BlbiB0aGUgYXNzb2NpYXRlZCBtZW51ICovXG4gIG9wZW5NZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc01lbnVPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hlY2tNZW51KCk7XG5cbiAgICB0aGlzLm1lbnUucGFyZW50TWVudSA9IHRoaXMudHJpZ2dlcnNTdWJtZW51KClcbiAgICAgID8gdGhpcy5fcGFyZW50TWVudVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5tZW51LmRpcmVjdGlvbiA9IHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xuXG4gICAgaWYgKHRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIC8vIE1lbnUgdHJpZ2dlcnMgaW5oZXJpdCB0YXJnZXQgZGV2aWNlIHR5cGVzIGZyb20gdGhlaXIgcGFyZW50LlxuICAgICAgLy8gVWx0aW1hdGVseSBpdCBpcyB0aGUgcm9vdCB0cmlnZ2VyIHRoYXQgZGV0ZXJtaW5lcyBkZXZpY2UgdHlwZXMgZm9yXG4gICAgICAvLyB0aGUgd2hvbGUgbWVudSBoaWVyYXJjaHkuXG4gICAgICB0aGlzLl9jbGllbnRJbnB1dCA9IHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudElucHV0O1xuICAgICAgdGhpcy5fY2xpZW50T3V0cHV0ID0gdGhpcy5fcGFyZW50TWVudS5fY2xpZW50T3V0cHV0O1xuICAgIH1cblxuICAgIC8vI3JlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgIC8vIE1ha2UgdGhlIG1lbnUgd2UncmUgYWJvdXQgdG8gb3BlbiB1c2UgdGhlIHNhbWUgZGV2aWNlcyBhcyB0aGUgdHJpZ2dlclxuICAgIHRoaXMubWVudS5fc2V0RGV2aWNlKHRoaXMuX2NsaWVudElucHV0LCB0aGlzLl9jbGllbnRPdXRwdXQpO1xuXG4gICAgaWYgKHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcpIHtcbiAgICAgIHRoaXMubWVudS5zaG93QmFja0J1dHRvbiA9ICEhdGhpcy5fcGFyZW50TWVudTtcbiAgICAgIHRoaXMubWVudS5fdXBkYXRlU2hvd1RpdGxlKCk7XG5cbiAgICAgIGlmICghdGhpcy5tZW51LmNsb3NlTGFiZWwpIHtcbiAgICAgICAgdGhpcy5tZW51LmNsb3NlTGFiZWwgPSB0aGlzLl9wYXJlbnRNZW51Py5jbG9zZUxhYmVsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1lbnUuc2hvd0Nsb3NlQnV0dG9uID0gISF0aGlzLm1lbnUuY2xvc2VMYWJlbDtcbiAgICB9XG4gICAgdGhpcy5tZW51Ll9pc0Nsb3NpbmcgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhbmVsQ2xhc3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcpIHtcbiAgICAgIHBhbmVsQ2xhc3MucHVzaCgnZ3Jhbml0ZS1vdmVybGF5LXBhbmUtZmlsbC13aWR0aC1ib3R0b20nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxTdHJhdGVneSA9XG4gICAgICB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlICE9PSAndG91Y2gnXG4gICAgICAgID8gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGhhc0JhY2tkcm9wID1cbiAgICAgIHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcgJiYgIXRoaXMudHJpZ2dlcnNTdWJtZW51KCk7XG4gICAgLy8jZW5kcmVnaW9uIC0tLSBUb3VjaCBkZXZpY2UgY3VzdG9taXphdGlvbnMgLS0tXG5cbiAgICAvLyBDcmVhdGUgYW4gb3ZlcmxheSB0byBzdHVmZiB0aGUgbWVudSAocG9ydGFsKSBpbnRvIGJlbG93XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgYmFja2Ryb3BDbGFzczogJ2dyYW5pdGUtb3ZlcmxheS1kYXJrLWdsYXNzLWJhY2tkcm9wJyxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLFxuICAgICAgICBwYW5lbENsYXNzLFxuICAgICAgICBoYXNCYWNrZHJvcCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcblxuICAgICAgLy8jcmVnaW9uIC0tLSBUb3VjaCBkZXZpY2UgY3VzdG9taXphdGlvbnMgLS0tXG4gICAgICAvLyBBZGQgdG91Y2ggbGlzdGVuZXIgZm9yIHN1Ym1lbnUgYmFjayBwYW4vc3dpcGVcbiAgICAgIGlmICh0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnKSB7XG4gICAgICAgIHRoaXMuYWRkT3ZlcmxheUxpc3RlbmVycygpO1xuICAgICAgfVxuICAgICAgLy8jZW5kcmVnaW9uIC0tLSBUb3VjaCBkZXZpY2UgY3VzdG9taXphdGlvbnMgLS0tXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlc2V0IGFuaW1hdGlvbiBzdGF0ZSBmb3IgcmV1c2VkIG92ZXJsYXlzXG4gICAgICBpZiAodGhpcy5fY2xpZW50T3V0cHV0LmRldmljZSA9PT0gJ3RvdWNoJykge1xuICAgICAgICB0aGlzLm1lbnUuX3BhbmVsQW5pbWF0aW9uU3RhdGUgPSAndm9pZCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHBvcnRhbCBmcm9tIGFzc29jaWF0ZWQgbWVudSdzIHRlbXBsYXRlXG4gICAgaWYgKCF0aGlzLl9wb3J0YWwgfHwgdGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmICE9PSB0aGlzLm1lbnUudGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuX3BvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChcbiAgICAgICAgdGhpcy5tZW51LnRlbXBsYXRlUmVmLFxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEF0dGFjaCBtZW51IHBvcnRhbCB0byBvdmVybGF5IHJlZiAod2hpY2ggaXMgYSBwb3J0YWwgb3V0bGV0KVxuICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3BvcnRhbCk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gc3RyZWFtIHRoYXQgZW1pdHMgd2hlbmV2ZXIgYW4gYWN0aW9uIHRoYXQgc2hvdWxkIGNsb3NlIHRoZSBtZW51IG9jY3Vyc1xuICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4gdGhpcy5jbG9zZU1lbnUoKVxuICAgICk7XG5cbiAgICB0aGlzLmFuaW1hdGVPcGVuTWVudSgpO1xuXG4gICAgdGhpcy5fc2V0SXNNZW51T3Blbih0cnVlKTtcbiAgICB0aGlzLm1lbnUuZm9jdXNGaXJzdEl0ZW0odGhpcy5fb3BlbmVkQnkgfHwgJ3Byb2dyYW0nKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IHRyaWdnZXJzIGEgc3ViLW1lbnUgb3IgYSB0b3AtbGV2ZWwgb25lLiAqL1xuICB0cmlnZ2Vyc1N1Ym1lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuX21lbnVJdGVtSW5zdGFuY2UgJiYgdGhpcy5fcGFyZW50TWVudSk7XG4gIH1cblxuICAvKiogVG9nZ2xlcyB0aGUgbWVudSBiZXR3ZWVuIHRoZSBvcGVuIGFuZCBjbG9zZWQgc3RhdGVzLiAqL1xuICB0b2dnbGVNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc01lbnVPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcGVuT25DbGljaykge1xuICAgICAgdGhpcy5vcGVuTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgYXNzb2NpYXRlZCBtZW51ICovXG4gIGNsb3NlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLm1lbnUuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBtZW51IHRyaWdnZXIuXG4gICAqIEBwYXJhbSBvcmlnaW4gU291cmNlIG9mIHRoZSBtZW51IHRyaWdnZXIncyBmb2N1cy5cbiAgICovXG4gIGZvY3VzKG9yaWdpbjogRm9jdXNPcmlnaW4gPSAncHJvZ3JhbScsIG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZm9jdXNNb25pdG9yKSB7XG4gICAgICB0aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudCwgb3JpZ2luLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZXRhY2ggbWVudSBwb3J0YWwgZnJvbSBvdmVybGF5IGFuZCB1cGRhdGUgb3BlbiBzdGF0ZSAqL1xuICBfZGVzdHJveU1lbnUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmIHx8ICF0aGlzLl9pc01lbnVPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgIHRoaXMuX3Jlc3RvcmVGb2N1cygpO1xuICAgIHRoaXMubWVudS5fcmVzZXRBbmltYXRpb24oKTtcblxuICAgIHRoaXMuX3NldElzTWVudU9wZW4oZmFsc2UpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgbW91c2UgcHJlc3NlcyBvbiB0aGUgdHJpZ2dlci4gKi9cbiAgX2hhbmRsZU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghaXNGYWtlTW91c2Vkb3duRnJvbVNjcmVlblJlYWRlcihldmVudCkpIHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWRCeSAhPT0gJ3RvdWNoJykge1xuICAgICAgICAvLyBTaW5jZSByaWdodCBvciBtaWRkbGUgYnV0dG9uIGNsaWNrcyB3b24ndCB0cmlnZ2VyIHRoZSBgY2xpY2tgIGV2ZW50LFxuICAgICAgICAvLyB3ZSBzaG91bGRuJ3QgY29uc2lkZXIgdGhlIG1lbnUgYXMgb3BlbmVkIGJ5IG1vdXNlIGluIHRob3NlIGNhc2VzLlxuICAgICAgICB0aGlzLl9vcGVuZWRCeSA9IGV2ZW50LmJ1dHRvbiA9PT0gMCA/ICdtb3VzZScgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW5jZSBjbGlja2luZyBvbiB0aGUgdHJpZ2dlciB3b24ndCBjbG9zZSB0aGUgbWVudSBpZiBpdCBvcGVucyBhIHN1Yi1tZW51LFxuICAgICAgLy8gd2Ugc2hvdWxkIHByZXZlbnQgZm9jdXMgZnJvbSBtb3Zpbmcgb250byBpdCB2aWEgY2xpY2sgdG8gYXZvaWQgdGhlXG4gICAgICAvLyBoaWdobGlnaHQgZnJvbSBsaW5nZXJpbmcgb24gdGhlIG1lbnUgaXRlbS5cbiAgICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpICYmICF0aGlzLl90b2dnbGVPblN1Ym1lbnVDbGljaygpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXMga2V5IHByZXNzZXMgb24gdGhlIHRyaWdnZXIuICovXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSAmJlxuICAgICAgKChrZXkgPT09ICdBcnJvd1JpZ2h0JyAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdsdHInKSB8fFxuICAgICAgICAoa2V5ID09PSAnQXJyb3dMZWZ0JyAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdydGwnKSlcbiAgICApIHtcbiAgICAgIHRoaXMub3Blbk1lbnUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIHRyaWdnZXIuICovXG4gIF9oYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpKSB7XG4gICAgICAvLyBTdG9wIGV2ZW50IHByb3BhZ2F0aW9uIHRvIGF2b2lkIGNsb3NpbmcgdGhlIHBhcmVudCBtZW51LlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIHRoaXMuX3RvZ2dsZU9uU3VibWVudUNsaWNrKCkgPyB0aGlzLnRvZ2dsZU1lbnUoKSA6IHRoaXMub3Blbk1lbnUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2dnbGVNZW51KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdG91Y2ggc3RhcnQgZXZlbnRzIG9uIHRoZSB0cmlnZ2VyLlxuICAgKiBOZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiBzbyB3ZSBjYW4gZWFzaWx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGFuZCByZW1vdmVFdmVudExpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlVG91Y2hTdGFydCA9ICgpID0+IHtcbiAgICB0aGlzLl9vcGVuZWRCeSA9ICd0b3VjaCc7XG4gIH07XG5cbiAgLyoqIEhhbmRsZXMgdGhlIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGhvdmVycyBvdmVyIHRoZSB0cmlnZ2VyLiAqL1xuICBwcml2YXRlIF9oYW5kbGVIb3ZlcigpIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgaG92ZXJlZCBpdGVtIGluIG9yZGVyIHRvIHRvZ2dsZSB0aGUgcGFuZWwuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXJzU3VibWVudSgpIHx8ICF0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faG92ZXJTdWJzY3JpcHRpb24gPSB0aGlzLl9wYXJlbnRNZW51XG4gICAgICAuX2hvdmVyZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9vcGVuT25Ib3ZlcigpKSxcbiAgICAgICAgLy8gU2luY2Ugd2UgbWlnaHQgaGF2ZSBtdWx0aXBsZSBjb21wZXRpbmcgdHJpZ2dlcnMgZm9yIHRoZSBzYW1lIG1lbnUgKGUuZy4gYSBzdWItbWVudVxuICAgICAgICAvLyB3aXRoIGRpZmZlcmVudCBkYXRhIGFuZCB0cmlnZ2VycyksIHdlIGhhdmUgdG8gZGVsYXkgaXQgYnkgYSB0aWNrIHRvIGVuc3VyZSB0aGF0XG4gICAgICAgIC8vIGl0IHdvbid0IGJlIGNsb3NlZCBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyBvcGVuZWQuXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICAoYWN0aXZlKSA9PiBhY3RpdmUgPT09IHRoaXMuX21lbnVJdGVtSW5zdGFuY2UgLyomJiAhYWN0aXZlLmRpc2FibGVkKi9cbiAgICAgICAgKSxcbiAgICAgICAgZGVsYXkoMCwgYXNhcFNjaGVkdWxlcilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9vcGVuZWRCeSA9ICdtb3VzZSc7XG5cbiAgICAgICAgLy8gSWYgdGhlIHNhbWUgbWVudSBpcyB1c2VkIGJldHdlZW4gbXVsdGlwbGUgdHJpZ2dlcnMsIGl0IG1pZ2h0IHN0aWxsIGJlIGFuaW1hdGluZ1xuICAgICAgICAvLyB3aGlsZSB0aGUgbmV3IHRyaWdnZXIgdHJpZXMgdG8gcmUtb3BlbiBpdC4gV2FpdCBmb3IgdGhlIGFuaW1hdGlvbiB0byBmaW5pc2hcbiAgICAgICAgLy8gYmVmb3JlIGRvaW5nIHNvLiBBbHNvIGludGVycnVwdCBpZiB0aGUgdXNlciBtb3ZlcyB0byBhbm90aGVyIGl0ZW0uXG4gICAgICAgIGlmICh0aGlzLm1lbnUgaW5zdGFuY2VvZiBfTWVudUJhc2VDb21wb25lbnQgJiYgdGhpcy5tZW51Ll9pc0FuaW1hdGluZykge1xuICAgICAgICAgIC8vIFdlIG5lZWQgdGhlIGBkZWxheSgwKWAgaGVyZSBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgICAgIC8vICdjaGFuZ2VkIGFmdGVyIGNoZWNrZWQnIGVycm9ycyBpbiBzb21lIGNhc2VzLiBTZWUgQW5ndWxhciBNYXRlcmlhbCAjMTIxOTQuXG4gICAgICAgICAgdGhpcy5tZW51Ll9hbmltYXRpb25Eb25lXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgZGVsYXkoMCwgYXNhcFNjaGVkdWxlciksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9wYXJlbnRNZW51Ll9ob3ZlcmVkKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub3Blbk1lbnUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBmb2N1cyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBmb2N1c2VkIGJlZm9yZSB0aGUgbWVudSB3YXMgb3Blbi5cbiAgICogQ291bGQgYmUgdGhlIHJvb3QgdHJpZ2dlciBidXR0b24gb3IgYSBzdWJtZW51IHRyaWdnZXIgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzdG9yZUZvY3VzKCkge1xuICAgIC8vIFdlIHNob3VsZCByZXNldCBmb2N1cyBpZiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHVzaW5nIGEga2V5Ym9hcmQgb3JcbiAgICAvLyBpZiB3ZSBoYXZlIGEgdG9wLWxldmVsIHRyaWdnZXIgd2hpY2ggbWlnaHQgY2F1c2UgZm9jdXMgdG8gYmUgbG9zdFxuICAgIC8vIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGUgbWVudS5cbiAgICBpZiAoIXRoaXMuX29wZW5lZEJ5KSB7XG4gICAgICAvLyBOb3RlIHRoYXQgdGhlIGZvY3VzIHN0eWxlIHdpbGwgc2hvdyB1cCBib3RoIGZvciBgcHJvZ3JhbWAgYW5kXG4gICAgICAvLyBga2V5Ym9hcmRgIHNvIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lmeSB3aGljaCBvbmUgaXQgaXMuXG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkge1xuICAgICAgdGhpcy5mb2N1cyh0aGlzLl9vcGVuZWRCeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3BlbmVkQnkgPSBudWxsO1xuICB9XG5cbiAgLy8gU2V0IHN0YXRlIHJhdGhlciB0aGFuIHRvZ2dsZSB0byBzdXBwb3J0IHRyaWdnZXJzIHNoYXJpbmcgYSBtZW51XG4gIHByaXZhdGUgX3NldElzTWVudU9wZW4oaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNNZW51T3BlbiA9IGlzT3BlbjtcblxuICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpKSB7XG4gICAgICB0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9oaWdobGlnaHRlZCA9XG4gICAgICAgIGlzT3BlbiAmJiB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlICE9PSAndG91Y2gnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgdGhhdCBhIHZhbGlkIGluc3RhbmNlIG9mIE1lbnVDb21wb25lbnQgaGFzIGJlZW4gcGFzc2VkIGludG9cbiAgICogZ3Jhbml0ZU1lbnVUcmlnZ2VyRm9yLiBJZiBub3QsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG4gICAqL1xuICBwcml2YXRlIF9jaGVja01lbnUoKSB7XG4gICAgaWYgKCF0aGlzLm1lbnUpIHtcbiAgICAgIHRocm93R3Jhbml0ZU1lbnVNaXNzaW5nRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdHJhdGVneSBmb3IgcG9zaXRpb25pbmcgdGhlIG92ZXJsYXkgZm9yIGRlc2t0b3AgZGV2aWNlczpcbiAgICogUGxhY2UgYWRqYWNlbnQgdG8gdGhlIHRyaWdnZXIgYnV0dG9uIChwcmVmZXJhYmx5IGltbWVkaWF0ZWx5IGJlbG93KVxuICAgKiBpbiBvcmRlciB0byBzaG93IGFzIG11Y2ggb2YgdGhlIG1lbnUgYXMgcG9zc2libGUuXG4gICAqL1xuICBwcml2YXRlIF9kZXNrdG9wUG9zaXRpb25TdHJhdGVneSgpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5OiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudClcbiAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKVxuICAgICAgLndpdGhUcmFuc2Zvcm1PcmlnaW5PbignLmdyYW5pdGUtbWVudScpXG4gICAgICAud2l0aFB1c2goZmFsc2UpO1xuXG4gICAgdGhpcy5fc2V0UG9zaXRpb24ocG9zaXRpb25TdHJhdGVneSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb25zIG9uIGEgcG9zaXRpb24gc3RyYXRlZ3lcbiAgICogc28gdGhlIG92ZXJsYXkgY29ubmVjdHMgd2l0aCB0aGUgdHJpZ2dlciBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSBwb3NpdGlvblN0cmF0ZWd5IFN0cmF0ZWd5IHdob3NlIHBvc2l0aW9uIHRvIHVwZGF0ZS5cbiAgICovXG4gIHByaXZhdGUgX3NldFBvc2l0aW9uKHBvc2l0aW9uU3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSkge1xuICAgIGNvbnN0IE1FTlVfUEFORUxfVE9QX1BBRERJTkcgPSAwO1xuXG4gICAgbGV0IFtvcmlnaW5YLCBvcmlnaW5GYWxsYmFja1hdOiBIb3Jpem9udGFsQ29ubmVjdGlvblBvc1tdID1cbiAgICAgIHRoaXMubWVudS54UG9zaXRpb24gPT09ICdiZWZvcmUnID8gWydlbmQnLCAnc3RhcnQnXSA6IFsnc3RhcnQnLCAnZW5kJ107XG5cbiAgICBjb25zdCBbb3ZlcmxheVksIG92ZXJsYXlGYWxsYmFja1ldOiBWZXJ0aWNhbENvbm5lY3Rpb25Qb3NbXSA9XG4gICAgICB0aGlzLm1lbnUueVBvc2l0aW9uID09PSAnYWJvdmUnID8gWydib3R0b20nLCAndG9wJ10gOiBbJ3RvcCcsICdib3R0b20nXTtcblxuICAgIGxldCBbb3JpZ2luWSwgb3JpZ2luRmFsbGJhY2tZXSA9IFtvdmVybGF5WSwgb3ZlcmxheUZhbGxiYWNrWV07XG4gICAgbGV0IFtvdmVybGF5WCwgb3ZlcmxheUZhbGxiYWNrWF0gPSBbb3JpZ2luWCwgb3JpZ2luRmFsbGJhY2tYXTtcbiAgICBsZXQgb2Zmc2V0WSA9IDA7XG5cbiAgICBpZiAodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkge1xuICAgICAgLy8gV2hlbiB0aGUgbWVudSBpcyBhIHN1Yi1tZW51LCBpdCBzaG91bGQgYWx3YXlzIGFsaWduIGl0c2VsZlxuICAgICAgLy8gdG8gdGhlIGVkZ2VzIG9mIHRoZSB0cmlnZ2VyLCBpbnN0ZWFkIG9mIG92ZXJsYXBwaW5nIGl0LlxuICAgICAgb3ZlcmxheUZhbGxiYWNrWCA9IG9yaWdpblggPVxuICAgICAgICB0aGlzLm1lbnUueFBvc2l0aW9uID09PSAnYmVmb3JlJyA/ICdzdGFydCcgOiAnZW5kJztcbiAgICAgIG9yaWdpbkZhbGxiYWNrWCA9IG92ZXJsYXlYID0gb3JpZ2luWCA9PT0gJ2VuZCcgPyAnc3RhcnQnIDogJ2VuZCc7XG4gICAgICBvZmZzZXRZID1cbiAgICAgICAgb3ZlcmxheVkgPT09ICdib3R0b20nXG4gICAgICAgICAgPyBNRU5VX1BBTkVMX1RPUF9QQURESU5HXG4gICAgICAgICAgOiAtTUVOVV9QQU5FTF9UT1BfUEFERElORztcbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luWSA9IG92ZXJsYXlZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICBvcmlnaW5GYWxsYmFja1kgPSBvdmVybGF5RmFsbGJhY2tZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgfVxuXG4gICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgIHsgb3JpZ2luWCwgb3JpZ2luWSwgb3ZlcmxheVgsIG92ZXJsYXlZLCBvZmZzZXRZIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6IG9yaWdpbkZhbGxiYWNrWCxcbiAgICAgICAgb3JpZ2luWSxcbiAgICAgICAgb3ZlcmxheVg6IG92ZXJsYXlGYWxsYmFja1gsXG4gICAgICAgIG92ZXJsYXlZLFxuICAgICAgICBvZmZzZXRZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWCxcbiAgICAgICAgb3JpZ2luWTogb3JpZ2luRmFsbGJhY2tZLFxuICAgICAgICBvdmVybGF5WCxcbiAgICAgICAgb3ZlcmxheVk6IG92ZXJsYXlGYWxsYmFja1ksXG4gICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogb3JpZ2luRmFsbGJhY2tYLFxuICAgICAgICBvcmlnaW5ZOiBvcmlnaW5GYWxsYmFja1ksXG4gICAgICAgIG92ZXJsYXlYOiBvdmVybGF5RmFsbGJhY2tYLFxuICAgICAgICBvdmVybGF5WTogb3ZlcmxheUZhbGxiYWNrWSxcbiAgICAgICAgb2Zmc2V0WTogLW9mZnNldFksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciBhbiBhY3Rpb24gdGhhdCBzaG91bGQgY2xvc2UgdGhlIG1lbnUgb2NjdXJzLiAqL1xuICBwcml2YXRlIF9tZW51Q2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgY29uc3QgZGV0YWNobWVudHMgPSB0aGlzLl9vdmVybGF5UmVmPy5kZXRhY2htZW50cygpO1xuICAgIGNvbnN0IHBhcmVudENsb3NlID0gdGhpcy5fcGFyZW50TWVudVxuICAgICAgPyB0aGlzLl9wYXJlbnRNZW51LmNsb3NlZFxuICAgICAgOiBvYnNlcnZhYmxlT2YoKTtcblxuICAgIGNvbnN0IGhvdmVyID1cbiAgICAgIHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICdkZXNrdG9wJyAmJiB0aGlzLl9wYXJlbnRNZW51XG4gICAgICAgID8gdGhpcy5fcGFyZW50TWVudS5faG92ZXJlZCgpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHRoaXMuX21lbnVJdGVtSW5zdGFuY2UpLFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2lzTWVudU9wZW4pXG4gICAgICAgICAgKVxuICAgICAgICA6IG9ic2VydmFibGVPZigpO1xuXG4gICAgLy8gTm90ZTogUXVpY2sgZml4LiBGZWF0dXJlIHJlcG9ydGVkbHkgZXhpc3RzIGluIENESyBmb3IgQW5ndWxhciAxMFxuICAgIC8vIEZpbHRlciB0byBwcmV2ZW50IGNsb3Npbmcgd2hlbiBhbmltYXRpbmcgYWRkZWQgdGhvdWdoLiBBcHBsaWVkIHRvXG4gICAgLy8gcm9vdCBtZW51IG9ubHkuXG4gICAgY29uc3Qgb3V0c2lkZUNsaWNrID0gIXRoaXMuX3BhcmVudE1lbnVcbiAgICAgID8gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAnY2xpY2snKS5waXBlKFxuICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgIChlOiBNb3VzZUV2ZW50KSA9PlxuICAgICAgICAgICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpICE9PSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuZ3Jhbml0ZS1tZW51JykgPT09IG51bGxcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5tZW51Ll9pc0FuaW1hdGluZylcbiAgICAgICAgKVxuICAgICAgOiBvYnNlcnZhYmxlT2YoKTtcblxuICAgIHJldHVybiBtZXJnZShkZXRhY2htZW50cywgaG92ZXIsIHBhcmVudENsb3NlLCBvdXRzaWRlQ2xpY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBvcGVuIHN1Ym1lbnVzIG9uIGhvdmVyLiBUaGlzIGlzIHRydWUgd2hlbiBzaG93aW5nXG4gICAqIGRlc2t0b3AgbWVudXMgYW5kIGhhdmluZyBtb3VzZSBzdXBwb3J0LlxuICAgKi9cbiAgcHJpdmF0ZSBfb3Blbk9uSG92ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnRyaWdnZXJzU3VibWVudSgpXG4gICAgICAgID8gdGhpcy5fcGFyZW50TWVudS5vcGVuT25Ib3ZlclxuICAgICAgICA6IHRoaXMubWVudS5vcGVuT25Ib3ZlcikgJiZcbiAgICAgIHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudE91dHB1dD8uZGV2aWNlID09PSAnZGVza3RvcCcgJiZcbiAgICAgIHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudElucHV0Py5kZXZpY2VzLmluY2x1ZGVzKCdtb3VzZScpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHRvZ2dsZSBzdWJtZW51cyBvbiBjbGljay4gVGhpcyBpcyB0cnVlIHdoZW4gc2hvd2luZyBkZXNrdG9wIG1lbnVzXG4gICAqIHdpdGhvdXQgbW91c2Ugc3VwcG9ydC4gV2hpY2gsIGJ5IHRoZSB3YXksIGlzIG5vdCBhIGdyZWF0IGlkZWEgdG8gYmVnaW4gd2l0aC5cbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZU9uU3VibWVudUNsaWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhKHRoaXMudHJpZ2dlcnNTdWJtZW51KClcbiAgICAgICAgPyB0aGlzLl9wYXJlbnRNZW51Lm9wZW5PbkhvdmVyXG4gICAgICAgIDogdGhpcy5tZW51Lm9wZW5PbkhvdmVyKSB8fFxuICAgICAgKHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudE91dHB1dD8uZGV2aWNlID09PSAnZGVza3RvcCcgJiZcbiAgICAgICAgIXRoaXMuX3BhcmVudE1lbnUuX2NsaWVudElucHV0Py5kZXZpY2VzLmluY2x1ZGVzKCdtb3VzZScpKVxuICAgICk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4gIC8vIC0tLSBIZXJlIGJlIHRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS0gLy9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKiBTZXQgYW5pbWF0aW9uIHN0YXRlIHRvIGJyaW5nIGEgbmV3bHkgb3BlbmVkIG1lbnUgaW50byB2aWV3ICovXG4gIHByaXZhdGUgYW5pbWF0ZU9wZW5NZW51KCkge1xuICAgIHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCdcbiAgICAgID8gdGhpcy5hbmltYXRlVG91Y2hPcGVuTWVudSgpXG4gICAgICA6IHRoaXMubWVudS5fc3RhcnRBbmltYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYW5pbWF0ZVRvdWNoT3Blbk1lbnUoKSB7XG4gICAgaWYgKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpIHtcbiAgICAgIC8vIFNsaWRlIG5ld2x5IG9wZW5lZCBzdWIgbWVudSBpbnRvIHZpZXcgZnJvbSB0aGUgc2lkZSxcbiAgICAgIC8vIHB1c2hpbmcgYW55IHBhcmVudCBtZW51IG91dCBvZiB2aWV3IG9uIHRoZSBvdGhlciBzaWRlXG4gICAgICB0aGlzLm1lbnUuX3N0YXJ0VG91Y2hTdWJtZW51RW50ZXJBbmltYXRpb24oKTtcbiAgICAgIHRoaXMuX3BhcmVudE1lbnUuX3N0YXJ0VG91Y2hIaWRlQW5pbWF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNsaWRlIHJvb3QgbWVudSBpbnRvIHZpZXcgZnJvbSBiZWxvd1xuICAgICAgdGhpcy5tZW51Ll9zdGFydFRvdWNoUm9vdEVudGVyQW5pbWF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldCBhbmltYXRpb24gc3RhdGUgdG8gY2xvc2UgdGhlIGFjdGl2ZSBtZW51ICovXG4gIHByaXZhdGUgYW5pbWF0ZUNsb3NlTWVudSh0b0JlbG93OiBib29sZWFuLCB3aXRoRGVsYXk6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnXG4gICAgICA/IHRoaXMuX2FuaW1hdGVUb3VjaENsb3NlTWVudSh0b0JlbG93LCB3aXRoRGVsYXkpXG4gICAgICA6IHRoaXMuX3BhcmVudE1lbnUuX3Jlc2V0QW5pbWF0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9hbmltYXRlVG91Y2hDbG9zZU1lbnUodG9CZWxvdzogYm9vbGVhbiwgd2l0aERlbGF5OiBib29sZWFuKSB7XG4gICAgaWYgKHRvQmVsb3cpIHtcbiAgICAgIC8vIFNsaWRlIG1lbnUgb3V0IG9mIHZpZXcgYmVsb3cgdGhlIHZpZXdwb3J0XG4gICAgICB3aXRoRGVsYXlcbiAgICAgICAgPyB0aGlzLm1lbnUuX3N0YXJ0VG91Y2hDbG9zZURvd25BbmltYXRpb25XaXRoRGVsYXkoKVxuICAgICAgICA6IHRoaXMubWVudS5fc3RhcnRUb3VjaENsb3NlRG93bkFuaW1hdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTbGlkZSB0aGUgY2xvc2VkIG1lbnUgb3V0IG9mIHZpZXcgdG8gdGhlIHNpZGVcbiAgICAgIC8vIGFuZCBzbGlkZSBhbnkgcGFyZW50IG1lbnUgYmFjayBpbnRvIHZpZXdcbiAgICAgIHRoaXMubWVudS5fc3RhcnRUb3VjaENsb3NlU2lkZUFuaW1hdGlvbigpO1xuICAgICAgdGhpcy5fcGFyZW50TWVudT8uX3N0YXJ0VG91Y2hTdWJtZW51RW50ZXJBbmltYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuaW1hdGlvbiBzdGF0ZSB0byBwbGFjZSB0aGUgbWVudSBhbmQgYW55IHBhcmVudCBhdCB0aGUgZ2l2ZW5cbiAgICogaG9yaXpvbnRhbCBwb3NpdGlvbiwgaS5lLiBmb2xsb3dpbmcgdG91Y2ggcGFuIG1vdmVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0geE9mZnNldCBIb3Jpem9udGFsIG9mZnNldFxuICAgKi9cbiAgcHJpdmF0ZSBhbmltYXRlU2V0TWVudVBvc2l0aW9uKHhPZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMubWVudS5fc3RhcnRUb3VjaFBhbkFuaW1hdGlvbih4T2Zmc2V0KTtcbiAgICBpZiAodGhpcy5fcGFyZW50TWVudSkge1xuICAgICAgdGhpcy5fcGFyZW50TWVudS5fc3RhcnRUb3VjaEhpZGVQYW5BbmltYXRpb24oeE9mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3RyYXRlZ3kgZm9yIHBvc2l0aW9uaW5nIHRoZSBvdmVybGF5IGRlcGVuZGluZyBvbiB3aGF0IHR5cGUgb2ZcbiAgICogZGV2aWNlIHRoZSBtZW51IGlzIGJlaW5nIHNob3duIG9uXG4gICAqL1xuICBwcml2YXRlIF9wb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnXG4gICAgICA/IHRoaXMuX3RvdWNoUG9zaXRpb25TdHJhdGVneSgpXG4gICAgICA6IHRoaXMuX2Rlc2t0b3BQb3NpdGlvblN0cmF0ZWd5KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdHJhdGVneSBmb3IgcG9zaXRpb25pbmcgdGhlIG92ZXJsYXkgZm9yIHRvdWNoIGRldmljZXM6XG4gICAqIFBsYWNlIGNlbnRlcmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICovXG4gIHByaXZhdGUgX3RvdWNoUG9zaXRpb25TdHJhdGVneSgpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbiAgLy8gLS0tIEhlcmUgYmUgcG9vciBtYW4ncyB0b3VjaCBnZXN0dXJlcyAtLS0gLy9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggSGFtbWVyIG9yIG90aGVyIGdlc3R1cmUgbGlicmFyeVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRvdWNoIHN0YXJ0IGV2ZW50cyBvbiB0aGUgb3ZlcmxheSBob3N0IGVsZW1lbnQgKHdyYXBwZXIpLlxuICAgKiBOZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiBzbyB3ZSBjYW4gZWFzaWx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGFuZCByZW1vdmVFdmVudExpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlT3ZlcmxheVRvdWNoU3RhcnQgPSAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy5tZW51Ll9pc0FuaW1hdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RvdWNoU3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICB0aGlzLl90b3VjaFN0YXJ0WCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gICAgdGhpcy5fdG91Y2hTdGFydFkgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICAgIHRoaXMuX3RvdWNoQ3VycmVudFggPSB0aGlzLl90b3VjaFN0YXJ0WDtcbiAgICB0aGlzLl90b3VjaEN1cnJlbnRZID0gdGhpcy5fdG91Y2hTdGFydFk7XG4gICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYID0gMDtcbiAgICB0aGlzLl90b3VjaE1heFggPVxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB0aGlzLl90b3VjaExvY2tlZFggPSBudWxsO1xuICAgIHRoaXMuX3RvdWNoVG91Y2hpbmdFbGVtZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBwcml2YXRlIF9oYW5kbGVPdmVybGF5VG91Y2hNb3ZlID0gKGV2ZW50OiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLl90b3VjaFRvdWNoaW5nRWxlbWVudCB8fCB0aGlzLm1lbnUuX2lzQW5pbWF0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RvdWNoTG9ja2VkWCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RvdWNoQ3VycmVudFggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICAgIHRoaXMuX3RvdWNoQ3VycmVudFkgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuXG4gICAgLy8gTG9jayBYLWF4aXMgcGFuIGlmIGluaXRpYXRpbmcgcGFuIG9uIFktYXhpc1xuICAgIGlmICh0aGlzLl90b3VjaExvY2tlZFggPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGR5ID0gTWF0aC5hYnModGhpcy5fdG91Y2hDdXJyZW50WSAtIHRoaXMuX3RvdWNoU3RhcnRZKTtcbiAgICAgIGNvbnN0IGR4ID0gTWF0aC5hYnModGhpcy5fdG91Y2hDdXJyZW50WCAtIHRoaXMuX3RvdWNoU3RhcnRYKTtcbiAgICAgIGlmIChkeCA+IDEwIHx8IGR5ID4gMTApIHtcbiAgICAgICAgdGhpcy5fdG91Y2hMb2NrZWRYID0gZHkgPiBkeDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RyaWN0IHRvIHJpZ2h0IHBhbi9zd2lwZSBhbmQgbWFrZSBtZW51IG1vdmVtZW50IGV4dHJlbWVseSBzbG93IHdoZW5cbiAgICAvLyBtb3ZlZCBwYXN0IGFsbG93ZWQgbGltaXRzLlxuICAgIGNvbnN0IG1lbnVNYXJnaW4gPSAxNjtcbiAgICB0aGlzLl90b3VjaFRyYW5zbGF0ZVggPSB0aGlzLl90b3VjaEN1cnJlbnRYIC0gdGhpcy5fdG91Y2hTdGFydFg7XG5cbiAgICBpZiAodGhpcy5fdG91Y2hUcmFuc2xhdGVYIDwgMCkge1xuICAgICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYID0gdGhpcy5lYXNlT3V0RXhwbyhcbiAgICAgICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYLFxuICAgICAgICAwLFxuICAgICAgICAtbWVudU1hcmdpbiAvIDIsXG4gICAgICAgIHRoaXMuX3RvdWNoTWF4WCAqIC00XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA9IHRoaXMuZWFzZU91dEV4cG8oXG4gICAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCxcbiAgICAgICAgMCxcbiAgICAgICAgbWVudU1hcmdpbiAvIDIsXG4gICAgICAgIHRoaXMuX3RvdWNoTWF4WCAqIDRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl90b3VjaFRyYW5zbGF0ZVggPiB0aGlzLl90b3VjaE1heFgpIHtcbiAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA9IHRoaXMuZWFzZU91dEV4cG8oXG4gICAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCAtIHRoaXMuX3RvdWNoTWF4WCxcbiAgICAgICAgdGhpcy5fdG91Y2hNYXhYLFxuICAgICAgICBtZW51TWFyZ2luIC8gMixcbiAgICAgICAgdGhpcy5fdG91Y2hNYXhYICogNFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgbmV3IHN1YiBtZW51IHBvc2l0aW9uIGFuZCB0ZWxsIGFueSBwYXJlbnQgdG8gZm9sbG93O1xuICAgIHRoaXMuYW5pbWF0ZVNldE1lbnVQb3NpdGlvbih0aGlzLl90b3VjaFRyYW5zbGF0ZVgpO1xuICB9O1xuXG4gIHByaXZhdGUgX2hhbmRsZU92ZXJsYXlUb3VjaEVuZCA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuX3RvdWNoVG91Y2hpbmdFbGVtZW50IHx8IHRoaXMubWVudS5faXNBbmltYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90b3VjaFRyYW5zbGF0ZVggPSB0aGlzLl90b3VjaEN1cnJlbnRYIC0gdGhpcy5fdG91Y2hTdGFydFg7XG4gICAgaWYgKHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RvdWNoVG91Y2hpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgdGhpcy5fdG91Y2hUaW1lVGFrZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuX3RvdWNoU3RhcnRUaW1lO1xuXG4gICAgY29uc3Qgc3dpcGVNaW5EaXN0YW5jZSA9IDEwO1xuICAgIGNvbnN0IHN3aXBlTWluVGltZSA9IDUwO1xuICAgIGNvbnN0IHN3aXBlTWF4VGltZSA9IDMwMDtcblxuICAgIGNvbnN0IHBhbm5lZEhhbGZ3YXlSaWdodCA9IHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA+IHRoaXMuX3RvdWNoTWF4WCAvIDI7XG4gICAgY29uc3Qgc3dpcGVkUmlnaHQgPVxuICAgICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYID4gdGhpcy5fdG91Y2hNYXhYIC8gc3dpcGVNaW5EaXN0YW5jZSAmJlxuICAgICAgdGhpcy5fdG91Y2hUaW1lVGFrZW4gPiBzd2lwZU1pblRpbWUgJiZcbiAgICAgIHRoaXMuX3RvdWNoVGltZVRha2VuIDwgc3dpcGVNYXhUaW1lO1xuXG4gICAgaWYgKCEhdGhpcy5fcGFyZW50TWVudSAmJiAoc3dpcGVkUmlnaHQgfHwgcGFubmVkSGFsZndheVJpZ2h0KSkge1xuICAgICAgLy8gQ2xvc2Ugc3VibWVudSBrZXlkb3duLXN0eWxlOiBjbG9zZSBvbmx5IHRoaXMgbWVudSBhbmQgbGVhdmUgcGFyZW50cyBvcGVuXG4gICAgICB0aGlzLm1lbnUuY2xvc2VkLmVtaXQoJ2tleWRvd24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFuIGVuZGVkIGJ1dCB0aGUgbWVudSB3YXMgbm90IG1vdmVkIGZhciBlbm91Z2guIFJlc2V0IG1lbnVzIHRvXG4gICAgICAvLyB3aGVyZSB0aGV5IHdlcmUgYmVmb3JlIHBhbm5pbmcgc3RhcmVkLlxuICAgICAgdGhpcy5hbmltYXRlT3Blbk1lbnUoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0b3VjaCBkZXZpY2UgcGFuL3N3aXBlIGxpc3RlbmVycyBmcm9tIG92ZXJsYXkgaG9zdCBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGFkZE92ZXJsYXlMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNoc3RhcnQnLFxuICAgICAgdGhpcy5faGFuZGxlT3ZlcmxheVRvdWNoU3RhcnQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNobW92ZScsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hNb3ZlLFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICd0b3VjaGVuZCcsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hFbmQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0b3VjaCBkZXZpY2UgcGFuL3N3aXBlIGxpc3RlbmVycyBmcm9tIG92ZXJsYXkgaG9zdCBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU92ZXJsYXlMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNoc3RhcnQnLFxuICAgICAgdGhpcy5faGFuZGxlT3ZlcmxheVRvdWNoU3RhcnQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNobW92ZScsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hNb3ZlLFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICd0b3VjaGVuZCcsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hFbmQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGV4cG9uZW50aWFsIGVhc2Ugb3V0IGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50IEN1cnJlbnQgdmFsdWVcbiAgICogQHBhcmFtIG9mZnNldCBPZmZzZXQgdmFsdWUsIHRvIHdoaWNoIGNhbGN1bGF0ZWQgdmFsdWUgd2lsbCBiZSBhZGRlZFxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgdmFsdWVcbiAgICogQHBhcmFtIGVuZCBWYWx1ZSB0byB3aGljaCBjdXJyZW50IHZhbHVlIGlzIGNvbXBhcmVkXG4gICAqL1xuICBwcml2YXRlIGVhc2VPdXRFeHBvKFxuICAgIGN1cnJlbnQ6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB0YXJnZXQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIHJldHVybiBjdXJyZW50ID09PSBlbmRcbiAgICAgID8gb2Zmc2V0ICsgdGFyZ2V0XG4gICAgICA6IHRhcmdldCAqICgtTWF0aC5wb3coMiwgKC0xMCAqIGN1cnJlbnQpIC8gZW5kKSArIDEpICsgb2Zmc2V0O1xuICB9XG59XG4iXX0=
705
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10cmlnZ2VyLWZvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS10cmlnZ2VyLWZvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsSUFBSSxFQUVKLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUNMLFlBQVksRUFFWiwrQkFBK0IsR0FDaEMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUdMLE9BQU8sRUFDUCxhQUFhLEdBSWQsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUNMLGFBQWEsRUFDYixTQUFTLEVBQ1QsS0FBSyxFQUVMLEVBQUUsSUFBSSxZQUFZLEVBQ2xCLFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRSw2Q0FBNkM7QUFDN0MsT0FBTyxFQUdM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NkJBTWxCLG9CQUFvQiw2QkFLcEIscUJBQXFCLDJLQWlCckIsUUFBUTsrR0E1RVAsOEJBQThCOzJGQUE5Qiw4QkFBOEI7a0JBWjFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxzQkFBc0I7d0JBQzdCLGVBQWUsRUFBRSxNQUFNO3dCQUN2QixzQkFBc0IsRUFBRSxxQkFBcUI7d0JBQzdDLHNCQUFzQixFQUFFLG1DQUFtQzt3QkFDM0QsYUFBYSxFQUFFLDBCQUEwQjt3QkFDekMsV0FBVyxFQUFFLHdCQUF3Qjt3QkFDckMsU0FBUyxFQUFFLHNCQUFzQjtxQkFDbEM7aUJBQ0Y7OzBCQWlESSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLFFBQVE7OzBCQUtSLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsUUFBUTs7MEJBSVIsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixRQUFROzswQkFXUixRQUFROzswQkFBSSxJQUFJOzswQkFFaEIsUUFBUTs7MEJBR1IsTUFBTTsyQkFBQyxRQUFROzRDQXRFbEIsSUFBSTtzQkFESCxLQUFLO3VCQUFDLHVCQUF1QjtnQkFHckIsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgRm9jdXNNb25pdG9yLFxuICBGb2N1c09yaWdpbixcbiAgaXNGYWtlTW91c2Vkb3duRnJvbVNjcmVlblJlYWRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbiAgSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3MsXG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlSZWYsXG4gIFBvc2l0aW9uU3RyYXRlZ3ksXG4gIFZlcnRpY2FsQ29ubmVjdGlvblBvcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHtcbiAgYXNhcFNjaGVkdWxlcixcbiAgZnJvbUV2ZW50LFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YgYXMgb2JzZXJ2YWJsZU9mLFxuICBTdWJzY3JpcHRpb24sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBfTWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuL21lbnUtYmFzZSc7XG5pbXBvcnQgeyBHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuL21lbnUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xvc2VkRXZlbnRUeXBlLCBHUkFOSVRFX01FTlVfUEFORUwgfSBmcm9tICcuL21lbnUtcGFuZWwnO1xuXG4vLyNyZWdpb24gLS0tIFRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS1cbmltcG9ydCB7XG4gIENsaWVudElucHV0SW50ZXJmYWNlLFxuICBDbGllbnRPdXRwdXRJbnRlcmZhY2UsXG4gIEdSQU5JVEVfQ0xJRU5UX0lOUFVULFxuICBHUkFOSVRFX0NMSUVOVF9PVVRQVVQsXG59IGZyb20gJy4uL2NvcmUvY2xpZW50LWVudmlyb25tZW50JztcbmltcG9ydCB7IHRocm93R3Jhbml0ZU1lbnVNaXNzaW5nRXJyb3IgfSBmcm9tICcuL21lbnUtZXJyb3JzJztcblxuLyoqIE9wdGlvbnMgZm9yIGJpbmRpbmcgYSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVyLiAqL1xuY29uc3QgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zID0gbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7XG4gIHBhc3NpdmU6IHRydWUsXG59KTtcbi8vI2VuZHJlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuXG4vKipcbiAqIERpcmVjdGl2ZSB1c2VkIHRvIHR1cm4gYSBidXR0b24gZWxlbWVudCBpbnRvIGEgKHBvcHVwKSBtZW51IHRyaWdnZXJcbiAqXG4gKiBTdHJpcHBlZC1kb3duIHZlcnNpb24gb2YgQW5ndWxhciBNYXRlcmlhbCdzIG1lbnUgdHJpZ2dlciBkaXJlY3RpdmUgKC4uLi9tZW51L21lbnUtdHJpZ2dlci50cylcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW2dyYW5pdGVNZW51VHJpZ2dlckZvcl1gLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdncmFuaXRlLW1lbnUtdHJpZ2dlcicsIC8vIFJlcXVpcmVkIGZvciB0ZXN0IGhhcm5lc3MgaG9zdCBzZWxlY3RvclxuICAgICdhcmlhLWhhc3BvcHVwJzogJ3RydWUnLFxuICAgICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdfaXNNZW51T3BlbiB8fCBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1jb250cm9sc10nOiAnX2lzTWVudU9wZW4gPyBtZW51LnBhbmVsSWQgOiBudWxsJyxcbiAgICAnKG1vdXNlZG93biknOiAnX2hhbmRsZU1vdXNlZG93bigkZXZlbnQpJyxcbiAgICAnKGtleWRvd24pJzogJ19oYW5kbGVLZXlkb3duKCRldmVudCknLFxuICAgICcoY2xpY2spJzogJ19oYW5kbGVDbGljaygkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR3Jhbml0ZU1lbnVUcmlnZ2VyRm9yRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgLyoqIFJlZmVyZW5jZXMgdGhlIG1lbnUgaW5zdGFuY2UgdGhhdCB0aGUgdHJpZ2dlciBpcyBhc3NvY2lhdGVkIHdpdGguICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnZ3Jhbml0ZU1lbnVUcmlnZ2VyRm9yJylcbiAgbWVudTogX01lbnVCYXNlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIG9wZW5PbkNsaWNrPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgbWVudSBpcyBvcGVuICovXG4gIF9pc01lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gVHJhY2tpbmcgaW5wdXQgdHlwZSBpcyBuZWNlc3Nhcnkgc28gaXQncyBwb3NzaWJsZSB0byBvbmx5IGF1dG8tZm9jdXNcbiAgLy8gdGhlIGZpcnN0IGl0ZW0gb2YgdGhlIGxpc3Qgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQgdmlhIHRoZSBrZXlib2FyZFxuICBfb3BlbmVkQnk6ICdtb3VzZScgfCAndG91Y2gnIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfaG92ZXJTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gIHByaXZhdGUgX21lbnVDbG9zZVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgcHJpdmF0ZSBfY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgcHJpdmF0ZSBfcG9ydGFsOiBUZW1wbGF0ZVBvcnRhbCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2RvY3VtZW50PzogRG9jdW1lbnQ7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbiAgLy8gLS0tIEhlcmUgYmUgcG9vciBtYW4ncyB0b3VjaCBnZXN0dXJlcyAtLS0gLy9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggSGFtbWVyIG9yIG90aGVyIGdlc3R1cmUgbGlicmFyeVxuXG4gIHByaXZhdGUgX3RvdWNoU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoVGltZVRha2VuOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoU3RhcnRYOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoU3RhcnRZOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoQ3VycmVudFg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG91Y2hDdXJyZW50WTogbnVtYmVyO1xuICBwcml2YXRlIF90b3VjaFRyYW5zbGF0ZVg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdG91Y2hMb2NrZWRYOiBib29sZWFuIHwgbnVsbDtcbiAgcHJpdmF0ZSBfdG91Y2hNYXhYOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdWNoVG91Y2hpbmdFbGVtZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuXG4gICAgLyoqIElmIHRoaXMgaXMgYSBfc3VibWVudV8gdHJpZ2dlciwgaXQgd2lsbCBoYXZlIGEgcGFyZW50IG1lbnUgKi9cbiAgICBASW5qZWN0KEdSQU5JVEVfTUVOVV9QQU5FTClcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByaXZhdGUgX3BhcmVudE1lbnU6IF9NZW51QmFzZUNvbXBvbmVudCxcblxuICAgIC8vI3JlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgIC8qKiBDbGllbnQgaW5wdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9JTlBVVClcbiAgICBAT3B0aW9uYWwoKVxuICAgIHB1YmxpYyBfY2xpZW50SW5wdXQ6IENsaWVudElucHV0SW50ZXJmYWNlLFxuXG4gICAgLyoqIENsaWVudCBvdXRwdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9PVVRQVVQpXG4gICAgQE9wdGlvbmFsKClcbiAgICBwdWJsaWMgX2NsaWVudE91dHB1dDogQ2xpZW50T3V0cHV0SW50ZXJmYWNlLFxuICAgIC8vI2VuZHJlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBpcyBhIF9zdWJtZW51XyB0cmlnZ2VyLCB0aGVyZSBzaG91bGQgYmUgYSBjb3JyZXNwb25kaW5nIG1lbnVcbiAgICAgKiBpdGVtIGRpcmVjdGl2ZSBwcmVzZW50IGFzIHdlbGw6XG4gICAgICpcbiAgICAgKiAgICAgPGJ1dHRvbiBncmFuaXRlTWVudUl0ZW0gW2dyYW5pdGVNZW51VHJpZ2dlckZvcl09XCIuLi5cIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICBeLS0gVGhpcyBvbmVcbiAgICAgKi9cbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByaXZhdGUgX21lbnVJdGVtSW5zdGFuY2U6IEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCxcblxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudD86IGFueVxuICApIHtcbiAgICBfZWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAndG91Y2hzdGFydCcsXG4gICAgICB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIGlmIChfbWVudUl0ZW1JbnN0YW5jZSkge1xuICAgICAgX21lbnVJdGVtSW5zdGFuY2UuX3RyaWdnZXJzU3VibWVudSA9IHRoaXMudHJpZ2dlcnNTdWJtZW51KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZG9jdW1lbnQgPSBkb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tZW51KSB7XG4gICAgICB0aGlzLl9oYW5kbGVNZW51Q2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8vIHJlbW92ZWQgY2hlY2tNZW51IGhlcmUgdG8gYXZvaWQgZXJyb3JzIGluIGR5bmFtaWNhbGx5IGdlbmFyYXRlZCBtZW51c1xuICAgIC8vIG1lbnUgaXMgY2hlY2tlZCB3aGVuIG9wZW5pbmcgdGhlIG1lbnVcbiAgICAvLyB0aGlzLl9jaGVja01lbnUoKTtcbiAgICB0aGlzLl9oYW5kbGVIb3ZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIC8vI3JlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgICAgdGhpcy5yZW1vdmVPdmVybGF5TGlzdGVuZXJzKCk7XG4gICAgICAvLyNlbmRyZWdpb24gLS0tIFRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS1cbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAndG91Y2hzdGFydCcsXG4gICAgICB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGNoYW5nZSBvZiBhc3NvY2lhdGVkIG1lbnUgKi9cbiAgX2hhbmRsZU1lbnVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBDbG9zZSB0aGUgbWVudSBvdmVybGF5IHdoZW4gdGhlIG1lbnUgaXRzZWxmIHNheXMgaXQgd2FudHMgdG8gYmUgY2xvc2VkXG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgY29uc3QgY2xvc2VkID0gdGhpcy5tZW51LmNsb3NlZCBhcyBPYnNlcnZhYmxlPENsb3NlZEV2ZW50VHlwZT47XG5cbiAgICAgIHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbiA9IGNsb3NlZC5zdWJzY3JpYmUoKHJlYXNvbikgPT4ge1xuICAgICAgICAvLyNyZWdpb24gLS0tIFRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS1cbiAgICAgICAgaWYgKHRoaXMubWVudS5faXNDbG9zaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudS5faXNDbG9zaW5nID0gdHJ1ZTtcblxuICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBtZW51IGFuZCB0ZWxsIGFueSBwYXJlbnQgdG8gcmVzdG9yZSBpdHMgcG9zaXRpb25cbiAgICAgICAgaWYgKHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcpIHtcbiAgICAgICAgICAvLyBGaXJzdCB3ZSB3YWl0IGZvciBhbnkgcnVubmluZyBhbmltYXRpb24gdG8gY29tcGxldGVcbiAgICAgICAgICBjb25zdCBydW5uaW5nQW5pbWF0aW9uRG9uZTogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tZW51Ll9pc0FuaW1hdGluZ1xuICAgICAgICAgICAgPyB0aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmVcbiAgICAgICAgICAgIDogb2JzZXJ2YWJsZU9mKFtudWxsXSk7XG5cbiAgICAgICAgICBydW5uaW5nQW5pbWF0aW9uRG9uZVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSwgZGVsYXkoMCwgYXNhcFNjaGVkdWxlcikpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hbmltYXRlQ2xvc2VNZW51KHJlYXNvbiAhPT0gJ2tleWRvd24nLCByZWFzb24gPT09ICdjbGljaycpO1xuICAgICAgICAgICAgICB0aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmVcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpLCBkZWxheSgwLCBhc2FwU2NoZWR1bGVyKSlcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9kZXN0cm95TWVudSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vI2VuZHJlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lNZW51KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhIGNsaWNrIGNsb3NlZCB0aGUgbWVudSwgd2Ugc2hvdWxkIGNsb3NlIHRoZSBlbnRpcmUgY2hhaW4gb2YgbmVzdGVkIG1lbnVzLlxuICAgICAgICBpZiAoKHJlYXNvbiA9PT0gJ2NsaWNrJyB8fCByZWFzb24gPT09ICd0YWInKSAmJiB0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICAgICAgdGhpcy5fcGFyZW50TWVudS5jbG9zZWQuZW1pdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWVudU9wZW47XG4gIH1cblxuICAvKiogT3BlbiB0aGUgYXNzb2NpYXRlZCBtZW51ICovXG4gIG9wZW5NZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc01lbnVPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hlY2tNZW51KCk7XG5cbiAgICB0aGlzLm1lbnUucGFyZW50TWVudSA9IHRoaXMudHJpZ2dlcnNTdWJtZW51KClcbiAgICAgID8gdGhpcy5fcGFyZW50TWVudVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5tZW51LmRpcmVjdGlvbiA9IHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xuXG4gICAgaWYgKHRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIC8vIE1lbnUgdHJpZ2dlcnMgaW5oZXJpdCB0YXJnZXQgZGV2aWNlIHR5cGVzIGZyb20gdGhlaXIgcGFyZW50LlxuICAgICAgLy8gVWx0aW1hdGVseSBpdCBpcyB0aGUgcm9vdCB0cmlnZ2VyIHRoYXQgZGV0ZXJtaW5lcyBkZXZpY2UgdHlwZXMgZm9yXG4gICAgICAvLyB0aGUgd2hvbGUgbWVudSBoaWVyYXJjaHkuXG4gICAgICB0aGlzLl9jbGllbnRJbnB1dCA9IHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudElucHV0O1xuICAgICAgdGhpcy5fY2xpZW50T3V0cHV0ID0gdGhpcy5fcGFyZW50TWVudS5fY2xpZW50T3V0cHV0O1xuICAgIH1cblxuICAgIC8vI3JlZ2lvbiAtLS0gVG91Y2ggZGV2aWNlIGN1c3RvbWl6YXRpb25zIC0tLVxuICAgIC8vIE1ha2UgdGhlIG1lbnUgd2UncmUgYWJvdXQgdG8gb3BlbiB1c2UgdGhlIHNhbWUgZGV2aWNlcyBhcyB0aGUgdHJpZ2dlclxuICAgIHRoaXMubWVudS5fc2V0RGV2aWNlKHRoaXMuX2NsaWVudElucHV0LCB0aGlzLl9jbGllbnRPdXRwdXQpO1xuXG4gICAgaWYgKHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcpIHtcbiAgICAgIHRoaXMubWVudS5zaG93QmFja0J1dHRvbiA9ICEhdGhpcy5fcGFyZW50TWVudTtcbiAgICAgIHRoaXMubWVudS5fdXBkYXRlU2hvd1RpdGxlKCk7XG5cbiAgICAgIGlmICghdGhpcy5tZW51LmNsb3NlTGFiZWwpIHtcbiAgICAgICAgdGhpcy5tZW51LmNsb3NlTGFiZWwgPSB0aGlzLl9wYXJlbnRNZW51Py5jbG9zZUxhYmVsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1lbnUuc2hvd0Nsb3NlQnV0dG9uID0gISF0aGlzLm1lbnUuY2xvc2VMYWJlbDtcbiAgICB9XG4gICAgdGhpcy5tZW51Ll9pc0Nsb3NpbmcgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhbmVsQ2xhc3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcpIHtcbiAgICAgIHBhbmVsQ2xhc3MucHVzaCgnZ3Jhbml0ZS1vdmVybGF5LXBhbmUtZmlsbC13aWR0aC1ib3R0b20nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxTdHJhdGVneSA9XG4gICAgICB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlICE9PSAndG91Y2gnXG4gICAgICAgID8gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGhhc0JhY2tkcm9wID1cbiAgICAgIHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCcgJiYgIXRoaXMudHJpZ2dlcnNTdWJtZW51KCk7XG4gICAgLy8jZW5kcmVnaW9uIC0tLSBUb3VjaCBkZXZpY2UgY3VzdG9taXphdGlvbnMgLS0tXG5cbiAgICAvLyBDcmVhdGUgYW4gb3ZlcmxheSB0byBzdHVmZiB0aGUgbWVudSAocG9ydGFsKSBpbnRvIGJlbG93XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgYmFja2Ryb3BDbGFzczogJ2dyYW5pdGUtb3ZlcmxheS1kYXJrLWdsYXNzLWJhY2tkcm9wJyxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLFxuICAgICAgICBwYW5lbENsYXNzLFxuICAgICAgICBoYXNCYWNrZHJvcCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcblxuICAgICAgLy8jcmVnaW9uIC0tLSBUb3VjaCBkZXZpY2UgY3VzdG9taXphdGlvbnMgLS0tXG4gICAgICAvLyBBZGQgdG91Y2ggbGlzdGVuZXIgZm9yIHN1Ym1lbnUgYmFjayBwYW4vc3dpcGVcbiAgICAgIGlmICh0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnKSB7XG4gICAgICAgIHRoaXMuYWRkT3ZlcmxheUxpc3RlbmVycygpO1xuICAgICAgfVxuICAgICAgLy8jZW5kcmVnaW9uIC0tLSBUb3VjaCBkZXZpY2UgY3VzdG9taXphdGlvbnMgLS0tXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlc2V0IGFuaW1hdGlvbiBzdGF0ZSBmb3IgcmV1c2VkIG92ZXJsYXlzXG4gICAgICBpZiAodGhpcy5fY2xpZW50T3V0cHV0LmRldmljZSA9PT0gJ3RvdWNoJykge1xuICAgICAgICB0aGlzLm1lbnUuX3BhbmVsQW5pbWF0aW9uU3RhdGUgPSAndm9pZCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHBvcnRhbCBmcm9tIGFzc29jaWF0ZWQgbWVudSdzIHRlbXBsYXRlXG4gICAgaWYgKCF0aGlzLl9wb3J0YWwgfHwgdGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmICE9PSB0aGlzLm1lbnUudGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuX3BvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChcbiAgICAgICAgdGhpcy5tZW51LnRlbXBsYXRlUmVmLFxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEF0dGFjaCBtZW51IHBvcnRhbCB0byBvdmVybGF5IHJlZiAod2hpY2ggaXMgYSBwb3J0YWwgb3V0bGV0KVxuICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3BvcnRhbCk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gc3RyZWFtIHRoYXQgZW1pdHMgd2hlbmV2ZXIgYW4gYWN0aW9uIHRoYXQgc2hvdWxkIGNsb3NlIHRoZSBtZW51IG9jY3Vyc1xuICAgIHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4gdGhpcy5jbG9zZU1lbnUoKVxuICAgICk7XG5cbiAgICB0aGlzLmFuaW1hdGVPcGVuTWVudSgpO1xuXG4gICAgdGhpcy5fc2V0SXNNZW51T3Blbih0cnVlKTtcbiAgICB0aGlzLm1lbnUuZm9jdXNGaXJzdEl0ZW0odGhpcy5fb3BlbmVkQnkgfHwgJ3Byb2dyYW0nKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IHRyaWdnZXJzIGEgc3ViLW1lbnUgb3IgYSB0b3AtbGV2ZWwgb25lLiAqL1xuICB0cmlnZ2Vyc1N1Ym1lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuX21lbnVJdGVtSW5zdGFuY2UgJiYgdGhpcy5fcGFyZW50TWVudSk7XG4gIH1cblxuICAvKiogVG9nZ2xlcyB0aGUgbWVudSBiZXR3ZWVuIHRoZSBvcGVuIGFuZCBjbG9zZWQgc3RhdGVzLiAqL1xuICB0b2dnbGVNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc01lbnVPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcGVuT25DbGljaykge1xuICAgICAgdGhpcy5vcGVuTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgYXNzb2NpYXRlZCBtZW51ICovXG4gIGNsb3NlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLm1lbnUuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBtZW51IHRyaWdnZXIuXG4gICAqIEBwYXJhbSBvcmlnaW4gU291cmNlIG9mIHRoZSBtZW51IHRyaWdnZXIncyBmb2N1cy5cbiAgICovXG4gIGZvY3VzKG9yaWdpbjogRm9jdXNPcmlnaW4gPSAncHJvZ3JhbScsIG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZm9jdXNNb25pdG9yKSB7XG4gICAgICB0aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudCwgb3JpZ2luLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZXRhY2ggbWVudSBwb3J0YWwgZnJvbSBvdmVybGF5IGFuZCB1cGRhdGUgb3BlbiBzdGF0ZSAqL1xuICBfZGVzdHJveU1lbnUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmIHx8ICF0aGlzLl9pc01lbnVPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgIHRoaXMuX3Jlc3RvcmVGb2N1cygpO1xuICAgIHRoaXMubWVudS5fcmVzZXRBbmltYXRpb24oKTtcblxuICAgIHRoaXMuX3NldElzTWVudU9wZW4oZmFsc2UpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgbW91c2UgcHJlc3NlcyBvbiB0aGUgdHJpZ2dlci4gKi9cbiAgX2hhbmRsZU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghaXNGYWtlTW91c2Vkb3duRnJvbVNjcmVlblJlYWRlcihldmVudCkpIHtcbiAgICAgIGlmICh0aGlzLl9vcGVuZWRCeSAhPT0gJ3RvdWNoJykge1xuICAgICAgICAvLyBTaW5jZSByaWdodCBvciBtaWRkbGUgYnV0dG9uIGNsaWNrcyB3b24ndCB0cmlnZ2VyIHRoZSBgY2xpY2tgIGV2ZW50LFxuICAgICAgICAvLyB3ZSBzaG91bGRuJ3QgY29uc2lkZXIgdGhlIG1lbnUgYXMgb3BlbmVkIGJ5IG1vdXNlIGluIHRob3NlIGNhc2VzLlxuICAgICAgICB0aGlzLl9vcGVuZWRCeSA9IGV2ZW50LmJ1dHRvbiA9PT0gMCA/ICdtb3VzZScgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW5jZSBjbGlja2luZyBvbiB0aGUgdHJpZ2dlciB3b24ndCBjbG9zZSB0aGUgbWVudSBpZiBpdCBvcGVucyBhIHN1Yi1tZW51LFxuICAgICAgLy8gd2Ugc2hvdWxkIHByZXZlbnQgZm9jdXMgZnJvbSBtb3Zpbmcgb250byBpdCB2aWEgY2xpY2sgdG8gYXZvaWQgdGhlXG4gICAgICAvLyBoaWdobGlnaHQgZnJvbSBsaW5nZXJpbmcgb24gdGhlIG1lbnUgaXRlbS5cbiAgICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpICYmICF0aGlzLl90b2dnbGVPblN1Ym1lbnVDbGljaygpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXMga2V5IHByZXNzZXMgb24gdGhlIHRyaWdnZXIuICovXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSAmJlxuICAgICAgKChrZXkgPT09ICdBcnJvd1JpZ2h0JyAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdsdHInKSB8fFxuICAgICAgICAoa2V5ID09PSAnQXJyb3dMZWZ0JyAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdydGwnKSlcbiAgICApIHtcbiAgICAgIHRoaXMub3Blbk1lbnUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIHRyaWdnZXIuICovXG4gIF9oYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpKSB7XG4gICAgICAvLyBTdG9wIGV2ZW50IHByb3BhZ2F0aW9uIHRvIGF2b2lkIGNsb3NpbmcgdGhlIHBhcmVudCBtZW51LlxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIHRoaXMuX3RvZ2dsZU9uU3VibWVudUNsaWNrKCkgPyB0aGlzLnRvZ2dsZU1lbnUoKSA6IHRoaXMub3Blbk1lbnUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2dnbGVNZW51KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdG91Y2ggc3RhcnQgZXZlbnRzIG9uIHRoZSB0cmlnZ2VyLlxuICAgKiBOZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiBzbyB3ZSBjYW4gZWFzaWx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGFuZCByZW1vdmVFdmVudExpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlVG91Y2hTdGFydCA9ICgpID0+IHtcbiAgICB0aGlzLl9vcGVuZWRCeSA9ICd0b3VjaCc7XG4gIH07XG5cbiAgLyoqIEhhbmRsZXMgdGhlIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGhvdmVycyBvdmVyIHRoZSB0cmlnZ2VyLiAqL1xuICBwcml2YXRlIF9oYW5kbGVIb3ZlcigpIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgaG92ZXJlZCBpdGVtIGluIG9yZGVyIHRvIHRvZ2dsZSB0aGUgcGFuZWwuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXJzU3VibWVudSgpIHx8ICF0aGlzLl9wYXJlbnRNZW51KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faG92ZXJTdWJzY3JpcHRpb24gPSB0aGlzLl9wYXJlbnRNZW51XG4gICAgICAuX2hvdmVyZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9vcGVuT25Ib3ZlcigpKSxcbiAgICAgICAgLy8gU2luY2Ugd2UgbWlnaHQgaGF2ZSBtdWx0aXBsZSBjb21wZXRpbmcgdHJpZ2dlcnMgZm9yIHRoZSBzYW1lIG1lbnUgKGUuZy4gYSBzdWItbWVudVxuICAgICAgICAvLyB3aXRoIGRpZmZlcmVudCBkYXRhIGFuZCB0cmlnZ2VycyksIHdlIGhhdmUgdG8gZGVsYXkgaXQgYnkgYSB0aWNrIHRvIGVuc3VyZSB0aGF0XG4gICAgICAgIC8vIGl0IHdvbid0IGJlIGNsb3NlZCBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyBvcGVuZWQuXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICAoYWN0aXZlKSA9PiBhY3RpdmUgPT09IHRoaXMuX21lbnVJdGVtSW5zdGFuY2UgLyomJiAhYWN0aXZlLmRpc2FibGVkKi9cbiAgICAgICAgKSxcbiAgICAgICAgZGVsYXkoMCwgYXNhcFNjaGVkdWxlcilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9vcGVuZWRCeSA9ICdtb3VzZSc7XG5cbiAgICAgICAgLy8gSWYgdGhlIHNhbWUgbWVudSBpcyB1c2VkIGJldHdlZW4gbXVsdGlwbGUgdHJpZ2dlcnMsIGl0IG1pZ2h0IHN0aWxsIGJlIGFuaW1hdGluZ1xuICAgICAgICAvLyB3aGlsZSB0aGUgbmV3IHRyaWdnZXIgdHJpZXMgdG8gcmUtb3BlbiBpdC4gV2FpdCBmb3IgdGhlIGFuaW1hdGlvbiB0byBmaW5pc2hcbiAgICAgICAgLy8gYmVmb3JlIGRvaW5nIHNvLiBBbHNvIGludGVycnVwdCBpZiB0aGUgdXNlciBtb3ZlcyB0byBhbm90aGVyIGl0ZW0uXG4gICAgICAgIGlmICh0aGlzLm1lbnUgaW5zdGFuY2VvZiBfTWVudUJhc2VDb21wb25lbnQgJiYgdGhpcy5tZW51Ll9pc0FuaW1hdGluZykge1xuICAgICAgICAgIC8vIFdlIG5lZWQgdGhlIGBkZWxheSgwKWAgaGVyZSBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgICAgIC8vICdjaGFuZ2VkIGFmdGVyIGNoZWNrZWQnIGVycm9ycyBpbiBzb21lIGNhc2VzLiBTZWUgQW5ndWxhciBNYXRlcmlhbCAjMTIxOTQuXG4gICAgICAgICAgdGhpcy5tZW51Ll9hbmltYXRpb25Eb25lXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgZGVsYXkoMCwgYXNhcFNjaGVkdWxlciksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9wYXJlbnRNZW51Ll9ob3ZlcmVkKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub3Blbk1lbnUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBmb2N1cyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBmb2N1c2VkIGJlZm9yZSB0aGUgbWVudSB3YXMgb3Blbi5cbiAgICogQ291bGQgYmUgdGhlIHJvb3QgdHJpZ2dlciBidXR0b24gb3IgYSBzdWJtZW51IHRyaWdnZXIgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzdG9yZUZvY3VzKCkge1xuICAgIC8vIFdlIHNob3VsZCByZXNldCBmb2N1cyBpZiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHVzaW5nIGEga2V5Ym9hcmQgb3JcbiAgICAvLyBpZiB3ZSBoYXZlIGEgdG9wLWxldmVsIHRyaWdnZXIgd2hpY2ggbWlnaHQgY2F1c2UgZm9jdXMgdG8gYmUgbG9zdFxuICAgIC8vIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSBvZiB0aGUgbWVudS5cbiAgICBpZiAoIXRoaXMuX29wZW5lZEJ5KSB7XG4gICAgICAvLyBOb3RlIHRoYXQgdGhlIGZvY3VzIHN0eWxlIHdpbGwgc2hvdyB1cCBib3RoIGZvciBgcHJvZ3JhbWAgYW5kXG4gICAgICAvLyBga2V5Ym9hcmRgIHNvIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lmeSB3aGljaCBvbmUgaXQgaXMuXG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkge1xuICAgICAgdGhpcy5mb2N1cyh0aGlzLl9vcGVuZWRCeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3BlbmVkQnkgPSBudWxsO1xuICB9XG5cbiAgLy8gU2V0IHN0YXRlIHJhdGhlciB0aGFuIHRvZ2dsZSB0byBzdXBwb3J0IHRyaWdnZXJzIHNoYXJpbmcgYSBtZW51XG4gIHByaXZhdGUgX3NldElzTWVudU9wZW4oaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNNZW51T3BlbiA9IGlzT3BlbjtcblxuICAgIGlmICh0aGlzLnRyaWdnZXJzU3VibWVudSgpKSB7XG4gICAgICB0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9oaWdobGlnaHRlZCA9XG4gICAgICAgIGlzT3BlbiAmJiB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlICE9PSAndG91Y2gnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgdGhhdCBhIHZhbGlkIGluc3RhbmNlIG9mIE1lbnVDb21wb25lbnQgaGFzIGJlZW4gcGFzc2VkIGludG9cbiAgICogZ3Jhbml0ZU1lbnVUcmlnZ2VyRm9yLiBJZiBub3QsIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG4gICAqL1xuICBwcml2YXRlIF9jaGVja01lbnUoKSB7XG4gICAgaWYgKCF0aGlzLm1lbnUpIHtcbiAgICAgIHRocm93R3Jhbml0ZU1lbnVNaXNzaW5nRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdHJhdGVneSBmb3IgcG9zaXRpb25pbmcgdGhlIG92ZXJsYXkgZm9yIGRlc2t0b3AgZGV2aWNlczpcbiAgICogUGxhY2UgYWRqYWNlbnQgdG8gdGhlIHRyaWdnZXIgYnV0dG9uIChwcmVmZXJhYmx5IGltbWVkaWF0ZWx5IGJlbG93KVxuICAgKiBpbiBvcmRlciB0byBzaG93IGFzIG11Y2ggb2YgdGhlIG1lbnUgYXMgcG9zc2libGUuXG4gICAqL1xuICBwcml2YXRlIF9kZXNrdG9wUG9zaXRpb25TdHJhdGVneSgpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5OiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudClcbiAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKVxuICAgICAgLndpdGhUcmFuc2Zvcm1PcmlnaW5PbignLmdyYW5pdGUtbWVudScpXG4gICAgICAud2l0aFB1c2goZmFsc2UpO1xuXG4gICAgdGhpcy5fc2V0UG9zaXRpb24ocG9zaXRpb25TdHJhdGVneSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb25zIG9uIGEgcG9zaXRpb24gc3RyYXRlZ3lcbiAgICogc28gdGhlIG92ZXJsYXkgY29ubmVjdHMgd2l0aCB0aGUgdHJpZ2dlciBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSBwb3NpdGlvblN0cmF0ZWd5IFN0cmF0ZWd5IHdob3NlIHBvc2l0aW9uIHRvIHVwZGF0ZS5cbiAgICovXG4gIHByaXZhdGUgX3NldFBvc2l0aW9uKHBvc2l0aW9uU3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSkge1xuICAgIGNvbnN0IE1FTlVfUEFORUxfVE9QX1BBRERJTkcgPSAwO1xuXG4gICAgbGV0IFtvcmlnaW5YLCBvcmlnaW5GYWxsYmFja1hdOiBIb3Jpem9udGFsQ29ubmVjdGlvblBvc1tdID1cbiAgICAgIHRoaXMubWVudS54UG9zaXRpb24gPT09ICdiZWZvcmUnID8gWydlbmQnLCAnc3RhcnQnXSA6IFsnc3RhcnQnLCAnZW5kJ107XG5cbiAgICBjb25zdCBbb3ZlcmxheVksIG92ZXJsYXlGYWxsYmFja1ldOiBWZXJ0aWNhbENvbm5lY3Rpb25Qb3NbXSA9XG4gICAgICB0aGlzLm1lbnUueVBvc2l0aW9uID09PSAnYWJvdmUnID8gWydib3R0b20nLCAndG9wJ10gOiBbJ3RvcCcsICdib3R0b20nXTtcblxuICAgIGxldCBbb3JpZ2luWSwgb3JpZ2luRmFsbGJhY2tZXSA9IFtvdmVybGF5WSwgb3ZlcmxheUZhbGxiYWNrWV07XG4gICAgbGV0IFtvdmVybGF5WCwgb3ZlcmxheUZhbGxiYWNrWF0gPSBbb3JpZ2luWCwgb3JpZ2luRmFsbGJhY2tYXTtcbiAgICBsZXQgb2Zmc2V0WSA9IDA7XG5cbiAgICBpZiAodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkge1xuICAgICAgLy8gV2hlbiB0aGUgbWVudSBpcyBhIHN1Yi1tZW51LCBpdCBzaG91bGQgYWx3YXlzIGFsaWduIGl0c2VsZlxuICAgICAgLy8gdG8gdGhlIGVkZ2VzIG9mIHRoZSB0cmlnZ2VyLCBpbnN0ZWFkIG9mIG92ZXJsYXBwaW5nIGl0LlxuICAgICAgb3ZlcmxheUZhbGxiYWNrWCA9IG9yaWdpblggPVxuICAgICAgICB0aGlzLm1lbnUueFBvc2l0aW9uID09PSAnYmVmb3JlJyA/ICdzdGFydCcgOiAnZW5kJztcbiAgICAgIG9yaWdpbkZhbGxiYWNrWCA9IG92ZXJsYXlYID0gb3JpZ2luWCA9PT0gJ2VuZCcgPyAnc3RhcnQnIDogJ2VuZCc7XG4gICAgICBvZmZzZXRZID1cbiAgICAgICAgb3ZlcmxheVkgPT09ICdib3R0b20nXG4gICAgICAgICAgPyBNRU5VX1BBTkVMX1RPUF9QQURESU5HXG4gICAgICAgICAgOiAtTUVOVV9QQU5FTF9UT1BfUEFERElORztcbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luWSA9IG92ZXJsYXlZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICBvcmlnaW5GYWxsYmFja1kgPSBvdmVybGF5RmFsbGJhY2tZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgfVxuXG4gICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgIHsgb3JpZ2luWCwgb3JpZ2luWSwgb3ZlcmxheVgsIG92ZXJsYXlZLCBvZmZzZXRZIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6IG9yaWdpbkZhbGxiYWNrWCxcbiAgICAgICAgb3JpZ2luWSxcbiAgICAgICAgb3ZlcmxheVg6IG92ZXJsYXlGYWxsYmFja1gsXG4gICAgICAgIG92ZXJsYXlZLFxuICAgICAgICBvZmZzZXRZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWCxcbiAgICAgICAgb3JpZ2luWTogb3JpZ2luRmFsbGJhY2tZLFxuICAgICAgICBvdmVybGF5WCxcbiAgICAgICAgb3ZlcmxheVk6IG92ZXJsYXlGYWxsYmFja1ksXG4gICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogb3JpZ2luRmFsbGJhY2tYLFxuICAgICAgICBvcmlnaW5ZOiBvcmlnaW5GYWxsYmFja1ksXG4gICAgICAgIG92ZXJsYXlYOiBvdmVybGF5RmFsbGJhY2tYLFxuICAgICAgICBvdmVybGF5WTogb3ZlcmxheUZhbGxiYWNrWSxcbiAgICAgICAgb2Zmc2V0WTogLW9mZnNldFksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciBhbiBhY3Rpb24gdGhhdCBzaG91bGQgY2xvc2UgdGhlIG1lbnUgb2NjdXJzLiAqL1xuICBwcml2YXRlIF9tZW51Q2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgY29uc3QgZGV0YWNobWVudHMgPSB0aGlzLl9vdmVybGF5UmVmPy5kZXRhY2htZW50cygpO1xuICAgIGNvbnN0IHBhcmVudENsb3NlID0gdGhpcy5fcGFyZW50TWVudVxuICAgICAgPyB0aGlzLl9wYXJlbnRNZW51LmNsb3NlZFxuICAgICAgOiBvYnNlcnZhYmxlT2YoKTtcblxuICAgIGNvbnN0IGhvdmVyID1cbiAgICAgIHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICdkZXNrdG9wJyAmJiB0aGlzLl9wYXJlbnRNZW51XG4gICAgICAgID8gdGhpcy5fcGFyZW50TWVudS5faG92ZXJlZCgpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHRoaXMuX21lbnVJdGVtSW5zdGFuY2UpLFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2lzTWVudU9wZW4pXG4gICAgICAgICAgKVxuICAgICAgICA6IG9ic2VydmFibGVPZigpO1xuXG4gICAgLy8gTm90ZTogUXVpY2sgZml4LiBGZWF0dXJlIHJlcG9ydGVkbHkgZXhpc3RzIGluIENESyBmb3IgQW5ndWxhciAxMFxuICAgIC8vIEZpbHRlciB0byBwcmV2ZW50IGNsb3Npbmcgd2hlbiBhbmltYXRpbmcgYWRkZWQgdGhvdWdoLiBBcHBsaWVkIHRvXG4gICAgLy8gcm9vdCBtZW51IG9ubHkuXG4gICAgY29uc3Qgb3V0c2lkZUNsaWNrID0gIXRoaXMuX3BhcmVudE1lbnVcbiAgICAgID8gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAnY2xpY2snKS5waXBlKFxuICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgIChlOiBNb3VzZUV2ZW50KSA9PlxuICAgICAgICAgICAgICAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpICE9PSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuZ3Jhbml0ZS1tZW51JykgPT09IG51bGxcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5tZW51Ll9pc0FuaW1hdGluZylcbiAgICAgICAgKVxuICAgICAgOiBvYnNlcnZhYmxlT2YoKTtcblxuICAgIHJldHVybiBtZXJnZShkZXRhY2htZW50cywgaG92ZXIsIHBhcmVudENsb3NlLCBvdXRzaWRlQ2xpY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBvcGVuIHN1Ym1lbnVzIG9uIGhvdmVyLiBUaGlzIGlzIHRydWUgd2hlbiBzaG93aW5nXG4gICAqIGRlc2t0b3AgbWVudXMgYW5kIGhhdmluZyBtb3VzZSBzdXBwb3J0LlxuICAgKi9cbiAgcHJpdmF0ZSBfb3Blbk9uSG92ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnRyaWdnZXJzU3VibWVudSgpXG4gICAgICAgID8gdGhpcy5fcGFyZW50TWVudS5vcGVuT25Ib3ZlclxuICAgICAgICA6IHRoaXMubWVudS5vcGVuT25Ib3ZlcikgJiZcbiAgICAgIHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudE91dHB1dD8uZGV2aWNlID09PSAnZGVza3RvcCcgJiZcbiAgICAgIHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudElucHV0Py5kZXZpY2VzLmluY2x1ZGVzKCdtb3VzZScpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHRvZ2dsZSBzdWJtZW51cyBvbiBjbGljay4gVGhpcyBpcyB0cnVlIHdoZW4gc2hvd2luZyBkZXNrdG9wIG1lbnVzXG4gICAqIHdpdGhvdXQgbW91c2Ugc3VwcG9ydC4gV2hpY2gsIGJ5IHRoZSB3YXksIGlzIG5vdCBhIGdyZWF0IGlkZWEgdG8gYmVnaW4gd2l0aC5cbiAgICovXG4gIHByaXZhdGUgX3RvZ2dsZU9uU3VibWVudUNsaWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhKHRoaXMudHJpZ2dlcnNTdWJtZW51KClcbiAgICAgICAgPyB0aGlzLl9wYXJlbnRNZW51Lm9wZW5PbkhvdmVyXG4gICAgICAgIDogdGhpcy5tZW51Lm9wZW5PbkhvdmVyKSB8fFxuICAgICAgKHRoaXMuX3BhcmVudE1lbnUuX2NsaWVudE91dHB1dD8uZGV2aWNlID09PSAnZGVza3RvcCcgJiZcbiAgICAgICAgIXRoaXMuX3BhcmVudE1lbnUuX2NsaWVudElucHV0Py5kZXZpY2VzLmluY2x1ZGVzKCdtb3VzZScpKVxuICAgICk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4gIC8vIC0tLSBIZXJlIGJlIHRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS0gLy9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKiBTZXQgYW5pbWF0aW9uIHN0YXRlIHRvIGJyaW5nIGEgbmV3bHkgb3BlbmVkIG1lbnUgaW50byB2aWV3ICovXG4gIHByaXZhdGUgYW5pbWF0ZU9wZW5NZW51KCkge1xuICAgIHRoaXMuX2NsaWVudE91dHB1dC5kZXZpY2UgPT09ICd0b3VjaCdcbiAgICAgID8gdGhpcy5hbmltYXRlVG91Y2hPcGVuTWVudSgpXG4gICAgICA6IHRoaXMubWVudS5fc3RhcnRBbmltYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYW5pbWF0ZVRvdWNoT3Blbk1lbnUoKSB7XG4gICAgaWYgKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpIHtcbiAgICAgIC8vIFNsaWRlIG5ld2x5IG9wZW5lZCBzdWIgbWVudSBpbnRvIHZpZXcgZnJvbSB0aGUgc2lkZSxcbiAgICAgIC8vIHB1c2hpbmcgYW55IHBhcmVudCBtZW51IG91dCBvZiB2aWV3IG9uIHRoZSBvdGhlciBzaWRlXG4gICAgICB0aGlzLm1lbnUuX3N0YXJ0VG91Y2hTdWJtZW51RW50ZXJBbmltYXRpb24oKTtcbiAgICAgIHRoaXMuX3BhcmVudE1lbnUuX3N0YXJ0VG91Y2hIaWRlQW5pbWF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNsaWRlIHJvb3QgbWVudSBpbnRvIHZpZXcgZnJvbSBiZWxvd1xuICAgICAgdGhpcy5tZW51Ll9zdGFydFRvdWNoUm9vdEVudGVyQW5pbWF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldCBhbmltYXRpb24gc3RhdGUgdG8gY2xvc2UgdGhlIGFjdGl2ZSBtZW51ICovXG4gIHByaXZhdGUgYW5pbWF0ZUNsb3NlTWVudSh0b0JlbG93OiBib29sZWFuLCB3aXRoRGVsYXk6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnXG4gICAgICA/IHRoaXMuX2FuaW1hdGVUb3VjaENsb3NlTWVudSh0b0JlbG93LCB3aXRoRGVsYXkpXG4gICAgICA6IHRoaXMuX3BhcmVudE1lbnUuX3Jlc2V0QW5pbWF0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9hbmltYXRlVG91Y2hDbG9zZU1lbnUodG9CZWxvdzogYm9vbGVhbiwgd2l0aERlbGF5OiBib29sZWFuKSB7XG4gICAgaWYgKHRvQmVsb3cpIHtcbiAgICAgIC8vIFNsaWRlIG1lbnUgb3V0IG9mIHZpZXcgYmVsb3cgdGhlIHZpZXdwb3J0XG4gICAgICB3aXRoRGVsYXlcbiAgICAgICAgPyB0aGlzLm1lbnUuX3N0YXJ0VG91Y2hDbG9zZURvd25BbmltYXRpb25XaXRoRGVsYXkoKVxuICAgICAgICA6IHRoaXMubWVudS5fc3RhcnRUb3VjaENsb3NlRG93bkFuaW1hdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTbGlkZSB0aGUgY2xvc2VkIG1lbnUgb3V0IG9mIHZpZXcgdG8gdGhlIHNpZGVcbiAgICAgIC8vIGFuZCBzbGlkZSBhbnkgcGFyZW50IG1lbnUgYmFjayBpbnRvIHZpZXdcbiAgICAgIHRoaXMubWVudS5fc3RhcnRUb3VjaENsb3NlU2lkZUFuaW1hdGlvbigpO1xuICAgICAgdGhpcy5fcGFyZW50TWVudT8uX3N0YXJ0VG91Y2hTdWJtZW51RW50ZXJBbmltYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuaW1hdGlvbiBzdGF0ZSB0byBwbGFjZSB0aGUgbWVudSBhbmQgYW55IHBhcmVudCBhdCB0aGUgZ2l2ZW5cbiAgICogaG9yaXpvbnRhbCBwb3NpdGlvbiwgaS5lLiBmb2xsb3dpbmcgdG91Y2ggcGFuIG1vdmVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0geE9mZnNldCBIb3Jpem9udGFsIG9mZnNldFxuICAgKi9cbiAgcHJpdmF0ZSBhbmltYXRlU2V0TWVudVBvc2l0aW9uKHhPZmZzZXQ6IG51bWJlcikge1xuICAgIHRoaXMubWVudS5fc3RhcnRUb3VjaFBhbkFuaW1hdGlvbih4T2Zmc2V0KTtcbiAgICBpZiAodGhpcy5fcGFyZW50TWVudSkge1xuICAgICAgdGhpcy5fcGFyZW50TWVudS5fc3RhcnRUb3VjaEhpZGVQYW5BbmltYXRpb24oeE9mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3RyYXRlZ3kgZm9yIHBvc2l0aW9uaW5nIHRoZSBvdmVybGF5IGRlcGVuZGluZyBvbiB3aGF0IHR5cGUgb2ZcbiAgICogZGV2aWNlIHRoZSBtZW51IGlzIGJlaW5nIHNob3duIG9uXG4gICAqL1xuICBwcml2YXRlIF9wb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnXG4gICAgICA/IHRoaXMuX3RvdWNoUG9zaXRpb25TdHJhdGVneSgpXG4gICAgICA6IHRoaXMuX2Rlc2t0b3BQb3NpdGlvblN0cmF0ZWd5KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdHJhdGVneSBmb3IgcG9zaXRpb25pbmcgdGhlIG92ZXJsYXkgZm9yIHRvdWNoIGRldmljZXM6XG4gICAqIFBsYWNlIGNlbnRlcmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICovXG4gIHByaXZhdGUgX3RvdWNoUG9zaXRpb25TdHJhdGVneSgpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbiAgLy8gLS0tIEhlcmUgYmUgcG9vciBtYW4ncyB0b3VjaCBnZXN0dXJlcyAtLS0gLy9cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cblxuICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggSGFtbWVyIG9yIG90aGVyIGdlc3R1cmUgbGlicmFyeVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRvdWNoIHN0YXJ0IGV2ZW50cyBvbiB0aGUgb3ZlcmxheSBob3N0IGVsZW1lbnQgKHdyYXBwZXIpLlxuICAgKiBOZWVkcyB0byBiZSBhbiBhcnJvdyBmdW5jdGlvbiBzbyB3ZSBjYW4gZWFzaWx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGFuZCByZW1vdmVFdmVudExpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlT3ZlcmxheVRvdWNoU3RhcnQgPSAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHtcbiAgICBpZiAodGhpcy5tZW51Ll9pc0FuaW1hdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RvdWNoU3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICB0aGlzLl90b3VjaFN0YXJ0WCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gICAgdGhpcy5fdG91Y2hTdGFydFkgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICAgIHRoaXMuX3RvdWNoQ3VycmVudFggPSB0aGlzLl90b3VjaFN0YXJ0WDtcbiAgICB0aGlzLl90b3VjaEN1cnJlbnRZID0gdGhpcy5fdG91Y2hTdGFydFk7XG4gICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYID0gMDtcbiAgICB0aGlzLl90b3VjaE1heFggPVxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB0aGlzLl90b3VjaExvY2tlZFggPSBudWxsO1xuICAgIHRoaXMuX3RvdWNoVG91Y2hpbmdFbGVtZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBwcml2YXRlIF9oYW5kbGVPdmVybGF5VG91Y2hNb3ZlID0gKGV2ZW50OiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLl90b3VjaFRvdWNoaW5nRWxlbWVudCB8fCB0aGlzLm1lbnUuX2lzQW5pbWF0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3RvdWNoTG9ja2VkWCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RvdWNoQ3VycmVudFggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICAgIHRoaXMuX3RvdWNoQ3VycmVudFkgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuXG4gICAgLy8gTG9jayBYLWF4aXMgcGFuIGlmIGluaXRpYXRpbmcgcGFuIG9uIFktYXhpc1xuICAgIGlmICh0aGlzLl90b3VjaExvY2tlZFggPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGR5ID0gTWF0aC5hYnModGhpcy5fdG91Y2hDdXJyZW50WSAtIHRoaXMuX3RvdWNoU3RhcnRZKTtcbiAgICAgIGNvbnN0IGR4ID0gTWF0aC5hYnModGhpcy5fdG91Y2hDdXJyZW50WCAtIHRoaXMuX3RvdWNoU3RhcnRYKTtcbiAgICAgIGlmIChkeCA+IDEwIHx8IGR5ID4gMTApIHtcbiAgICAgICAgdGhpcy5fdG91Y2hMb2NrZWRYID0gZHkgPiBkeDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc3RyaWN0IHRvIHJpZ2h0IHBhbi9zd2lwZSBhbmQgbWFrZSBtZW51IG1vdmVtZW50IGV4dHJlbWVseSBzbG93IHdoZW5cbiAgICAvLyBtb3ZlZCBwYXN0IGFsbG93ZWQgbGltaXRzLlxuICAgIGNvbnN0IG1lbnVNYXJnaW4gPSAxNjtcbiAgICB0aGlzLl90b3VjaFRyYW5zbGF0ZVggPSB0aGlzLl90b3VjaEN1cnJlbnRYIC0gdGhpcy5fdG91Y2hTdGFydFg7XG5cbiAgICBpZiAodGhpcy5fdG91Y2hUcmFuc2xhdGVYIDwgMCkge1xuICAgICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYID0gdGhpcy5lYXNlT3V0RXhwbyhcbiAgICAgICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYLFxuICAgICAgICAwLFxuICAgICAgICAtbWVudU1hcmdpbiAvIDIsXG4gICAgICAgIHRoaXMuX3RvdWNoTWF4WCAqIC00XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA9IHRoaXMuZWFzZU91dEV4cG8oXG4gICAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCxcbiAgICAgICAgMCxcbiAgICAgICAgbWVudU1hcmdpbiAvIDIsXG4gICAgICAgIHRoaXMuX3RvdWNoTWF4WCAqIDRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl90b3VjaFRyYW5zbGF0ZVggPiB0aGlzLl90b3VjaE1heFgpIHtcbiAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA9IHRoaXMuZWFzZU91dEV4cG8oXG4gICAgICAgIHRoaXMuX3RvdWNoVHJhbnNsYXRlWCAtIHRoaXMuX3RvdWNoTWF4WCxcbiAgICAgICAgdGhpcy5fdG91Y2hNYXhYLFxuICAgICAgICBtZW51TWFyZ2luIC8gMixcbiAgICAgICAgdGhpcy5fdG91Y2hNYXhYICogNFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgbmV3IHN1YiBtZW51IHBvc2l0aW9uIGFuZCB0ZWxsIGFueSBwYXJlbnQgdG8gZm9sbG93O1xuICAgIHRoaXMuYW5pbWF0ZVNldE1lbnVQb3NpdGlvbih0aGlzLl90b3VjaFRyYW5zbGF0ZVgpO1xuICB9O1xuXG4gIHByaXZhdGUgX2hhbmRsZU92ZXJsYXlUb3VjaEVuZCA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMuX3RvdWNoVG91Y2hpbmdFbGVtZW50IHx8IHRoaXMubWVudS5faXNBbmltYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90b3VjaFRyYW5zbGF0ZVggPSB0aGlzLl90b3VjaEN1cnJlbnRYIC0gdGhpcy5fdG91Y2hTdGFydFg7XG4gICAgaWYgKHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RvdWNoVG91Y2hpbmdFbGVtZW50ID0gZmFsc2U7XG4gICAgdGhpcy5fdG91Y2hUaW1lVGFrZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuX3RvdWNoU3RhcnRUaW1lO1xuXG4gICAgY29uc3Qgc3dpcGVNaW5EaXN0YW5jZSA9IDEwO1xuICAgIGNvbnN0IHN3aXBlTWluVGltZSA9IDUwO1xuICAgIGNvbnN0IHN3aXBlTWF4VGltZSA9IDMwMDtcblxuICAgIGNvbnN0IHBhbm5lZEhhbGZ3YXlSaWdodCA9IHRoaXMuX3RvdWNoVHJhbnNsYXRlWCA+IHRoaXMuX3RvdWNoTWF4WCAvIDI7XG4gICAgY29uc3Qgc3dpcGVkUmlnaHQgPVxuICAgICAgdGhpcy5fdG91Y2hUcmFuc2xhdGVYID4gdGhpcy5fdG91Y2hNYXhYIC8gc3dpcGVNaW5EaXN0YW5jZSAmJlxuICAgICAgdGhpcy5fdG91Y2hUaW1lVGFrZW4gPiBzd2lwZU1pblRpbWUgJiZcbiAgICAgIHRoaXMuX3RvdWNoVGltZVRha2VuIDwgc3dpcGVNYXhUaW1lO1xuXG4gICAgaWYgKCEhdGhpcy5fcGFyZW50TWVudSAmJiAoc3dpcGVkUmlnaHQgfHwgcGFubmVkSGFsZndheVJpZ2h0KSkge1xuICAgICAgLy8gQ2xvc2Ugc3VibWVudSBrZXlkb3duLXN0eWxlOiBjbG9zZSBvbmx5IHRoaXMgbWVudSBhbmQgbGVhdmUgcGFyZW50cyBvcGVuXG4gICAgICB0aGlzLm1lbnUuY2xvc2VkLmVtaXQoJ2tleWRvd24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFuIGVuZGVkIGJ1dCB0aGUgbWVudSB3YXMgbm90IG1vdmVkIGZhciBlbm91Z2guIFJlc2V0IG1lbnVzIHRvXG4gICAgICAvLyB3aGVyZSB0aGV5IHdlcmUgYmVmb3JlIHBhbm5pbmcgc3RhcmVkLlxuICAgICAgdGhpcy5hbmltYXRlT3Blbk1lbnUoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0b3VjaCBkZXZpY2UgcGFuL3N3aXBlIGxpc3RlbmVycyBmcm9tIG92ZXJsYXkgaG9zdCBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGFkZE92ZXJsYXlMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNoc3RhcnQnLFxuICAgICAgdGhpcy5faGFuZGxlT3ZlcmxheVRvdWNoU3RhcnQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNobW92ZScsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hNb3ZlLFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICd0b3VjaGVuZCcsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hFbmQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0b3VjaCBkZXZpY2UgcGFuL3N3aXBlIGxpc3RlbmVycyBmcm9tIG92ZXJsYXkgaG9zdCBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU92ZXJsYXlMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNoc3RhcnQnLFxuICAgICAgdGhpcy5faGFuZGxlT3ZlcmxheVRvdWNoU3RhcnQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNobW92ZScsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hNb3ZlLFxuICAgICAgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zXG4gICAgKTtcblxuICAgIHRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICd0b3VjaGVuZCcsXG4gICAgICB0aGlzLl9oYW5kbGVPdmVybGF5VG91Y2hFbmQsXG4gICAgICBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkIGV4cG9uZW50aWFsIGVhc2Ugb3V0IGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50IEN1cnJlbnQgdmFsdWVcbiAgICogQHBhcmFtIG9mZnNldCBPZmZzZXQgdmFsdWUsIHRvIHdoaWNoIGNhbGN1bGF0ZWQgdmFsdWUgd2lsbCBiZSBhZGRlZFxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgdmFsdWVcbiAgICogQHBhcmFtIGVuZCBWYWx1ZSB0byB3aGljaCBjdXJyZW50IHZhbHVlIGlzIGNvbXBhcmVkXG4gICAqL1xuICBwcml2YXRlIGVhc2VPdXRFeHBvKFxuICAgIGN1cnJlbnQ6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB0YXJnZXQ6IG51bWJlcixcbiAgICBlbmQ6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIHJldHVybiBjdXJyZW50ID09PSBlbmRcbiAgICAgID8gb2Zmc2V0ICsgdGFyZ2V0XG4gICAgICA6IHRhcmdldCAqICgtTWF0aC5wb3coMiwgKC0xMCAqIGN1cnJlbnQpIC8gZW5kKSArIDEpICsgb2Zmc2V0O1xuICB9XG59XG4iXX0=
@@ -4,20 +4,20 @@ import { graniteMenuTouchAnimations } from './menu-touch-animations';
4
4
  import { GRANITE_MENU_PANEL } from './menu-panel';
5
5
  import { _MenuBaseComponent } from './menu-base';
6
6
  import * as i0 from "@angular/core";
7
- import * as i1 from "./menu-touch-title.component";
7
+ import * as i1 from "@angular/common";
8
8
  import * as i2 from "./menu-touch-close.component";
9
- import * as i3 from "@angular/common";
9
+ import * as i3 from "./menu-touch-title.component";
10
10
  export class GraniteMenuComponent extends _MenuBaseComponent {
11
11
  }
12
- GraniteMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
13
- GraniteMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: GraniteMenuComponent, selector: "granite-menu", providers: [
12
+ GraniteMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
13
+ GraniteMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: GraniteMenuComponent, selector: "granite-menu", providers: [
14
14
  { provide: GRANITE_MENU_PANEL, useExisting: GraniteMenuComponent },
15
- ], exportAs: ["graniteMenu"], usesInheritance: true, ngImport: i0, template: "<!--\n Using separate template part for desktop and touch output, because of\n animation triggers and slightly different content.\n-->\n<ng-template>\n <!-- Desktop -->\n <ng-container *ngIf=\"_clientOutput.device === 'desktop'\">\n <div\n #menu\n class=\"granite-menu\"\n [class.is-menu-empty]=\"_isMenuEmpty$ | async\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuDesktop]=\"_transformMenu | async\"\n (@transformMenuDesktop.start)=\"_onAnimationStart($event)\"\n (@transformMenuDesktop.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Touch -->\n <ng-container *ngIf=\"_clientOutput?.device === 'touch'\">\n <div\n #menu\n class=\"granite-menu granite-device-output-touch\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuTouch]=\"_transformMenu | async\"\n (@transformMenuTouch.start)=\"_onAnimationStart($event)\"\n (@transformMenuTouch.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <div *ngIf=\"showTitle\" class=\"header-container\">\n <button\n [disabled]=\"!showBackButton\"\n graniteMenuTouchTitleItem\n (click)=\"_handleBackClick($event)\"\n >\n {{ title }}\n </button>\n </div>\n\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n\n <div class=\"footer-container\"></div>\n </div>\n </div>\n\n <!-- Close button -->\n <div class=\"close\" [@transformCloseButton]=\"_transformMenu | async\">\n <button\n *ngIf=\"showCloseButton\"\n graniteMenuTouchCloseItem\n (click)=\"_handleCloseClick()\"\n >\n {{ closeLabel }}\n </button>\n </div>\n </ng-container>\n\n <!--\n Content template shared between desktop and touch parts, as <ng-content>\n can't be used in two places in the same template\n -->\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</ng-template>\n", styles: [".granite-menu:not(.granite-device-output-touch){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));min-width:7rem;overflow-x:hidden;overflow-y:hidden}.granite-menu:not(.granite-device-output-touch).ng-animating{pointer-events:none}.granite-menu:not(.granite-device-output-touch):not(.is-menu-empty){min-height:2rem}.granite-menu:not(.granite-device-output-touch):hover{overflow-y:auto}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar{width:var(--granite-spacing-xs)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-thumb{background-color:var(--granite-color-border-hard);border-radius:calc(var(--granite-spacing-m) * .125)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-track{background-color:var(--granite-color-background-hover)}.granite-menu.granite-device-output-touch{background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.granite-menu.granite-device-output-touch.ng-animating{pointer-events:none}.granite-menu.granite-device-output-touch:not(.is-menu-empty){min-height:3rem}.granite-menu.granite-device-output-touch:not(.close){margin:var(--granite-spacing-xs)}.granite-menu.granite-device-output-touch.close{margin-inline-start:var(--granite-spacing-xs);margin-inline-end:var(--granite-spacing-xs);margin-block-end:var(--granite-spacing-xs)}.granite-menu.granite-device-output-touch .header-container{position:sticky;top:0;background-color:var(--granite-color-background-variant);z-index:1}.granite-menu.granite-device-output-touch .footer-container{position:sticky;bottom:0;height:0}.close:not(:empty){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.close:not(:empty).ng-animating{pointer-events:none}.close:not(:empty):not(.is-menu-empty){min-height:3rem}.close:not(:empty):not(.close){margin:var(--granite-spacing-xs)}.close:not(:empty).close{margin-inline-start:var(--granite-spacing-xs);margin-inline-end:var(--granite-spacing-xs);margin-block-end:var(--granite-spacing-xs)}\n"], components: [{ type: i1.GraniteMenuTouchTitleItemComponent, selector: "[graniteMenuTouchTitleItem]", exportAs: ["graniteMenuTouchTitleItem"] }, { type: i2.GraniteMenuTouchCloseComponent, selector: "[graniteMenuTouchCloseItem]", exportAs: ["graniteMenuTouchCloseItem"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i3.AsyncPipe }, animations: [
15
+ ], exportAs: ["graniteMenu"], usesInheritance: true, ngImport: i0, template: "<!--\n Using separate template part for desktop and touch output, because of\n animation triggers and slightly different content.\n-->\n<ng-template>\n <!-- Desktop -->\n <ng-container *ngIf=\"_clientOutput.device === 'desktop'\">\n <div\n #menu\n class=\"granite-menu\"\n [class.is-menu-empty]=\"_isMenuEmpty$ | async\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuDesktop]=\"_transformMenu | async\"\n (@transformMenuDesktop.start)=\"_onAnimationStart($event)\"\n (@transformMenuDesktop.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Touch -->\n <ng-container *ngIf=\"_clientOutput?.device === 'touch'\">\n <div\n #menu\n class=\"granite-menu granite-device-output-touch\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuTouch]=\"_transformMenu | async\"\n (@transformMenuTouch.start)=\"_onAnimationStart($event)\"\n (@transformMenuTouch.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <div *ngIf=\"showTitle\" class=\"header-container\">\n <button\n [disabled]=\"!showBackButton\"\n graniteMenuTouchTitleItem\n (click)=\"_handleBackClick($event)\"\n >\n {{ title }}\n </button>\n </div>\n\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n\n <div class=\"footer-container\"></div>\n </div>\n </div>\n\n <!-- Close button -->\n <div class=\"close\" [@transformCloseButton]=\"_transformMenu | async\">\n <button\n *ngIf=\"showCloseButton\"\n graniteMenuTouchCloseItem\n (click)=\"_handleCloseClick()\"\n >\n {{ closeLabel }}\n </button>\n </div>\n </ng-container>\n\n <!--\n Content template shared between desktop and touch parts, as <ng-content>\n can't be used in two places in the same template\n -->\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</ng-template>\n", styles: [".granite-menu:not(.granite-device-output-touch){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));min-width:7rem;overflow-x:hidden;overflow-y:hidden}.granite-menu:not(.granite-device-output-touch).ng-animating{pointer-events:none}.granite-menu:not(.granite-device-output-touch):not(.is-menu-empty){min-height:2rem}.granite-menu:not(.granite-device-output-touch):hover{overflow-y:auto}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar{width:var(--granite-spacing-4)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-thumb{background-color:var(--granite-color-border-hard);border-radius:calc(var(--granite-spacing-16) * .125)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-track{background-color:var(--granite-color-background-hover)}.granite-menu.granite-device-output-touch{background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.granite-menu.granite-device-output-touch.ng-animating{pointer-events:none}.granite-menu.granite-device-output-touch:not(.is-menu-empty){min-height:3rem}.granite-menu.granite-device-output-touch:not(.close){margin:var(--granite-spacing-4)}.granite-menu.granite-device-output-touch.close{margin-inline-start:var(--granite-spacing-4);margin-inline-end:var(--granite-spacing-4);margin-block-end:var(--granite-spacing-4)}.granite-menu.granite-device-output-touch .header-container{position:sticky;top:0;background-color:var(--granite-color-background-variant);z-index:1}.granite-menu.granite-device-output-touch .footer-container{position:sticky;bottom:0;height:0}.close:not(:empty){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.close:not(:empty).ng-animating{pointer-events:none}.close:not(:empty):not(.is-menu-empty){min-height:3rem}.close:not(:empty):not(.close){margin:var(--granite-spacing-4)}.close:not(:empty).close{margin-inline-start:var(--granite-spacing-4);margin-inline-end:var(--granite-spacing-4);margin-block-end:var(--granite-spacing-4)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.GraniteMenuTouchCloseComponent, selector: "[graniteMenuTouchCloseItem]", exportAs: ["graniteMenuTouchCloseItem"] }, { kind: "component", type: i3.GraniteMenuTouchTitleItemComponent, selector: "[graniteMenuTouchTitleItem]", exportAs: ["graniteMenuTouchTitleItem"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], animations: [
16
16
  graniteMenuDesktopAnimations.transformMenuDesktop,
17
17
  graniteMenuTouchAnimations.transformMenuTouch,
18
18
  graniteMenuTouchAnimations.transformCloseButton,
19
19
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuComponent, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuComponent, decorators: [{
21
21
  type: Component,
22
22
  args: [{ selector: 'granite-menu', changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'graniteMenu', animations: [
23
23
  graniteMenuDesktopAnimations.transformMenuDesktop,
@@ -25,6 +25,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
25
25
  graniteMenuTouchAnimations.transformCloseButton,
26
26
  ], providers: [
27
27
  { provide: GRANITE_MENU_PANEL, useExisting: GraniteMenuComponent },
28
- ], template: "<!--\n Using separate template part for desktop and touch output, because of\n animation triggers and slightly different content.\n-->\n<ng-template>\n <!-- Desktop -->\n <ng-container *ngIf=\"_clientOutput.device === 'desktop'\">\n <div\n #menu\n class=\"granite-menu\"\n [class.is-menu-empty]=\"_isMenuEmpty$ | async\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuDesktop]=\"_transformMenu | async\"\n (@transformMenuDesktop.start)=\"_onAnimationStart($event)\"\n (@transformMenuDesktop.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Touch -->\n <ng-container *ngIf=\"_clientOutput?.device === 'touch'\">\n <div\n #menu\n class=\"granite-menu granite-device-output-touch\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuTouch]=\"_transformMenu | async\"\n (@transformMenuTouch.start)=\"_onAnimationStart($event)\"\n (@transformMenuTouch.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <div *ngIf=\"showTitle\" class=\"header-container\">\n <button\n [disabled]=\"!showBackButton\"\n graniteMenuTouchTitleItem\n (click)=\"_handleBackClick($event)\"\n >\n {{ title }}\n </button>\n </div>\n\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n\n <div class=\"footer-container\"></div>\n </div>\n </div>\n\n <!-- Close button -->\n <div class=\"close\" [@transformCloseButton]=\"_transformMenu | async\">\n <button\n *ngIf=\"showCloseButton\"\n graniteMenuTouchCloseItem\n (click)=\"_handleCloseClick()\"\n >\n {{ closeLabel }}\n </button>\n </div>\n </ng-container>\n\n <!--\n Content template shared between desktop and touch parts, as <ng-content>\n can't be used in two places in the same template\n -->\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</ng-template>\n", styles: [".granite-menu:not(.granite-device-output-touch){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));min-width:7rem;overflow-x:hidden;overflow-y:hidden}.granite-menu:not(.granite-device-output-touch).ng-animating{pointer-events:none}.granite-menu:not(.granite-device-output-touch):not(.is-menu-empty){min-height:2rem}.granite-menu:not(.granite-device-output-touch):hover{overflow-y:auto}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar{width:var(--granite-spacing-xs)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-thumb{background-color:var(--granite-color-border-hard);border-radius:calc(var(--granite-spacing-m) * .125)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-track{background-color:var(--granite-color-background-hover)}.granite-menu.granite-device-output-touch{background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.granite-menu.granite-device-output-touch.ng-animating{pointer-events:none}.granite-menu.granite-device-output-touch:not(.is-menu-empty){min-height:3rem}.granite-menu.granite-device-output-touch:not(.close){margin:var(--granite-spacing-xs)}.granite-menu.granite-device-output-touch.close{margin-inline-start:var(--granite-spacing-xs);margin-inline-end:var(--granite-spacing-xs);margin-block-end:var(--granite-spacing-xs)}.granite-menu.granite-device-output-touch .header-container{position:sticky;top:0;background-color:var(--granite-color-background-variant);z-index:1}.granite-menu.granite-device-output-touch .footer-container{position:sticky;bottom:0;height:0}.close:not(:empty){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.close:not(:empty).ng-animating{pointer-events:none}.close:not(:empty):not(.is-menu-empty){min-height:3rem}.close:not(:empty):not(.close){margin:var(--granite-spacing-xs)}.close:not(:empty).close{margin-inline-start:var(--granite-spacing-xs);margin-inline-end:var(--granite-spacing-xs);margin-block-end:var(--granite-spacing-xs)}\n"] }]
28
+ ], template: "<!--\n Using separate template part for desktop and touch output, because of\n animation triggers and slightly different content.\n-->\n<ng-template>\n <!-- Desktop -->\n <ng-container *ngIf=\"_clientOutput.device === 'desktop'\">\n <div\n #menu\n class=\"granite-menu\"\n [class.is-menu-empty]=\"_isMenuEmpty$ | async\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuDesktop]=\"_transformMenu | async\"\n (@transformMenuDesktop.start)=\"_onAnimationStart($event)\"\n (@transformMenuDesktop.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- Touch -->\n <ng-container *ngIf=\"_clientOutput?.device === 'touch'\">\n <div\n #menu\n class=\"granite-menu granite-device-output-touch\"\n tabindex=\"-1\"\n [id]=\"panelId\"\n [@transformMenuTouch]=\"_transformMenu | async\"\n (@transformMenuTouch.start)=\"_onAnimationStart($event)\"\n (@transformMenuTouch.done)=\"_onAnimationDone($event)\"\n (click)=\"_handleClick()\"\n (keydown)=\"_handleKeydown($event)\"\n >\n <div class=\"granite-menu-content\">\n <div *ngIf=\"showTitle\" class=\"header-container\">\n <button\n [disabled]=\"!showBackButton\"\n graniteMenuTouchTitleItem\n (click)=\"_handleBackClick($event)\"\n >\n {{ title }}\n </button>\n </div>\n\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n\n <div class=\"footer-container\"></div>\n </div>\n </div>\n\n <!-- Close button -->\n <div class=\"close\" [@transformCloseButton]=\"_transformMenu | async\">\n <button\n *ngIf=\"showCloseButton\"\n graniteMenuTouchCloseItem\n (click)=\"_handleCloseClick()\"\n >\n {{ closeLabel }}\n </button>\n </div>\n </ng-container>\n\n <!--\n Content template shared between desktop and touch parts, as <ng-content>\n can't be used in two places in the same template\n -->\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n</ng-template>\n", styles: [".granite-menu:not(.granite-device-output-touch){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));min-width:7rem;overflow-x:hidden;overflow-y:hidden}.granite-menu:not(.granite-device-output-touch).ng-animating{pointer-events:none}.granite-menu:not(.granite-device-output-touch):not(.is-menu-empty){min-height:2rem}.granite-menu:not(.granite-device-output-touch):hover{overflow-y:auto}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar{width:var(--granite-spacing-4)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-thumb{background-color:var(--granite-color-border-hard);border-radius:calc(var(--granite-spacing-16) * .125)}.granite-menu:not(.granite-device-output-touch)::-webkit-scrollbar-track{background-color:var(--granite-color-background-hover)}.granite-menu.granite-device-output-touch{background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.granite-menu.granite-device-output-touch.ng-animating{pointer-events:none}.granite-menu.granite-device-output-touch:not(.is-menu-empty){min-height:3rem}.granite-menu.granite-device-output-touch:not(.close){margin:var(--granite-spacing-4)}.granite-menu.granite-device-output-touch.close{margin-inline-start:var(--granite-spacing-4);margin-inline-end:var(--granite-spacing-4);margin-block-end:var(--granite-spacing-4)}.granite-menu.granite-device-output-touch .header-container{position:sticky;top:0;background-color:var(--granite-color-background-variant);z-index:1}.granite-menu.granite-device-output-touch .footer-container{position:sticky;bottom:0;height:0}.close:not(:empty){background-color:var(--granite-color-background-variant);color:var(--granite-color-text);overflow:auto;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 2rem);outline:0;-webkit-user-select:none;user-select:none;filter:drop-shadow(var(--granite-shadow-l));border-radius:.25rem}.close:not(:empty).ng-animating{pointer-events:none}.close:not(:empty):not(.is-menu-empty){min-height:3rem}.close:not(:empty):not(.close){margin:var(--granite-spacing-4)}.close:not(:empty).close{margin-inline-start:var(--granite-spacing-4);margin-inline-end:var(--granite-spacing-4);margin-block-end:var(--granite-spacing-4)}\n"] }]
29
29
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7O0FBaUJqRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsa0JBQWtCOztrSEFBL0Msb0JBQW9CO3NHQUFwQixvQkFBb0IsdUNBSnBCO1FBQ1QsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO0tBQ25FLDRFQ3BCSCx1eUVBMkVBLGltR0Q5RGM7UUFDViw0QkFBNEIsQ0FBQyxvQkFBb0I7UUFDakQsMEJBQTBCLENBQUMsa0JBQWtCO1FBQzdDLDBCQUEwQixDQUFDLG9CQUFvQjtLQUNoRDs0RkFLVSxvQkFBb0I7a0JBZmhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLGFBQWEsY0FDWDt3QkFDViw0QkFBNEIsQ0FBQyxvQkFBb0I7d0JBQ2pELDBCQUEwQixDQUFDLGtCQUFrQjt3QkFDN0MsMEJBQTBCLENBQUMsb0JBQW9CO3FCQUNoRCxhQUNVO3dCQUNULEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsc0JBQXNCLEVBQUU7cUJBQ25FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBncmFuaXRlTWVudURlc2t0b3BBbmltYXRpb25zIH0gZnJvbSAnLi9tZW51LWRlc2t0b3AtYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBncmFuaXRlTWVudVRvdWNoQW5pbWF0aW9ucyB9IGZyb20gJy4vbWVudS10b3VjaC1hbmltYXRpb25zJztcbmltcG9ydCB7IEdSQU5JVEVfTUVOVV9QQU5FTCB9IGZyb20gJy4vbWVudS1wYW5lbCc7XG5pbXBvcnQgeyBfTWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuL21lbnUtYmFzZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dyYW5pdGUtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydtZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ2dyYW5pdGVNZW51JyxcbiAgYW5pbWF0aW9uczogW1xuICAgIGdyYW5pdGVNZW51RGVza3RvcEFuaW1hdGlvbnMudHJhbnNmb3JtTWVudURlc2t0b3AsXG4gICAgZ3Jhbml0ZU1lbnVUb3VjaEFuaW1hdGlvbnMudHJhbnNmb3JtTWVudVRvdWNoLFxuICAgIGdyYW5pdGVNZW51VG91Y2hBbmltYXRpb25zLnRyYW5zZm9ybUNsb3NlQnV0dG9uLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEdSQU5JVEVfTUVOVV9QQU5FTCwgdXNlRXhpc3Rpbmc6IEdyYW5pdGVNZW51Q29tcG9uZW50IH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEdyYW5pdGVNZW51Q29tcG9uZW50IGV4dGVuZHMgX01lbnVCYXNlQ29tcG9uZW50IHt9XG4iLCI8IS0tXG4gIFVzaW5nIHNlcGFyYXRlIHRlbXBsYXRlIHBhcnQgZm9yIGRlc2t0b3AgYW5kIHRvdWNoIG91dHB1dCwgYmVjYXVzZSBvZlxuICBhbmltYXRpb24gdHJpZ2dlcnMgYW5kIHNsaWdodGx5IGRpZmZlcmVudCBjb250ZW50LlxuLS0+XG48bmctdGVtcGxhdGU+XG4gIDwhLS0gRGVza3RvcCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAnZGVza3RvcCdcIj5cbiAgICA8ZGl2XG4gICAgICAjbWVudVxuICAgICAgY2xhc3M9XCJncmFuaXRlLW1lbnVcIlxuICAgICAgW2NsYXNzLmlzLW1lbnUtZW1wdHldPVwiX2lzTWVudUVtcHR5JCB8IGFzeW5jXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW2lkXT1cInBhbmVsSWRcIlxuICAgICAgW0B0cmFuc2Zvcm1NZW51RGVza3RvcF09XCJfdHJhbnNmb3JtTWVudSB8IGFzeW5jXCJcbiAgICAgIChAdHJhbnNmb3JtTWVudURlc2t0b3Auc3RhcnQpPVwiX29uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KVwiXG4gICAgICAoQHRyYW5zZm9ybU1lbnVEZXNrdG9wLmRvbmUpPVwiX29uQW5pbWF0aW9uRG9uZSgkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJfaGFuZGxlQ2xpY2soKVwiXG4gICAgICAoa2V5ZG93bik9XCJfaGFuZGxlS2V5ZG93bigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3Jhbml0ZS1tZW51LWNvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBUb3VjaCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9jbGllbnRPdXRwdXQ/LmRldmljZSA9PT0gJ3RvdWNoJ1wiPlxuICAgIDxkaXZcbiAgICAgICNtZW51XG4gICAgICBjbGFzcz1cImdyYW5pdGUtbWVudSBncmFuaXRlLWRldmljZS1vdXRwdXQtdG91Y2hcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbaWRdPVwicGFuZWxJZFwiXG4gICAgICBbQHRyYW5zZm9ybU1lbnVUb3VjaF09XCJfdHJhbnNmb3JtTWVudSB8IGFzeW5jXCJcbiAgICAgIChAdHJhbnNmb3JtTWVudVRvdWNoLnN0YXJ0KT1cIl9vbkFuaW1hdGlvblN0YXJ0KCRldmVudClcIlxuICAgICAgKEB0cmFuc2Zvcm1NZW51VG91Y2guZG9uZSk9XCJfb25BbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cIl9oYW5kbGVDbGljaygpXCJcbiAgICAgIChrZXlkb3duKT1cIl9oYW5kbGVLZXlkb3duKCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJncmFuaXRlLW1lbnUtY29udGVudFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RpdGxlXCIgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzaG93QmFja0J1dHRvblwiXG4gICAgICAgICAgICBncmFuaXRlTWVudVRvdWNoVGl0bGVJdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZUJhY2tDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0aXRsZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWNvbnRhaW5lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENsb3NlIGJ1dHRvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VcIiBbQHRyYW5zZm9ybUNsb3NlQnV0dG9uXT1cIl90cmFuc2Zvcm1NZW51IHwgYXN5bmNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2xvc2VCdXR0b25cIlxuICAgICAgICBncmFuaXRlTWVudVRvdWNoQ2xvc2VJdGVtXG4gICAgICAgIChjbGljayk9XCJfaGFuZGxlQ2xvc2VDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAge3sgY2xvc2VMYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS1cbiAgICBDb250ZW50IHRlbXBsYXRlIHNoYXJlZCBiZXR3ZWVuIGRlc2t0b3AgYW5kIHRvdWNoIHBhcnRzLCBhcyA8bmctY29udGVudD5cbiAgICBjYW4ndCBiZSB1c2VkIGluIHR3byBwbGFjZXMgaW4gdGhlIHNhbWUgdGVtcGxhdGVcbiAgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7O0FBaUJqRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsa0JBQWtCOztpSEFBL0Msb0JBQW9CO3FHQUFwQixvQkFBb0IsdUNBSnBCO1FBQ1QsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO0tBQ25FLDRFQ3BCSCx1eUVBMkVBLHdzR0Q5RGM7UUFDViw0QkFBNEIsQ0FBQyxvQkFBb0I7UUFDakQsMEJBQTBCLENBQUMsa0JBQWtCO1FBQzdDLDBCQUEwQixDQUFDLG9CQUFvQjtLQUNoRDsyRkFLVSxvQkFBb0I7a0JBZmhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDLGFBQWEsY0FDWDt3QkFDViw0QkFBNEIsQ0FBQyxvQkFBb0I7d0JBQ2pELDBCQUEwQixDQUFDLGtCQUFrQjt3QkFDN0MsMEJBQTBCLENBQUMsb0JBQW9CO3FCQUNoRCxhQUNVO3dCQUNULEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsc0JBQXNCLEVBQUU7cUJBQ25FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBncmFuaXRlTWVudURlc2t0b3BBbmltYXRpb25zIH0gZnJvbSAnLi9tZW51LWRlc2t0b3AtYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBncmFuaXRlTWVudVRvdWNoQW5pbWF0aW9ucyB9IGZyb20gJy4vbWVudS10b3VjaC1hbmltYXRpb25zJztcbmltcG9ydCB7IEdSQU5JVEVfTUVOVV9QQU5FTCB9IGZyb20gJy4vbWVudS1wYW5lbCc7XG5pbXBvcnQgeyBfTWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuL21lbnUtYmFzZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dyYW5pdGUtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydtZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ2dyYW5pdGVNZW51JyxcbiAgYW5pbWF0aW9uczogW1xuICAgIGdyYW5pdGVNZW51RGVza3RvcEFuaW1hdGlvbnMudHJhbnNmb3JtTWVudURlc2t0b3AsXG4gICAgZ3Jhbml0ZU1lbnVUb3VjaEFuaW1hdGlvbnMudHJhbnNmb3JtTWVudVRvdWNoLFxuICAgIGdyYW5pdGVNZW51VG91Y2hBbmltYXRpb25zLnRyYW5zZm9ybUNsb3NlQnV0dG9uLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEdSQU5JVEVfTUVOVV9QQU5FTCwgdXNlRXhpc3Rpbmc6IEdyYW5pdGVNZW51Q29tcG9uZW50IH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEdyYW5pdGVNZW51Q29tcG9uZW50IGV4dGVuZHMgX01lbnVCYXNlQ29tcG9uZW50IHt9XG4iLCI8IS0tXG4gIFVzaW5nIHNlcGFyYXRlIHRlbXBsYXRlIHBhcnQgZm9yIGRlc2t0b3AgYW5kIHRvdWNoIG91dHB1dCwgYmVjYXVzZSBvZlxuICBhbmltYXRpb24gdHJpZ2dlcnMgYW5kIHNsaWdodGx5IGRpZmZlcmVudCBjb250ZW50LlxuLS0+XG48bmctdGVtcGxhdGU+XG4gIDwhLS0gRGVza3RvcCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAnZGVza3RvcCdcIj5cbiAgICA8ZGl2XG4gICAgICAjbWVudVxuICAgICAgY2xhc3M9XCJncmFuaXRlLW1lbnVcIlxuICAgICAgW2NsYXNzLmlzLW1lbnUtZW1wdHldPVwiX2lzTWVudUVtcHR5JCB8IGFzeW5jXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW2lkXT1cInBhbmVsSWRcIlxuICAgICAgW0B0cmFuc2Zvcm1NZW51RGVza3RvcF09XCJfdHJhbnNmb3JtTWVudSB8IGFzeW5jXCJcbiAgICAgIChAdHJhbnNmb3JtTWVudURlc2t0b3Auc3RhcnQpPVwiX29uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KVwiXG4gICAgICAoQHRyYW5zZm9ybU1lbnVEZXNrdG9wLmRvbmUpPVwiX29uQW5pbWF0aW9uRG9uZSgkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJfaGFuZGxlQ2xpY2soKVwiXG4gICAgICAoa2V5ZG93bik9XCJfaGFuZGxlS2V5ZG93bigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3Jhbml0ZS1tZW51LWNvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBUb3VjaCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9jbGllbnRPdXRwdXQ/LmRldmljZSA9PT0gJ3RvdWNoJ1wiPlxuICAgIDxkaXZcbiAgICAgICNtZW51XG4gICAgICBjbGFzcz1cImdyYW5pdGUtbWVudSBncmFuaXRlLWRldmljZS1vdXRwdXQtdG91Y2hcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbaWRdPVwicGFuZWxJZFwiXG4gICAgICBbQHRyYW5zZm9ybU1lbnVUb3VjaF09XCJfdHJhbnNmb3JtTWVudSB8IGFzeW5jXCJcbiAgICAgIChAdHJhbnNmb3JtTWVudVRvdWNoLnN0YXJ0KT1cIl9vbkFuaW1hdGlvblN0YXJ0KCRldmVudClcIlxuICAgICAgKEB0cmFuc2Zvcm1NZW51VG91Y2guZG9uZSk9XCJfb25BbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cIl9oYW5kbGVDbGljaygpXCJcbiAgICAgIChrZXlkb3duKT1cIl9oYW5kbGVLZXlkb3duKCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJncmFuaXRlLW1lbnUtY29udGVudFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RpdGxlXCIgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzaG93QmFja0J1dHRvblwiXG4gICAgICAgICAgICBncmFuaXRlTWVudVRvdWNoVGl0bGVJdGVtXG4gICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZUJhY2tDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0aXRsZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWNvbnRhaW5lclwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENsb3NlIGJ1dHRvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VcIiBbQHRyYW5zZm9ybUNsb3NlQnV0dG9uXT1cIl90cmFuc2Zvcm1NZW51IHwgYXN5bmNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2xvc2VCdXR0b25cIlxuICAgICAgICBncmFuaXRlTWVudVRvdWNoQ2xvc2VJdGVtXG4gICAgICAgIChjbGljayk9XCJfaGFuZGxlQ2xvc2VDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAge3sgY2xvc2VMYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS1cbiAgICBDb250ZW50IHRlbXBsYXRlIHNoYXJlZCBiZXR3ZWVuIGRlc2t0b3AgYW5kIHRvdWNoIHBhcnRzLCBhcyA8bmctY29udGVudD5cbiAgICBjYW4ndCBiZSB1c2VkIGluIHR3byBwbGFjZXMgaW4gdGhlIHNhbWUgdGVtcGxhdGVcbiAgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -13,8 +13,8 @@ import { GraniteTitleDirective } from './title.directive';
13
13
  import * as i0 from "@angular/core";
14
14
  export class GraniteMenuModule {
15
15
  }
16
- GraniteMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17
- GraniteMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuModule, declarations: [GraniteMenuComponent,
16
+ GraniteMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17
+ GraniteMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuModule, declarations: [GraniteMenuComponent,
18
18
  GraniteMenuItemComponent,
19
19
  GraniteMenuTriggerForDirective,
20
20
  GraniteMenuTouchCloseComponent,
@@ -27,8 +27,8 @@ GraniteMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
27
27
  GraniteMenuTouchTitleItemComponent,
28
28
  GraniteDividerDirective,
29
29
  GraniteTitleDirective] });
30
- GraniteMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuModule, imports: [[CommonModule, OverlayModule, PortalModule, GraniteIconModule]] });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteMenuModule, decorators: [{
30
+ GraniteMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuModule, imports: [CommonModule, OverlayModule, PortalModule, GraniteIconModule] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteMenuModule, decorators: [{
32
32
  type: NgModule,
33
33
  args: [{
34
34
  declarations: [
@@ -52,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
52
52
  ],
53
53
  }]
54
54
  }] });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUF1QjFELE1BQU0sT0FBTyxpQkFBaUI7OytHQUFqQixpQkFBaUI7Z0hBQWpCLGlCQUFpQixpQkFuQjFCLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5QixrQ0FBa0M7UUFDbEMsdUJBQXVCO1FBQ3ZCLHFCQUFxQixhQUViLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixhQUVwRSxvQkFBb0I7UUFDcEIsd0JBQXdCO1FBQ3hCLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsa0NBQWtDO1FBQ2xDLHVCQUF1QjtRQUN2QixxQkFBcUI7Z0hBR1osaUJBQWlCLFlBWG5CLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUM7NEZBVzVELGlCQUFpQjtrQkFyQjdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4Qiw4QkFBOEI7d0JBQzlCLDhCQUE4Qjt3QkFDOUIsa0NBQWtDO3dCQUNsQyx1QkFBdUI7d0JBQ3ZCLHFCQUFxQjtxQkFDdEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3ZFLE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsOEJBQThCO3dCQUM5Qiw4QkFBOEI7d0JBQzlCLGtDQUFrQzt3QkFDbEMsdUJBQXVCO3dCQUN2QixxQkFBcUI7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHsgR3Jhbml0ZU1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmFuaXRlTWVudVRyaWdnZXJGb3JEaXJlY3RpdmUgfSBmcm9tICcuL21lbnUtdHJpZ2dlci1mb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyYW5pdGVNZW51VG91Y2hDbG9zZUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS10b3VjaC1jbG9zZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3Jhbml0ZU1lbnVUb3VjaFRpdGxlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS10b3VjaC10aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3Jhbml0ZURpdmlkZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RpdmlkZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyYW5pdGVJY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBHcmFuaXRlVGl0bGVEaXJlY3RpdmUgfSBmcm9tICcuL3RpdGxlLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEdyYW5pdGVNZW51Q29tcG9uZW50LFxuICAgIEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCxcbiAgICBHcmFuaXRlTWVudVRyaWdnZXJGb3JEaXJlY3RpdmUsXG4gICAgR3Jhbml0ZU1lbnVUb3VjaENsb3NlQ29tcG9uZW50LFxuICAgIEdyYW5pdGVNZW51VG91Y2hUaXRsZUl0ZW1Db21wb25lbnQsXG4gICAgR3Jhbml0ZURpdmlkZXJEaXJlY3RpdmUsXG4gICAgR3Jhbml0ZVRpdGxlRGlyZWN0aXZlLFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBPdmVybGF5TW9kdWxlLCBQb3J0YWxNb2R1bGUsIEdyYW5pdGVJY29uTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIEdyYW5pdGVNZW51Q29tcG9uZW50LFxuICAgIEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCxcbiAgICBHcmFuaXRlTWVudVRyaWdnZXJGb3JEaXJlY3RpdmUsXG4gICAgR3Jhbml0ZU1lbnVUb3VjaENsb3NlQ29tcG9uZW50LFxuICAgIEdyYW5pdGVNZW51VG91Y2hUaXRsZUl0ZW1Db21wb25lbnQsXG4gICAgR3Jhbml0ZURpdmlkZXJEaXJlY3RpdmUsXG4gICAgR3Jhbml0ZVRpdGxlRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHcmFuaXRlTWVudU1vZHVsZSB7fVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUF1QjFELE1BQU0sT0FBTyxpQkFBaUI7OzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixpQkFuQjFCLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5QixrQ0FBa0M7UUFDbEMsdUJBQXVCO1FBQ3ZCLHFCQUFxQixhQUViLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixhQUVwRSxvQkFBb0I7UUFDcEIsd0JBQXdCO1FBQ3hCLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsa0NBQWtDO1FBQ2xDLHVCQUF1QjtRQUN2QixxQkFBcUI7K0dBR1osaUJBQWlCLFlBWGxCLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGlCQUFpQjsyRkFXM0QsaUJBQWlCO2tCQXJCN0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osb0JBQW9CO3dCQUNwQix3QkFBd0I7d0JBQ3hCLDhCQUE4Qjt3QkFDOUIsOEJBQThCO3dCQUM5QixrQ0FBa0M7d0JBQ2xDLHVCQUF1Qjt3QkFDdkIscUJBQXFCO3FCQUN0QjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQztvQkFDdkUsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4Qiw4QkFBOEI7d0JBQzlCLDhCQUE4Qjt3QkFDOUIsa0NBQWtDO3dCQUNsQyx1QkFBdUI7d0JBQ3ZCLHFCQUFxQjtxQkFDdEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuXG5pbXBvcnQgeyBHcmFuaXRlTWVudUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IEdyYW5pdGVNZW51VHJpZ2dlckZvckRpcmVjdGl2ZSB9IGZyb20gJy4vbWVudS10cmlnZ2VyLWZvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3Jhbml0ZU1lbnVUb3VjaENsb3NlQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LXRvdWNoLWNsb3NlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmFuaXRlTWVudVRvdWNoVGl0bGVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LXRvdWNoLXRpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmFuaXRlRGl2aWRlckRpcmVjdGl2ZSB9IGZyb20gJy4vZGl2aWRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3Jhbml0ZUljb25Nb2R1bGUgfSBmcm9tICcuLi9pY29uL2ljb24ubW9kdWxlJztcbmltcG9ydCB7IEdyYW5pdGVUaXRsZURpcmVjdGl2ZSB9IGZyb20gJy4vdGl0bGUuZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgR3Jhbml0ZU1lbnVDb21wb25lbnQsXG4gICAgR3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50LFxuICAgIEdyYW5pdGVNZW51VHJpZ2dlckZvckRpcmVjdGl2ZSxcbiAgICBHcmFuaXRlTWVudVRvdWNoQ2xvc2VDb21wb25lbnQsXG4gICAgR3Jhbml0ZU1lbnVUb3VjaFRpdGxlSXRlbUNvbXBvbmVudCxcbiAgICBHcmFuaXRlRGl2aWRlckRpcmVjdGl2ZSxcbiAgICBHcmFuaXRlVGl0bGVEaXJlY3RpdmUsXG4gIF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE92ZXJsYXlNb2R1bGUsIFBvcnRhbE1vZHVsZSwgR3Jhbml0ZUljb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbXG4gICAgR3Jhbml0ZU1lbnVDb21wb25lbnQsXG4gICAgR3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50LFxuICAgIEdyYW5pdGVNZW51VHJpZ2dlckZvckRpcmVjdGl2ZSxcbiAgICBHcmFuaXRlTWVudVRvdWNoQ2xvc2VDb21wb25lbnQsXG4gICAgR3Jhbml0ZU1lbnVUb3VjaFRpdGxlSXRlbUNvbXBvbmVudCxcbiAgICBHcmFuaXRlRGl2aWRlckRpcmVjdGl2ZSxcbiAgICBHcmFuaXRlVGl0bGVEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEdyYW5pdGVNZW51TW9kdWxlIHt9XG4iXX0=
@@ -2,9 +2,9 @@ import { Directive } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class GraniteTitleDirective {
4
4
  }
5
- GraniteTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
- GraniteTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: GraniteTitleDirective, selector: "[graniteTitle]", host: { properties: { "class.granite-title": "true" } }, exportAs: ["graniteTitle"], ngImport: i0 });
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteTitleDirective, decorators: [{
5
+ GraniteTitleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteTitleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
+ GraniteTitleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: GraniteTitleDirective, selector: "[graniteTitle]", host: { properties: { "class.granite-title": "true" } }, exportAs: ["graniteTitle"], ngImport: i0 });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: GraniteTitleDirective, decorators: [{
8
8
  type: Directive,
9
9
  args: [{
10
10
  selector: '[graniteTitle]',
@@ -14,4 +14,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
14
14
  },
15
15
  }]
16
16
  }] });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ncmFuaXRlLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L3RpdGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVMxQyxNQUFNLE9BQU8scUJBQXFCOzttSEFBckIscUJBQXFCO3VHQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFQakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsSUFBSSxFQUFFO3dCQUNKLHVCQUF1QixFQUFFLE1BQU07cUJBQ2hDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tncmFuaXRlVGl0bGVdJyxcbiAgZXhwb3J0QXM6ICdncmFuaXRlVGl0bGUnLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5ncmFuaXRlLXRpdGxlXSc6ICd0cnVlJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR3Jhbml0ZVRpdGxlRGlyZWN0aXZlIHt9XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ncmFuaXRlLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L3RpdGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVMxQyxNQUFNLE9BQU8scUJBQXFCOztrSEFBckIscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFQakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsSUFBSSxFQUFFO3dCQUNKLHVCQUF1QixFQUFFLE1BQU07cUJBQ2hDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tncmFuaXRlVGl0bGVdJyxcbiAgZXhwb3J0QXM6ICdncmFuaXRlVGl0bGUnLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5ncmFuaXRlLXRpdGxlXSc6ICd0cnVlJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR3Jhbml0ZVRpdGxlRGlyZWN0aXZlIHt9XG4iXX0=