@wavemaker/app-ng-runtime 11.14.2-rc.6311 → 11.15.0-1.246

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 (177) hide show
  1. package/build-task/bundles/index.umd.js +13 -2
  2. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
  3. package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
  4. package/build-task/fesm2022/index.mjs +13 -2
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/base/bundles/index.umd.js +271 -128
  7. package/components/base/esm2022/public_api.mjs +2 -2
  8. package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
  9. package/components/base/esm2022/utils/live-utils.mjs +10 -7
  10. package/components/base/esm2022/utils/widget-utils.mjs +8 -1
  11. package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
  12. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
  13. package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
  14. package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
  15. package/components/base/fesm2022/index.mjs +273 -129
  16. package/components/base/fesm2022/index.mjs.map +1 -1
  17. package/components/base/public_api.d.ts +1 -1
  18. package/components/base/utils/autolayout-utils.d.ts +29 -0
  19. package/components/base/utils/widget-utils.d.ts +1 -0
  20. package/components/base/widgets/common/container/container.directive.d.ts +7 -9
  21. package/components/basic/label/bundles/index.umd.js +4 -0
  22. package/components/basic/label/esm2022/label.directive.mjs +5 -1
  23. package/components/basic/label/fesm2022/index.mjs +4 -0
  24. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  25. package/components/basic/search/bundles/index.umd.js +13 -11
  26. package/components/basic/search/esm2022/search.component.mjs +14 -12
  27. package/components/basic/search/fesm2022/index.mjs +13 -11
  28. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  29. package/components/chart/bundles/index.umd.js +2 -2
  30. package/components/chart/esm2022/chart.utils.mjs +3 -3
  31. package/components/chart/fesm2022/index.mjs +2 -2
  32. package/components/chart/fesm2022/index.mjs.map +1 -1
  33. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
  34. package/components/containers/accordion/accordion.directive.d.ts +4 -0
  35. package/components/containers/accordion/bundles/index.umd.js +34 -0
  36. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
  37. package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
  38. package/components/containers/accordion/fesm2022/index.mjs +36 -2
  39. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  40. package/components/containers/tabs/bundles/index.umd.js +34 -0
  41. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
  42. package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
  43. package/components/containers/tabs/fesm2022/index.mjs +36 -2
  44. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  45. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
  46. package/components/containers/tabs/tabs.component.d.ts +5 -1
  47. package/components/containers/wizard/bundles/index.umd.js +46 -2
  48. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
  49. package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
  50. package/components/containers/wizard/fesm2022/index.mjs +48 -4
  51. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  52. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
  53. package/components/containers/wizard/wizard.component.d.ts +1 -0
  54. package/components/data/form/bundles/index.umd.js +28 -1
  55. package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
  56. package/components/data/form/esm2022/form.component.mjs +24 -2
  57. package/components/data/form/esm2022/form.props.mjs +3 -2
  58. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
  59. package/components/data/form/fesm2022/index.mjs +29 -2
  60. package/components/data/form/fesm2022/index.mjs.map +1 -1
  61. package/components/data/form/form.component.d.ts +3 -0
  62. package/components/data/list/bundles/index.umd.js +0 -9
  63. package/components/data/list/esm2022/list-item.directive.mjs +1 -10
  64. package/components/data/list/fesm2022/index.mjs +0 -9
  65. package/components/data/list/fesm2022/index.mjs.map +1 -1
  66. package/components/data/pagination/bundles/index.umd.js +6 -2
  67. package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
  68. package/components/data/pagination/fesm2022/index.mjs +6 -2
  69. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  70. package/components/data/table/bundles/index.umd.js +21 -4
  71. package/components/data/table/esm2022/table.component.mjs +22 -5
  72. package/components/data/table/fesm2022/index.mjs +21 -4
  73. package/components/data/table/fesm2022/index.mjs.map +1 -1
  74. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
  75. package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
  76. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
  77. package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
  78. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  79. package/components/input/checkbox/bundles/index.umd.js +12 -3
  80. package/components/input/checkbox/checkbox.component.d.ts +2 -0
  81. package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
  82. package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
  83. package/components/input/checkbox/fesm2022/index.mjs +12 -3
  84. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  85. package/components/input/checkboxset/bundles/index.umd.js +12 -1
  86. package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
  87. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
  88. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
  89. package/components/input/checkboxset/fesm2022/index.mjs +12 -1
  90. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  91. package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
  92. package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
  93. package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
  94. package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
  95. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
  96. package/components/input/epoch/date/bundles/index.umd.js +4 -3
  97. package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
  98. package/components/input/epoch/date/fesm2022/index.mjs +4 -3
  99. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  100. package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
  101. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
  102. package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
  103. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
  104. package/components/input/file-upload/bundles/index.umd.js +1 -1
  105. package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
  106. package/components/input/file-upload/fesm2022/index.mjs +1 -1
  107. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  108. package/components/input/radioset/bundles/index.umd.js +13 -1
  109. package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
  110. package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
  111. package/components/input/radioset/fesm2022/index.mjs +13 -1
  112. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  113. package/components/input/radioset/radioset.component.d.ts +1 -0
  114. package/components/input/slider/bundles/index.umd.js +86 -16
  115. package/components/input/slider/esm2022/slider.component.mjs +76 -9
  116. package/components/input/slider/esm2022/slider.props.mjs +5 -1
  117. package/components/input/slider/fesm2022/index.mjs +79 -8
  118. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  119. package/components/input/slider/slider.component.d.ts +12 -3
  120. package/components/input/text/bundles/index.umd.js +24 -3
  121. package/components/input/text/esm2022/input-text/input-text.component.mjs +6 -3
  122. package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
  123. package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
  124. package/components/input/text/fesm2022/index.mjs +24 -3
  125. package/components/input/text/fesm2022/index.mjs.map +1 -1
  126. package/components/input/text/input-text/input-text.component.d.ts +4 -0
  127. package/components/input/text/number-locale/number-locale.d.ts +12 -0
  128. package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
  129. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
  130. package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
  131. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  132. package/components/navigation/popover/bundles/index.umd.js +12 -0
  133. package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
  134. package/components/navigation/popover/fesm2022/index.mjs +12 -0
  135. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  136. package/components/navigation/popover/popover.component.d.ts +2 -0
  137. package/components/page/default/bundles/index.umd.js +0 -4
  138. package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
  139. package/components/page/default/fesm2022/index.mjs +0 -4
  140. package/components/page/default/fesm2022/index.mjs.map +1 -1
  141. package/components/page/header/bundles/index.umd.js +4 -3
  142. package/components/page/header/esm2022/header.component.mjs +5 -4
  143. package/components/page/header/fesm2022/index.mjs +4 -3
  144. package/components/page/header/fesm2022/index.mjs.map +1 -1
  145. package/components/page/header/header.component.d.ts +2 -1
  146. package/core/bundles/index.umd.js +90 -6
  147. package/core/enums/enums.d.ts +1 -0
  148. package/core/esm2022/enums/enums.mjs +2 -1
  149. package/core/esm2022/utils/build-utils.mjs +5 -1
  150. package/core/esm2022/utils/utils.mjs +5 -2
  151. package/core/esm2022/utils/watcher.mjs +83 -4
  152. package/core/fesm2022/index.mjs +91 -4
  153. package/core/fesm2022/index.mjs.map +1 -1
  154. package/core/utils/watcher.d.ts +2 -0
  155. package/npm-shrinkwrap.json +2 -2
  156. package/oAuth/esm2022/oAuth.service.mjs +1 -1
  157. package/oAuth/fesm2022/index.mjs.map +1 -1
  158. package/oAuth/oAuth.service.d.ts +1 -1
  159. package/package-lock.json +2 -2
  160. package/package.json +1 -1
  161. package/runtime/base/bundles/index.umd.js +33 -31
  162. package/runtime/base/components/base-prefab.component.d.ts +6 -4
  163. package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
  164. package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
  165. package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
  166. package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
  167. package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
  168. package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
  169. package/runtime/base/fesm2022/index.mjs +34 -31
  170. package/runtime/base/fesm2022/index.mjs.map +1 -1
  171. package/runtime/base/runtime-base.module.d.ts +2 -1
  172. package/runtime/dynamic/app/app.config.d.ts +1 -1
  173. package/runtime/dynamic/bundles/index.umd.js +1 -1
  174. package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
  175. package/runtime/dynamic/fesm2022/index.mjs +2 -2
  176. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  177. package/scripts/datatable/datatable.js +17 -15
@@ -0,0 +1,252 @@
1
+ export class AutoLayoutUtils {
2
+ constructor() {
3
+ this.direction = 'row';
4
+ this.hasWrap = false;
5
+ this.alignment = 'top-left';
6
+ // Alignment matrix
7
+ this.alignmentMatrix = {
8
+ 'top-left': { justifyContent: 'flex-start', alignItems: 'flex-start' },
9
+ 'top-center': { justifyContent: 'center', alignItems: 'flex-start' },
10
+ 'top-right': { justifyContent: 'flex-end', alignItems: 'flex-start' },
11
+ 'middle-left': { justifyContent: 'flex-start', alignItems: 'center' },
12
+ 'middle-center': { justifyContent: 'center', alignItems: 'center' },
13
+ 'middle-right': { justifyContent: 'flex-end', alignItems: 'center' },
14
+ 'bottom-left': { justifyContent: 'flex-start', alignItems: 'flex-end' },
15
+ 'bottom-center': { justifyContent: 'center', alignItems: 'flex-end' },
16
+ 'bottom-right': { justifyContent: 'flex-end', alignItems: 'flex-end' },
17
+ 'start': { justifyContent: 'space-between', alignItems: 'flex-start' },
18
+ 'center': { justifyContent: 'space-between', alignItems: 'center' },
19
+ 'end': { justifyContent: 'space-between', alignItems: 'flex-end' }
20
+ };
21
+ }
22
+ /** Apply direction (row/column) */
23
+ applyDirection(direction) {
24
+ this.direction = direction;
25
+ if (direction === 'column')
26
+ this.hasWrap = false;
27
+ this.$element.css({ display: 'flex', flexDirection: direction });
28
+ this.applyAlignment(this.alignment);
29
+ }
30
+ /** Apply wrapping */
31
+ applyWrap(wrap) {
32
+ this.hasWrap = wrap;
33
+ this.$element.css('flex-wrap', wrap ? 'wrap' : 'nowrap');
34
+ }
35
+ /** Apply alignment based on direction */
36
+ applyAlignment(alignmentKey) {
37
+ if (!alignmentKey)
38
+ return;
39
+ const base = this.alignmentMatrix[alignmentKey];
40
+ if (!base)
41
+ return;
42
+ const isRow = this.direction === 'row';
43
+ let justifyContent = isRow ? base.justifyContent : base.alignItems;
44
+ let alignItems = isRow ? base.alignItems : base.justifyContent;
45
+ this.$element.css({
46
+ display: 'flex',
47
+ 'flex-wrap': this.hasWrap ? 'wrap' : 'nowrap',
48
+ justifyContent,
49
+ alignItems
50
+ });
51
+ }
52
+ /** Apply spacing for gap + column gap */
53
+ applySpacing(key, nv) {
54
+ const base = this.alignmentMatrix[this.alignment];
55
+ if (!base)
56
+ return;
57
+ const gapValue = key === 'gap' ? nv : this.gap;
58
+ const colValue = key === 'columngap' ? nv : this.columngap;
59
+ const isRow = this.direction === 'row';
60
+ const gapVal = (gapValue && gapValue !== 'auto') ? gapValue : null;
61
+ const colVal = (colValue && colValue !== 'auto') ? colValue : null;
62
+ const rowVal = this.hasWrap && gapVal ? gapVal : null;
63
+ let justifyContent = isRow ? base.justifyContent : base.alignItems;
64
+ let alignItems = isRow ? base.alignItems : base.justifyContent;
65
+ // ————— NO WRAP —————
66
+ if (!this.hasWrap) {
67
+ if (gapValue === 'auto') {
68
+ this.$element.css({
69
+ 'justify-content': base.justifyContent,
70
+ 'align-items': base.alignItems
71
+ });
72
+ }
73
+ else {
74
+ this.$element.css({
75
+ 'justify-content': justifyContent,
76
+ 'align-items': alignItems,
77
+ gap: `${gapVal}px`
78
+ });
79
+ }
80
+ }
81
+ // ————— WRAP LOGIC —————
82
+ else {
83
+ if (gapValue === 'auto' && colValue === 'auto') {
84
+ this.$element.css({
85
+ 'justify-content': justifyContent,
86
+ 'align-content': justifyContent
87
+ });
88
+ }
89
+ else if (gapValue !== 'auto' && colValue === 'auto') {
90
+ this.$element.css({
91
+ 'justify-content': justifyContent,
92
+ 'align-content': alignItems,
93
+ 'row-gap': `${rowVal}px`
94
+ });
95
+ }
96
+ else if (gapValue === 'auto' && colValue !== 'auto') {
97
+ this.$element.css({
98
+ 'align-content': 'space-between',
99
+ 'column-gap': `${colVal}px`
100
+ });
101
+ }
102
+ else {
103
+ if (colVal && rowVal) {
104
+ if (colVal === rowVal) {
105
+ this.$element.css({
106
+ 'gap': `${colVal}px`,
107
+ 'align-content': alignItems,
108
+ 'justify-content': justifyContent
109
+ });
110
+ }
111
+ else {
112
+ this.$element.css({
113
+ 'gap': `${rowVal}px ${colVal}px`,
114
+ 'align-content': alignItems,
115
+ 'justify-content': justifyContent
116
+ });
117
+ }
118
+ }
119
+ }
120
+ }
121
+ this.gap = gapValue?.toString();
122
+ this.columngap = colValue?.toString();
123
+ }
124
+ onPropertyChange(key, nv, ov) {
125
+ switch (key) {
126
+ case 'direction':
127
+ this.applyDirection(nv);
128
+ break;
129
+ case 'wrap':
130
+ this.applyWrap(nv);
131
+ break;
132
+ case 'alignment':
133
+ this.alignment = nv;
134
+ this.applyAlignment(nv);
135
+ break;
136
+ case 'gap':
137
+ case 'columngap':
138
+ setTimeout(() => {
139
+ this.applySpacing(key, nv);
140
+ });
141
+ break;
142
+ case 'position':
143
+ this.position = nv;
144
+ this.handlePosition();
145
+ break;
146
+ case 'clipcontent':
147
+ this.clipContent = nv;
148
+ this.handleClipBehaviour();
149
+ break;
150
+ }
151
+ }
152
+ applyStyleChange(key, nv) {
153
+ if (key === 'width' || key === 'height') {
154
+ this.applySize(key, nv);
155
+ }
156
+ else if (key === 'padding') {
157
+ this.$element.css('padding', nv);
158
+ }
159
+ else if (key === 'overflow') {
160
+ this.overflowtype = nv;
161
+ this.handleClipBehaviour();
162
+ }
163
+ else if (key === 'zindex') {
164
+ this.zIndex = nv;
165
+ this.handlePosition();
166
+ }
167
+ }
168
+ applySize(key, nv) {
169
+ if (nv === 'fill') {
170
+ if (key === 'width') {
171
+ this.$element.css('width', '100%');
172
+ }
173
+ if (key === 'height') {
174
+ if (this.parentElement?.hasAttribute('wmcontainer') || this.parentElement.hasAttribute('wmautolayout')) {
175
+ this.$element.css({
176
+ 'align-self': 'stretch',
177
+ 'flex-grow': '1'
178
+ });
179
+ }
180
+ else {
181
+ this.$element.css('height', '100%');
182
+ }
183
+ }
184
+ }
185
+ else if (nv === 'hug') {
186
+ if (key === 'width') {
187
+ this.$element.css('width', 'fit-content');
188
+ }
189
+ if (key === 'height') {
190
+ this.$element.css('height', 'fit-content');
191
+ }
192
+ }
193
+ else {
194
+ this.$element.css('flex-shrink', '0'); // Don't shrink when size is fixed
195
+ }
196
+ }
197
+ // Determine whether the container should clip its content and configure scrolling behaviour accordingly.
198
+ handleClipBehaviour() {
199
+ const overflow = this.overflowtype?.toLowerCase();
200
+ switch (overflow) {
201
+ case 'vertical':
202
+ this.$element.css({
203
+ 'overflow-x': 'hidden',
204
+ 'overflow-y': 'scroll'
205
+ });
206
+ break;
207
+ case 'horizontal':
208
+ this.$element.css({
209
+ 'overflow-x': 'scroll',
210
+ 'overflow-y': 'hidden'
211
+ });
212
+ break;
213
+ case 'both directions':
214
+ this.$element.css({
215
+ 'overflow': 'scroll'
216
+ });
217
+ break;
218
+ case 'no scrolling':
219
+ if (this.clipContent) {
220
+ this.$element.css({ 'overflow': 'hidden' });
221
+ }
222
+ else {
223
+ this.$element.css({ 'overflow': '' });
224
+ }
225
+ break;
226
+ default:
227
+ break;
228
+ }
229
+ }
230
+ // Toggle and apply positional behaviour and expose the z-index control when position is not relative.
231
+ handlePosition() {
232
+ if (this.position === 'sticky') {
233
+ // Apply sticky styles
234
+ this.$element.css({
235
+ 'position': 'sticky',
236
+ 'top': '0', // Sticks to top when scrolling vertically
237
+ 'left': '0', // Sticks to left when scrolling horizontally
238
+ 'z-index': this.zIndex
239
+ });
240
+ }
241
+ else {
242
+ // Reset to default (static/relative behavior)
243
+ this.$element.css({
244
+ 'position': '',
245
+ 'top': '',
246
+ 'left': '',
247
+ 'z-index': ''
248
+ });
249
+ }
250
+ }
251
+ }
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2xheW91dC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvdXRpbHMvYXV0b2xheW91dC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZUFBZTtJQW9DeEI7UUFsQ0EsY0FBUyxHQUFxQixLQUFLLENBQUM7UUFDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixjQUFTLEdBQVcsVUFBVSxDQUFDO1FBYS9CLG1CQUFtQjtRQUNGLG9CQUFlLEdBQUc7WUFDL0IsVUFBVSxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO1lBQ3RFLFlBQVksRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRTtZQUNwRSxXQUFXLEVBQUUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUU7WUFFckUsYUFBYSxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFO1lBQ3JFLGVBQWUsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTtZQUNuRSxjQUFjLEVBQUUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUU7WUFFcEUsYUFBYSxFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO1lBQ3ZFLGVBQWUsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRTtZQUNyRSxjQUFjLEVBQUUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7WUFFdEUsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO1lBQ3RFLFFBQVEsRUFBRSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTtZQUNuRSxLQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7U0FDckUsQ0FBQztJQUVjLENBQUM7SUFFakIsbUNBQW1DO0lBQ25DLGNBQWMsQ0FBQyxTQUEyQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLFNBQVMsS0FBSyxRQUFRO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsU0FBUyxDQUFDLElBQWE7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLGNBQWMsQ0FBQyxZQUFvQjtRQUMvQixJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsTUFBTSxJQUFJLEdBQUksSUFBSSxDQUFDLGVBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDO1FBRXZDLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuRSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDZCxPQUFPLEVBQUUsTUFBTTtZQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVE7WUFDN0MsY0FBYztZQUNkLFVBQVU7U0FDYixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLFlBQVksQ0FBQyxHQUFXLEVBQUUsRUFBVTtRQUNoQyxNQUFNLElBQUksR0FBSSxJQUFJLENBQUMsZUFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7UUFFdkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUV0RCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkUsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRS9ELHNCQUFzQjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDZCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYztvQkFDdEMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVO2lCQUNqQyxDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQ2QsaUJBQWlCLEVBQUUsY0FBYztvQkFDakMsYUFBYSxFQUFFLFVBQVU7b0JBQ3pCLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSTtpQkFDckIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7UUFFRCx5QkFBeUI7YUFDcEIsQ0FBQztZQUNGLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUNkLGlCQUFpQixFQUFFLGNBQWM7b0JBQ2pDLGVBQWUsRUFBRSxjQUFjO2lCQUNsQyxDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUNJLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUNkLGlCQUFpQixFQUFFLGNBQWM7b0JBQ2pDLGVBQWUsRUFBRSxVQUFVO29CQUMzQixTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUk7aUJBQzNCLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQ0ksSUFBSSxRQUFRLEtBQUssTUFBTSxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQ2QsZUFBZSxFQUFFLGVBQWU7b0JBQ2hDLFlBQVksRUFBRSxHQUFHLE1BQU0sSUFBSTtpQkFDOUIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztpQkFDSSxDQUFDO2dCQUNGLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNuQixJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQzt3QkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7NEJBQ2QsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJOzRCQUNwQixlQUFlLEVBQUUsVUFBVTs0QkFDM0IsaUJBQWlCLEVBQUUsY0FBYzt5QkFDcEMsQ0FBQyxDQUFDO29CQUNQLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsR0FBRyxNQUFNLE1BQU0sTUFBTSxJQUFJOzRCQUNoQyxlQUFlLEVBQUUsVUFBVTs0QkFDM0IsaUJBQWlCLEVBQUUsY0FBYzt5QkFDcEMsQ0FBQyxDQUFDO29CQUNQLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVcsRUFBRSxFQUFPLEVBQUUsRUFBUTtRQUMzQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ1YsS0FBSyxXQUFXO2dCQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hCLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkIsTUFBTTtZQUNWLEtBQUssV0FBVztnQkFDWixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEIsTUFBTTtZQUNWLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxXQUFXO2dCQUNaLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDVixLQUFLLFVBQVU7Z0JBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTtZQUNWLEtBQUssYUFBYTtnQkFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVcsRUFBRSxFQUFPO1FBRWpDLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQzthQUVJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBRUksSUFBRyxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQzthQUVJLElBQUcsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxHQUFXLEVBQUUsRUFBTztRQUVsQyxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUVoQixJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO29CQUNyRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQzt3QkFDZCxZQUFZLEVBQUUsU0FBUzt3QkFDdkIsV0FBVyxFQUFFLEdBQUc7cUJBQ25CLENBQUMsQ0FBQztnQkFDUCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7YUFFSSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUVwQixJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFFRCxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztRQUM3RSxDQUFDO0lBQ0wsQ0FBQztJQUVELHlHQUF5RztJQUNqRyxtQkFBbUI7UUFFdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNsRCxRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2YsS0FBSyxVQUFVO2dCQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUNkLFlBQVksRUFBRSxRQUFRO29CQUN0QixZQUFZLEVBQUUsUUFBUTtpQkFDekIsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFFVixLQUFLLFlBQVk7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQ2QsWUFBWSxFQUFFLFFBQVE7b0JBQ3RCLFlBQVksRUFBRSxRQUFRO2lCQUN6QixDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUVWLEtBQUssaUJBQWlCO2dCQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDZCxVQUFVLEVBQUUsUUFBUTtpQkFDdkIsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFFVixLQUFLLGNBQWM7Z0JBQ2YsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUNELE1BQU07WUFFVjtnQkFDSSxNQUFNO1FBQ2QsQ0FBQztJQUVMLENBQUM7SUFFRCxzR0FBc0c7SUFDOUYsY0FBYztRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0Isc0JBQXNCO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUNkLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixLQUFLLEVBQUUsR0FBRyxFQUFLLDBDQUEwQztnQkFDekQsTUFBTSxFQUFFLEdBQUcsRUFBSSw2Q0FBNkM7Z0JBQzVELFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTTthQUN6QixDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDZCxVQUFVLEVBQUUsRUFBRTtnQkFDZCxLQUFLLEVBQUUsRUFBRTtnQkFDVCxNQUFNLEVBQUUsRUFBRTtnQkFDVixTQUFTLEVBQUUsRUFBRTthQUNoQixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztDQUdKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEF1dG9MYXlvdXRVdGlscyB7XG5cbiAgICBkaXJlY3Rpb246ICdyb3cnIHwgJ2NvbHVtbicgPSAncm93JztcbiAgICBoYXNXcmFwID0gZmFsc2U7XG4gICAgYWxpZ25tZW50OiBzdHJpbmcgPSAndG9wLWxlZnQnO1xuICAgIGdhcDogc3RyaW5nO1xuICAgIGNvbHVtbmdhcDogc3RyaW5nO1xuICAgIGNsaXBDb250ZW50OiBzdHJpbmc7XG4gICAgcG9zaXRpb246IHN0cmluZztcbiAgICBvdmVyZmxvd3R5cGU6IHN0cmluZztcbiAgICB6SW5kZXg6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBuYXRpdmVFbGVtZW50ITogSFRNTEVsZW1lbnQ7XG4gICAgcHJvdGVjdGVkICRlbGVtZW50ITogYW55O1xuICAgIHByb3RlY3RlZCBwYXJlbnRFbGVtZW50ITogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG5cbiAgICAvLyBBbGlnbm1lbnQgbWF0cml4XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGlnbm1lbnRNYXRyaXggPSB7XG4gICAgICAgICd0b3AtbGVmdCc6IHsganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH0sXG4gICAgICAgICd0b3AtY2VudGVyJzogeyBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyB9LFxuICAgICAgICAndG9wLXJpZ2h0JzogeyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH0sXG5cbiAgICAgICAgJ21pZGRsZS1sZWZ0JzogeyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9LFxuICAgICAgICAnbWlkZGxlLWNlbnRlcic6IHsganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9LFxuICAgICAgICAnbWlkZGxlLXJpZ2h0JzogeyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfSxcblxuICAgICAgICAnYm90dG9tLWxlZnQnOiB7IGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcgfSxcbiAgICAgICAgJ2JvdHRvbS1jZW50ZXInOiB7IGp1c3RpZnlDb250ZW50OiAnY2VudGVyJywgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyB9LFxuICAgICAgICAnYm90dG9tLXJpZ2h0JzogeyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJywgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyB9LFxuXG4gICAgICAgICdzdGFydCc6IHsganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH0sXG4gICAgICAgICdjZW50ZXInOiB7IGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0sXG4gICAgICAgICdlbmQnOiB7IGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcgfVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqIEFwcGx5IGRpcmVjdGlvbiAocm93L2NvbHVtbikgKi9cbiAgICBhcHBseURpcmVjdGlvbihkaXJlY3Rpb246ICdyb3cnIHwgJ2NvbHVtbicpIHtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdjb2x1bW4nKSB0aGlzLmhhc1dyYXAgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLiRlbGVtZW50LmNzcyh7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogZGlyZWN0aW9uIH0pO1xuICAgICAgICB0aGlzLmFwcGx5QWxpZ25tZW50KHRoaXMuYWxpZ25tZW50KTtcbiAgICB9XG5cbiAgICAvKiogQXBwbHkgd3JhcHBpbmcgKi9cbiAgICBhcHBseVdyYXAod3JhcDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmhhc1dyYXAgPSB3cmFwO1xuICAgICAgICB0aGlzLiRlbGVtZW50LmNzcygnZmxleC13cmFwJywgd3JhcCA/ICd3cmFwJyA6ICdub3dyYXAnKTtcbiAgICB9XG5cbiAgICAvKiogQXBwbHkgYWxpZ25tZW50IGJhc2VkIG9uIGRpcmVjdGlvbiAqL1xuICAgIGFwcGx5QWxpZ25tZW50KGFsaWdubWVudEtleTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghYWxpZ25tZW50S2V5KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgYmFzZSA9ICh0aGlzLmFsaWdubWVudE1hdHJpeCBhcyBhbnkpW2FsaWdubWVudEtleV07XG4gICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGlzUm93ID0gdGhpcy5kaXJlY3Rpb24gPT09ICdyb3cnO1xuXG4gICAgICAgIGxldCBqdXN0aWZ5Q29udGVudCA9IGlzUm93ID8gYmFzZS5qdXN0aWZ5Q29udGVudCA6IGJhc2UuYWxpZ25JdGVtcztcbiAgICAgICAgbGV0IGFsaWduSXRlbXMgPSBpc1JvdyA/IGJhc2UuYWxpZ25JdGVtcyA6IGJhc2UuanVzdGlmeUNvbnRlbnQ7XG5cbiAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgJ2ZsZXgtd3JhcCc6IHRoaXMuaGFzV3JhcCA/ICd3cmFwJyA6ICdub3dyYXAnLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBBcHBseSBzcGFjaW5nIGZvciBnYXAgKyBjb2x1bW4gZ2FwICovXG4gICAgYXBwbHlTcGFjaW5nKGtleTogc3RyaW5nLCBudjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSAodGhpcy5hbGlnbm1lbnRNYXRyaXggYXMgYW55KVt0aGlzLmFsaWdubWVudF07XG4gICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGdhcFZhbHVlID0ga2V5ID09PSAnZ2FwJyA/IG52IDogdGhpcy5nYXA7XG4gICAgICAgIGNvbnN0IGNvbFZhbHVlID0ga2V5ID09PSAnY29sdW1uZ2FwJyA/IG52IDogdGhpcy5jb2x1bW5nYXA7XG5cbiAgICAgICAgY29uc3QgaXNSb3cgPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ3Jvdyc7XG5cbiAgICAgICAgY29uc3QgZ2FwVmFsID0gKGdhcFZhbHVlICYmIGdhcFZhbHVlICE9PSAnYXV0bycpID8gZ2FwVmFsdWUgOiBudWxsO1xuICAgICAgICBjb25zdCBjb2xWYWwgPSAoY29sVmFsdWUgJiYgY29sVmFsdWUgIT09ICdhdXRvJykgPyBjb2xWYWx1ZSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHJvd1ZhbCA9IHRoaXMuaGFzV3JhcCAmJiBnYXBWYWwgPyBnYXBWYWwgOiBudWxsO1xuXG4gICAgICAgIGxldCBqdXN0aWZ5Q29udGVudCA9IGlzUm93ID8gYmFzZS5qdXN0aWZ5Q29udGVudCA6IGJhc2UuYWxpZ25JdGVtcztcbiAgICAgICAgbGV0IGFsaWduSXRlbXMgPSBpc1JvdyA/IGJhc2UuYWxpZ25JdGVtcyA6IGJhc2UuanVzdGlmeUNvbnRlbnQ7XG5cbiAgICAgICAgLy8g4oCU4oCU4oCU4oCU4oCUIE5PIFdSQVAg4oCU4oCU4oCU4oCU4oCUXG4gICAgICAgIGlmICghdGhpcy5oYXNXcmFwKSB7XG4gICAgICAgICAgICBpZiAoZ2FwVmFsdWUgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IGJhc2UuanVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1pdGVtcyc6IGJhc2UuYWxpZ25JdGVtc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiBqdXN0aWZ5Q29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgJ2FsaWduLWl0ZW1zJzogYWxpZ25JdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgZ2FwOiBgJHtnYXBWYWx9cHhgXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDigJTigJTigJTigJTigJQgV1JBUCBMT0dJQyDigJTigJTigJTigJTigJRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZ2FwVmFsdWUgPT09ICdhdXRvJyAmJiBjb2xWYWx1ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1jb250ZW50JzoganVzdGlmeUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1jb250ZW50JzoganVzdGlmeUNvbnRlbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdhcFZhbHVlICE9PSAnYXV0bycgJiYgY29sVmFsdWUgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IGp1c3RpZnlDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAnYWxpZ24tY29udGVudCc6IGFsaWduSXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICdyb3ctZ2FwJzogYCR7cm93VmFsfXB4YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ2FwVmFsdWUgPT09ICdhdXRvJyAmJiBjb2xWYWx1ZSAhPT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAnYWxpZ24tY29udGVudCc6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbi1nYXAnOiBgJHtjb2xWYWx9cHhgXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sVmFsICYmIHJvd1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsID09PSByb3dWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2FwJzogYCR7Y29sVmFsfXB4YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpZ24tY29udGVudCc6IGFsaWduSXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IGp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2FwJzogYCR7cm93VmFsfXB4ICR7Y29sVmFsfXB4YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpZ24tY29udGVudCc6IGFsaWduSXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IGp1c3RpZnlDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2FwID0gZ2FwVmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuY29sdW1uZ2FwID0gY29sVmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RpcmVjdGlvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseURpcmVjdGlvbihudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3cmFwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5V3JhcChudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhbGlnbm1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25tZW50ID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFsaWdubWVudChudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdnYXAnOlxuICAgICAgICAgICAgY2FzZSAnY29sdW1uZ2FwJzpcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNwYWNpbmcoa2V5LCBudik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGlvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NsaXBjb250ZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNsaXBDb250ZW50ID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGlwQmVoYXZpb3VyKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseVN0eWxlQ2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCkge1xuXG4gICAgICAgIGlmIChrZXkgPT09ICd3aWR0aCcgfHwga2V5ID09PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgdGhpcy5hcHBseVNpemUoa2V5LCBudik7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdwYWRkaW5nJykge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3MoJ3BhZGRpbmcnLCBudik7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmKGtleSA9PT0gJ292ZXJmbG93Jykge1xuICAgICAgICAgICAgdGhpcy5vdmVyZmxvd3R5cGUgPSBudjtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpcEJlaGF2aW91cigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZihrZXkgPT09ICd6aW5kZXgnKSB7XG4gICAgICAgICAgICB0aGlzLnpJbmRleCA9IG52O1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVNpemUoa2V5OiBzdHJpbmcsIG52OiBhbnkpIHtcblxuICAgICAgICBpZiAobnYgPT09ICdmaWxsJykge1xuXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnd2lkdGgnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3MoJ3dpZHRoJywgJzEwMCUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2hlaWdodCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3dtY29udGFpbmVyJykgfHwgdGhpcy5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnd21hdXRvbGF5b3V0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaWduLXNlbGYnOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZmxleC1ncm93JzogJzEnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKCdoZWlnaHQnLCAnMTAwJScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKG52ID09PSAnaHVnJykge1xuXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnd2lkdGgnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3MoJ3dpZHRoJywgJ2ZpdC1jb250ZW50Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdoZWlnaHQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3MoJ2hlaWdodCcsICdmaXQtY29udGVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3MoJ2ZsZXgtc2hyaW5rJywgJzAnKTsgLy8gRG9uJ3Qgc2hyaW5rIHdoZW4gc2l6ZSBpcyBmaXhlZFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBzaG91bGQgY2xpcCBpdHMgY29udGVudCBhbmQgY29uZmlndXJlIHNjcm9sbGluZyBiZWhhdmlvdXIgYWNjb3JkaW5nbHkuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlwQmVoYXZpb3VyKCkge1xuXG4gICAgICAgIGNvbnN0IG92ZXJmbG93ID0gdGhpcy5vdmVyZmxvd3R5cGU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHN3aXRjaCAob3ZlcmZsb3cpIHtcbiAgICAgICAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICdvdmVyZmxvdy14JzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICdvdmVyZmxvdy15JzogJ3Njcm9sbCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAnb3ZlcmZsb3cteCc6ICdzY3JvbGwnLFxuICAgICAgICAgICAgICAgICAgICAnb3ZlcmZsb3cteSc6ICdoaWRkZW4nXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2JvdGggZGlyZWN0aW9ucyc6XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAnb3ZlcmZsb3cnOiAnc2Nyb2xsJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdubyBzY3JvbGxpbmcnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsaXBDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHsgJ292ZXJmbG93JzogJ2hpZGRlbicgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3MoeyAnb3ZlcmZsb3cnOiAnJyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8vIFRvZ2dsZSBhbmQgYXBwbHkgcG9zaXRpb25hbCBiZWhhdmlvdXIgYW5kIGV4cG9zZSB0aGUgei1pbmRleCBjb250cm9sIHdoZW4gcG9zaXRpb24gaXMgbm90IHJlbGF0aXZlLlxuICAgIHByaXZhdGUgaGFuZGxlUG9zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSAnc3RpY2t5Jykge1xuICAgICAgICAgICAgLy8gQXBwbHkgc3RpY2t5IHN0eWxlc1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgICAgICdwb3NpdGlvbic6ICdzdGlja3knLFxuICAgICAgICAgICAgICAgICd0b3AnOiAnMCcsICAgIC8vIFN0aWNrcyB0byB0b3Agd2hlbiBzY3JvbGxpbmcgdmVydGljYWxseVxuICAgICAgICAgICAgICAgICdsZWZ0JzogJzAnLCAgIC8vIFN0aWNrcyB0byBsZWZ0IHdoZW4gc2Nyb2xsaW5nIGhvcml6b250YWxseVxuICAgICAgICAgICAgICAgICd6LWluZGV4JzogdGhpcy56SW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzZXQgdG8gZGVmYXVsdCAoc3RhdGljL3JlbGF0aXZlIGJlaGF2aW9yKVxuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgICAgICAgICAgICdwb3NpdGlvbic6ICcnLFxuICAgICAgICAgICAgICAgICd0b3AnOiAnJyxcbiAgICAgICAgICAgICAgICAnbGVmdCc6ICcnLFxuICAgICAgICAgICAgICAgICd6LWluZGV4JzogJydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbiJdfQ==
@@ -87,7 +87,7 @@ export const getFieldLayoutConfig = (captionWidth, captionPosition, os) => {
87
87
  };
88
88
  };
89
89
  export const getDefaultViewModeWidget = widget => {
90
- if (includes(['checkbox', 'toggle', 'rating'], widget)) {
90
+ if (includes(['checkbox', 'toggle', 'iconbutton-toggle', 'rating'], widget)) {
91
91
  return VIEW_MODE_OPTIONS.DEFAULT;
92
92
  }
93
93
  return VIEW_MODE_OPTIONS.LABEL;
@@ -106,16 +106,19 @@ const parseBooleanValue = value => {
106
106
  };
107
107
  export const parseValueByType = (value, type, widget, trailingzero) => {
108
108
  if (widget) {
109
- if (widget === FormWidgetType.NUMBER || widget === FormWidgetType.SLIDER || widget === FormWidgetType.CURRENCY) {
109
+ if (widget === FormWidgetType.SLIDER || widget === FormWidgetType.CURRENCY) {
110
110
  return isNaN(Number(value)) ? null : trailingzero ? value : Number(value);
111
111
  }
112
- if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE) {
112
+ if (widget === FormWidgetType.NUMBER) {
113
+ return (isNaN(Number(value)) || value == null) ? null : trailingzero ? value : Number(value);
114
+ }
115
+ if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE || widget === FormWidgetType.ICONBUTTONTOGGLE) {
113
116
  return parseBooleanValue(value);
114
117
  }
115
118
  return value;
116
119
  }
117
120
  if (isNumberType(type)) {
118
- return isNaN(Number(value)) ? null : Number(value);
121
+ return (isNaN(Number(value)) || value == null) ? null : Number(value);
119
122
  }
120
123
  if (type === DataType.BOOLEAN) {
121
124
  return parseBooleanValue(value);
@@ -139,7 +142,7 @@ const fieldTypeWidgetTypeMap = {
139
142
  'time': ['time', 'text', 'number', 'select', 'checkboxset', 'radioset', 'autocomplete', 'chips'],
140
143
  'timestamp': ['timestamp', 'text', 'number', 'select', 'checkboxset', 'radioset', 'autocomplete', 'chips'],
141
144
  'datetime': ['datetime', 'text', 'select', 'checkboxset', 'radioset', 'autocomplete', 'chips'],
142
- 'boolean': ['checkbox', 'radioset', 'toggle', 'select'],
145
+ 'boolean': ['checkbox', 'radioset', 'toggle', 'iconbutton-toggle', 'select'],
143
146
  'list': ['select', 'radioset', 'checkboxset', 'switch', 'autocomplete', 'chips'],
144
147
  'clob': ['text', 'textarea', 'richtext'],
145
148
  'blob': ['upload'],
@@ -197,7 +200,7 @@ export const getDefaultValue = (value, type, widget) => {
197
200
  if (widget === FormWidgetType.NUMBER || widget === FormWidgetType.SLIDER || widget === FormWidgetType.CURRENCY) {
198
201
  return isNaN(Number(value)) ? null : Number(value);
199
202
  }
200
- if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE) {
203
+ if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE || widget === FormWidgetType.ICONBUTTONTOGGLE) {
201
204
  return parseBooleanValue(value);
202
205
  }
203
206
  return value;
@@ -210,4 +213,4 @@ export const getDefaultValue = (value, type, widget) => {
210
213
  }
211
214
  return value;
212
215
  };
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvdXRpbHMvbGl2ZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFeEQsTUFBTyxpQkFBaUIsR0FBRztJQUN2QixPQUFPLEVBQUcsU0FBUztJQUNuQixLQUFLLEVBQUcsT0FBTztDQUNsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3JCLFVBQVUsRUFBRyxXQUFXO0lBQ3hCLE1BQU0sRUFBRyxRQUFRO0lBQ2pCLElBQUksRUFBRyxNQUFNO0lBQ2IsTUFBTSxFQUFHLFFBQVE7Q0FDcEIsQ0FBQztBQUVGLG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFjLEVBQVEsRUFBRTtJQUNqRixPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ3pCLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNYLElBQUks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QVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILE9BQU8sRUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILFFBQVEsRUFBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILFFBQVEsRUFBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILE1BQU0sRUFBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQztJQUMvSCxNQUFNLEVBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQztJQUNySCxRQUFRLEVBQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUM7SUFDdE0sV0FBVyxFQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUM7SUFDMUosTUFBTSxFQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDO0lBQ3RNLE1BQU0sRUFBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUM7SUFDdkcsTUFBTSxFQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQztJQUN2RyxXQUFXLEVBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQzVHLFVBQVUsRUFBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQztJQUNqRyxTQUFTLEVBQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDM0QsTUFBTSxFQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUM7SUFDdkYsTUFBTSxFQUFTLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDL0MsTUFBTSxFQUFTLENBQUMsUUFBUSxDQUFDO0lBQ3pCLE1BQU0sRUFBUyxDQUFDLFFBQVEsQ0FBQztJQUN6QixRQUFRLEVBQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFHLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRO1FBQ3ZILFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUM7Q0FDdEksQ0FBQztBQUVGLDJDQUEyQztBQUMzQyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLEVBQUU7SUFDM0MsT0FBTyxzQkFBc0IsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFFRixpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEVBQUU7SUFDM0MsSUFBSSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZO1FBQ3BHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNsRixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsRUFBRTtJQUN0QyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQ3pELE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDO0FBQ2xILENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUNuRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1QsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdHLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pFLE9BQU8saUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE9BQU8saUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTnVtYmVyVHlwZSwgRm9ybVdpZGdldFR5cGUsIERhdGFUeXBlLCBpc0FuZHJvaWQgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge2ZvckVhY2gsIGdldCwgaW5jbHVkZXMsIHNwbGl0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0ICBWSUVXX01PREVfT1BUSU9OUyA9IHtcbiAgICBERUZBVUxUIDogJ2RlZmF1bHQnLFxuICAgIExBQkVMIDogJ2xhYmVsJ1xufTtcblxuZXhwb3J0IGNvbnN0IEVESVRfTU9ERSA9IHtcbiAgICBRVUlDS19FRElUIDogJ3F1aWNrZWRpdCcsXG4gICAgSU5MSU5FIDogJ2lubGluZScsXG4gICAgRk9STSA6ICdmb3JtJyxcbiAgICBESUFMT0cgOiAnZGlhbG9nJ1xufTtcblxuLy8gTWV0aG9kIHRvIHNldCB0aGUgaGVhZGVyIGNvbmZpZyBvZiB0aGUgZGF0YSB0YWJsZVxuZXhwb3J0IGNvbnN0IHNldEhlYWRlckNvbmZpZyA9IChoZWFkZXJDb25maWcsIGNvbmZpZywgZmllbGQsIGluZGV4PzogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgZm9yRWFjaChoZWFkZXJDb25maWcsIGNvbHMgPT4ge1xuICAgICAgICBpZiAoZ2V0KGNvbHMsICdpc0dyb3VwJykpIHtcbiAgICAgICAgICAgIGlmIChjb2xzLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gY29scy5jb2x1bW5zPy5maW5kSW5kZXgoKGNvbCkgPT4gY29sPy5maWVsZCA9PT0gY29uZmlnLmZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoaWQgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29scy5jb2x1bW5zW2luZGV4XSA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2xzLmNvbHVtbnNbaWRdID0gY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0SGVhZGVyQ29uZmlnKGNvbHMuY29sdW1ucywgY29uZmlnLCBmaWVsZCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SGVhZGVyQ29uZmlnRm9yVGFibGUgPSAoaGVhZGVyQ29uZmlnOiBhbnksIGNvbmZpZzogYW55LCBmaWVsZE5hbWU6IHN0cmluZywgaW5kZXg/OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBpZiAoZmllbGROYW1lKSB7XG4gICAgICAgIHNldEhlYWRlckNvbmZpZyhoZWFkZXJDb25maWcsIGNvbmZpZywgZmllbGROYW1lLCBpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyQ29uZmlnW2luZGV4XSA9IGNvbmZpZztcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um93T3BlcmF0aW9uc0NvbHVtbiA9ICgpOiBhbnkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgICdmaWVsZCcgICAgICAgICA6ICdyb3dPcGVyYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnICAgICAgICAgIDogJ2N1c3RvbScsXG4gICAgICAgICdkaXNwbGF5TmFtZScgICA6ICdBY3Rpb25zJyxcbiAgICAgICAgJ3dpZHRoJyAgICAgICAgIDogJzEyMHB4JyxcbiAgICAgICAgJ3JlYWRvbmx5JyAgICAgIDogdHJ1ZSxcbiAgICAgICAgJ3NvcnRhYmxlJyAgICAgIDogZmFsc2UsXG4gICAgICAgICdzZWFyY2hhYmxlJyAgICA6IGZhbHNlLFxuICAgICAgICAncmVzaXphYmxlJyAgICAgOiBmYWxzZSxcbiAgICAgICAgJ3NlbGVjdGFibGUnICAgIDogZmFsc2UsXG4gICAgICAgICdzaG93JyAgICAgICAgICA6IHRydWUsXG4gICAgICAgICdvcGVyYXRpb25zJyAgICA6IFtdLFxuICAgICAgICAnb3BDb25maWcnICAgICAgOiB7fSxcbiAgICAgICAgJ3BjRGlzcGxheScgICAgIDogdHJ1ZSxcbiAgICAgICAgJ21vYmlsZURpc3BsYXknIDogdHJ1ZSxcbiAgICAgICAgJ3RhYmxldERpc3BsYXknIDogdHJ1ZSxcbiAgICAgICAgJ2luY2x1ZGUnICAgICAgIDogdHJ1ZSxcbiAgICAgICAgJ2lzUm93T3BlcmF0aW9uJzogdHJ1ZVxuICAgIH07XG59O1xuXG4vKipcbiAqIFJldHVybnMgY2FwdGlvbiBhbmQgd2lkZ2V0IGJvb3RzdHJhcCBjbGFzc2VzIGZvciB0aGUgZmllbGRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkTGF5b3V0Q29uZmlnID0gKGNhcHRpb25XaWR0aCwgY2FwdGlvblBvc2l0aW9uLCBvcyk6IGFueSA9PiB7XG4gICAgbGV0IGNhcHRpb25DbHMgPSAnJyxcbiAgICAgICAgd2lkZ2V0Q2xzID0gJyc7XG5cbiAgICBjYXB0aW9uUG9zaXRpb24gPSBjYXB0aW9uUG9zaXRpb24gfHwgJ3RvcCc7XG5cbiAgICBpZiAoY2FwdGlvblBvc2l0aW9uID09PSAndG9wJyB8fCBjYXB0aW9uUG9zaXRpb24gPT09ICdmbG9hdGluZycpIHtcbiAgICAgICAgaWYgKChvcyAmJiBvcyA9PT0gJ2FuZHJvaWQnKSB8fCBpc0FuZHJvaWQoKSkgeyAvLyBJcyBhbmRyb2lkIG9yIG5vdCBhIG1vYmlsZSBhcHBsaWNhdGlvblxuICAgICAgICAgICAgY2FwdGlvbkNscyA9IHdpZGdldENscyA9ICdjb2wteHMtMTInO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjYXB0aW9uV2lkdGgpIHtcbiAgICAgICAgLy8gaGFuZGxpbmcgaXRlbXNwZXJyb3cgY29udGFpbmluZyBzdHJpbmcgb2YgY2xhc3Nlc1xuICAgICAgICBmb3JFYWNoKHNwbGl0KGNhcHRpb25XaWR0aCwgJyAnKSwgZnVuY3Rpb24gKGNscykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHNwbGl0KGNscywgJy0nKSxcbiAgICAgICAgICAgICAgICB0aWVyID0ga2V5c1swXTtcbiAgICAgICAgICAgIGxldCBfY2FwdGlvbldpZHRoLFxuICAgICAgICAgICAgICAgIHdpZGdldFdpZHRoO1xuICAgICAgICAgICAgX2NhcHRpb25XaWR0aCA9IHBhcnNlSW50KGtleXNbMV0sIDEwKTtcbiAgICAgICAgICAgIHdpZGdldFdpZHRoICA9IDEyIC0gX2NhcHRpb25XaWR0aDtcbiAgICAgICAgICAgIHdpZGdldFdpZHRoICA9IHdpZGdldFdpZHRoIDw9IDAgPyAxMiA6IHdpZGdldFdpZHRoO1xuICAgICAgICAgICAgY2FwdGlvbkNscyArPSAnICcgKyAnY29sLScgKyB0aWVyICsgJy0nICsgX2NhcHRpb25XaWR0aDtcbiAgICAgICAgICAgIHdpZGdldENscyAgKz0gJyAnICsgJ2NvbC0nICsgdGllciArICctJyArIHdpZGdldFdpZHRoO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2NhcHRpb25DbHMnIDogY2FwdGlvbkNscyxcbiAgICAgICAgJ3dpZGdldENscycgIDogd2lkZ2V0Q2xzXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0Vmlld01vZGVXaWRnZXQgPSB3aWRnZXQgPT4ge1xuICAgIGlmIChpbmNsdWRlcyhbJ2NoZWNrYm94JywgJ3RvZ2dsZScsICdyYXRpbmcnXSwgd2lkZ2V0KSkge1xuICAgICAgICByZXR1cm4gVklFV19NT0RFX09QVElPTlMuREVGQVVMVDtcbiAgICB9XG4gICAgcmV0dXJuIFZJRVdfTU9ERV9PUFRJT05TLkxBQkVMO1xufTtcblxuY29uc3QgcGFyc2VCb29sZWFuVmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkgeyAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgb2YgbnVtYmVyIHR5cGUgbGlrZSAnMTIzJ1xuICAgICAgICByZXR1cm4gK3ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VWYWx1ZUJ5VHlwZSA9ICh2YWx1ZSwgdHlwZSwgd2lkZ2V0LCB0cmFpbGluZ3plcm8/KSA9PiB7XG4gICAgaWYgKHdpZGdldCkge1xuICAgICAgICBpZiAod2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5OVU1CRVIgfHwgd2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5TTElERVIgfHwgd2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5DVVJSRU5DWSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTmFOKE51bWJlcih2YWx1ZSkpID8gbnVsbCA6IHRyYWlsaW5nemVybyA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWCB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLlRPR0dMRSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQm9vbGVhblZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc051bWJlclR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzTmFOKE51bWJlcih2YWx1ZSkpID8gbnVsbCA6IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBEYXRhVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUJvb2xlYW5WYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbmNvbnN0IGZpZWxkVHlwZVdpZGdldFR5cGVNYXAgPSB7XG4gICAgJ2ludGVnZXInICAgIDogWydudW1iZXInLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAncmF0aW5nJywgJ3NsaWRlcicsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAnYmlnX2ludGVnZXInOiBbJ251bWJlcicsICd0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdyYXRpbmcnLCAnc2xpZGVyJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICdzaG9ydCcgICAgICA6IFsnbnVtYmVyJywgJ3RleHQnLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ3NsaWRlcicsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAnZmxvYXQnICAgICAgOiBbJ251bWJlcicsICd0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdzbGlkZXInLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2JpZ19kZWNpbWFsJzogWydudW1iZXInLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnc2xpZGVyJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICdudW1iZXInICAgICA6IFsnbnVtYmVyJywgJ3RleHQnLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ3NsaWRlcicsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAnZG91YmxlJyAgICAgOiBbJ251bWJlcicsICd0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdzbGlkZXInLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2xvbmcnICAgICAgIDogWydudW1iZXInLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAncmF0aW5nJywgJ3NsaWRlcicsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAnYnl0ZScgICAgICAgOiBbJ251bWJlcicsICd0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdzbGlkZXInLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ3N0cmluZycgICAgIDogWyd0ZXh0JywgJ251bWJlcicsICAndGV4dGFyZWEnLCAncGFzc3dvcmQnLCAncmljaHRleHQnLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ2RhdGUnLCAndGltZScsICd0aW1lc3RhbXAnLCAnc3dpdGNoJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcycsICdjb2xvcnBpY2tlciddLFxuICAgICdjaGFyYWN0ZXInICA6IFsndGV4dCcsICdudW1iZXInLCAgJ3RleHRhcmVhJywgJ3Bhc3N3b3JkJywgJ3JpY2h0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdzd2l0Y2gnLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ3RleHQnICAgICAgIDogWyd0ZXh0JywgJ251bWJlcicsICAndGV4dGFyZWEnLCAncGFzc3dvcmQnLCAncmljaHRleHQnLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ2RhdGUnLCAndGltZScsICd0aW1lc3RhbXAnLCAnc3dpdGNoJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcycsICdjb2xvcnBpY2tlciddLFxuICAgICdkYXRlJyAgICAgICA6IFsnZGF0ZScsICd0ZXh0JywgJ251bWJlcicsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ3RpbWUnICAgICAgIDogWyd0aW1lJywgJ3RleHQnLCAnbnVtYmVyJywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAndGltZXN0YW1wJyAgOiBbJ3RpbWVzdGFtcCcsICd0ZXh0JywgJ251bWJlcicsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2RhdGV0aW1lJyAgIDogWydkYXRldGltZScsICd0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAnYm9vbGVhbicgICAgOiBbJ2NoZWNrYm94JywgJ3JhZGlvc2V0JywgJ3RvZ2dsZScsICdzZWxlY3QnXSxcbiAgICAnbGlzdCcgICAgICAgOiBbJ3NlbGVjdCcsICdyYWRpb3NldCcsICdjaGVja2JveHNldCcsICdzd2l0Y2gnLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2Nsb2InICAgICAgIDogWyd0ZXh0JywgJ3RleHRhcmVhJywgJ3JpY2h0ZXh0J10sXG4gICAgJ2Jsb2InICAgICAgIDogWyd1cGxvYWQnXSxcbiAgICAnZmlsZScgICAgICAgOiBbJ3VwbG9hZCddLFxuICAgICdjdXN0b20nICAgICA6IFsndGV4dCcsICdudW1iZXInLCAgJ3RleHRhcmVhJywgJ3Bhc3N3b3JkJywgJ2NoZWNrYm94JywgJ3RvZ2dsZScsICdzbGlkZXInLCAncmljaHRleHQnLCAnY3VycmVuY3knLCAnc3dpdGNoJyxcbiAgICAgICAgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdkYXRlJywgJ3RpbWUnLCAndGltZXN0YW1wJywgJ3JhdGluZycsICdkYXRldGltZScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnLCAnY29sb3JwaWNrZXInXVxufTtcblxuLy8gR2V0IHdpZGdldHMgYXBwbGljYWJsZSB0byB0aGUgZ2l2ZW4gdHlwZVxuZXhwb3J0IGNvbnN0IGdldEZpZWxkVHlwZVdpZGdldFR5cGVzTWFwID0gKCkgPT4ge1xuICAgIHJldHVybiBmaWVsZFR5cGVXaWRnZXRUeXBlTWFwO1xufTtcblxuLy8gR2V0IGZpbHRlciB3aWRnZXQgYXBwbGljYWJsZSB0byB0aGUgZ2l2ZW4gdHlwZVxuZXhwb3J0IGNvbnN0IGdldERhdGFUYWJsZUZpbHRlcldpZGdldCA9IHR5cGUgPT4ge1xuICAgIGxldCB3aWRnZXQgPSBmaWVsZFR5cGVXaWRnZXRUeXBlTWFwW3R5cGVdICYmIGZpZWxkVHlwZVdpZGdldFR5cGVNYXBbdHlwZV1bMF07XG4gICAgaWYgKHR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgd2lkZ2V0ID0gRm9ybVdpZGdldFR5cGUuU0VMRUNUO1xuICAgIH1cbiAgICBpZiAoaW5jbHVkZXMoW0Zvcm1XaWRnZXRUeXBlLlRFWFQsIEZvcm1XaWRnZXRUeXBlLk5VTUJFUiwgRm9ybVdpZGdldFR5cGUuU0VMRUNULCBGb3JtV2lkZ2V0VHlwZS5BVVRPQ09NUExFVEUsXG4gICAgICAgICAgICBGb3JtV2lkZ2V0VHlwZS5EQVRFLCBGb3JtV2lkZ2V0VHlwZS5USU1FLCBGb3JtV2lkZ2V0VHlwZS5EQVRFVElNRV0sIHdpZGdldCkpIHtcbiAgICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICB9XG4gICAgcmV0dXJuIEZvcm1XaWRnZXRUeXBlLlRFWFQ7XG59O1xuXG4vKipcbiAqIEBuZ2RvYyBmdW5jdGlvblxuICogQG5hbWUgd20ud2lkZ2V0cy5saXZlLmdldEVkaXRNb2RlV2lkZ2V0XG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRlZmF1bHQgd2lkZ2V0IGZvciBncmlkXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbERlZiBmaWVsZCBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZVdpZGdldCA9IGNvbERlZiA9PiB7XG4gICAgaWYgKGNvbERlZlsncmVsYXRlZC1lbnRpdHktbmFtZSddICYmIGNvbERlZlsncHJpbWFyeS1rZXknXSkge1xuICAgICAgICByZXR1cm4gRm9ybVdpZGdldFR5cGUuU0VMRUNUO1xuICAgIH1cbiAgICByZXR1cm4gKGZpZWxkVHlwZVdpZGdldFR5cGVNYXBbY29sRGVmLnR5cGVdICYmIGZpZWxkVHlwZVdpZGdldFR5cGVNYXBbY29sRGVmLnR5cGVdWzBdKSB8fCBGb3JtV2lkZ2V0VHlwZS5URVhUO1xufTtcblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHMjZ2V0RGVmYXVsdFZhbHVlXG4gKiBAbWV0aG9kT2Ygd20ud2lkZ2V0cy5saXZlLkxpdmVXaWRnZXRVdGlsc1xuICogQGZ1bmN0aW9uXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiByZXR1cm4gdGhlIGZvcm1hdHRlZCBkZWZhdWx0IHZhbHVlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgY29sdW1uIHR5cGUgb2YgdGhlIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VmFsdWUgPSAodmFsdWUsIHR5cGUsIHdpZGdldCkgPT4ge1xuICAgIGlmICh3aWRnZXQpIHtcbiAgICAgICAgaWYgKHdpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuTlVNQkVSIHx8IHdpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuU0xJREVSIHx8IHdpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuQ1VSUkVOQ1kpIHtcbiAgICAgICAgICAgIHJldHVybiBpc05hTihOdW1iZXIodmFsdWUpKSA/IG51bGwgOiBOdW1iZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLkNIRUNLQk9YIHx8IHdpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuVE9HR0xFKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VCb29sZWFuVmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyVHlwZSh0eXBlKSkge1xuICAgICAgICByZXR1cm4gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPyBudWxsIDogTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IERhdGFUeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQm9vbGVhblZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcbiJdfQ==
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvdXRpbHMvbGl2ZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFeEQsTUFBTyxpQkFBaUIsR0FBRztJQUN2QixPQUFPLEVBQUcsU0FBUztJQUNuQixLQUFLLEVBQUcsT0FBTztDQUNsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3JCLFVBQVUsRUFBRyxXQUFXO0lBQ3hCLE1BQU0sRUFBRyxRQUFRO0lBQ2pCLElBQUksRUFBRyxNQUFNO0lBQ2IsTUFBTSxFQUFHLFFBQVE7Q0FDcEIsQ0FBQztBQUVGLG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFjLEVBQVEsRUFBRTtJQUNqRixPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ3pCLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNYLElBQUks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QkFBc0IsR0FBRztJQUMzQixTQUFTLEVBQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUM7SUFDL0gsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQy9ILE9BQU8sRUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILE9BQU8sRUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILFFBQVEsRUFBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILFFBQVEsRUFBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3JILE1BQU0sRUFBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxV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LE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdkgsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdW1iZXJUeXBlLCBGb3JtV2lkZ2V0VHlwZSwgRGF0YVR5cGUsIGlzQW5kcm9pZCB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpbmNsdWRlcywgc3BsaXR9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgIFZJRVdfTU9ERV9PUFRJT05TID0ge1xuICAgIERFRkFVTFQgOiAnZGVmYXVsdCcsXG4gICAgTEFCRUwgOiAnbGFiZWwnXG59O1xuXG5leHBvcnQgY29uc3QgRURJVF9NT0RFID0ge1xuICAgIFFVSUNLX0VESVQgOiAncXVpY2tlZGl0JyxcbiAgICBJTkxJTkUgOiAnaW5saW5lJyxcbiAgICBGT1JNIDogJ2Zvcm0nLFxuICAgIERJQUxPRyA6ICdkaWFsb2cnXG59O1xuXG4vLyBNZXRob2QgdG8gc2V0IHRoZSBoZWFkZXIgY29uZmlnIG9mIHRoZSBkYXRhIHRhYmxlXG5leHBvcnQgY29uc3Qgc2V0SGVhZGVyQ29uZmlnID0gKGhlYWRlckNvbmZpZywgY29uZmlnLCBmaWVsZCwgaW5kZXg/OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICBmb3JFYWNoKGhlYWRlckNvbmZpZywgY29scyA9PiB7XG4gICAgICAgIGlmIChnZXQoY29scywgJ2lzR3JvdXAnKSkge1xuICAgICAgICAgICAgaWYgKGNvbHMuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBjb2xzLmNvbHVtbnM/LmZpbmRJbmRleCgoY29sKSA9PiBjb2w/LmZpZWxkID09PSBjb25maWcuZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChpZCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xzLmNvbHVtbnNbaW5kZXhdID0gY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHMuY29sdW1uc1tpZF0gPSBjb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRIZWFkZXJDb25maWcoY29scy5jb2x1bW5zLCBjb25maWcsIGZpZWxkLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRIZWFkZXJDb25maWdGb3JUYWJsZSA9IChoZWFkZXJDb25maWc6IGFueSwgY29uZmlnOiBhbnksIGZpZWxkTmFtZTogc3RyaW5nLCBpbmRleD86IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgc2V0SGVhZGVyQ29uZmlnKGhlYWRlckNvbmZpZywgY29uZmlnLCBmaWVsZE5hbWUsIGluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkZXJDb25maWdbaW5kZXhdID0gY29uZmlnO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSb3dPcGVyYXRpb25zQ29sdW1uID0gKCk6IGFueSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2ZpZWxkJyAgICAgICAgIDogJ3Jvd09wZXJhdGlvbnMnLFxuICAgICAgICAndHlwZScgICAgICAgICAgOiAnY3VzdG9tJyxcbiAgICAgICAgJ2Rpc3BsYXlOYW1lJyAgIDogJ0FjdGlvbnMnLFxuICAgICAgICAnd2lkdGgnICAgICAgICAgOiAnMTIwcHgnLFxuICAgICAgICAncmVhZG9ubHknICAgICAgOiB0cnVlLFxuICAgICAgICAnc29ydGFibGUnICAgICAgOiBmYWxzZSxcbiAgICAgICAgJ3NlYXJjaGFibGUnICAgIDogZmFsc2UsXG4gICAgICAgICdyZXNpemFibGUnICAgICA6IGZhbHNlLFxuICAgICAgICAnc2VsZWN0YWJsZScgICAgOiBmYWxzZSxcbiAgICAgICAgJ3Nob3cnICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgJ29wZXJhdGlvbnMnICAgIDogW10sXG4gICAgICAgICdvcENvbmZpZycgICAgICA6IHt9LFxuICAgICAgICAncGNEaXNwbGF5JyAgICAgOiB0cnVlLFxuICAgICAgICAnbW9iaWxlRGlzcGxheScgOiB0cnVlLFxuICAgICAgICAndGFibGV0RGlzcGxheScgOiB0cnVlLFxuICAgICAgICAnaW5jbHVkZScgICAgICAgOiB0cnVlLFxuICAgICAgICAnaXNSb3dPcGVyYXRpb24nOiB0cnVlXG4gICAgfTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBjYXB0aW9uIGFuZCB3aWRnZXQgYm9vdHN0cmFwIGNsYXNzZXMgZm9yIHRoZSBmaWVsZFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmllbGRMYXlvdXRDb25maWcgPSAoY2FwdGlvbldpZHRoLCBjYXB0aW9uUG9zaXRpb24sIG9zKTogYW55ID0+IHtcbiAgICBsZXQgY2FwdGlvbkNscyA9ICcnLFxuICAgICAgICB3aWRnZXRDbHMgPSAnJztcblxuICAgIGNhcHRpb25Qb3NpdGlvbiA9IGNhcHRpb25Qb3NpdGlvbiB8fCAndG9wJztcblxuICAgIGlmIChjYXB0aW9uUG9zaXRpb24gPT09ICd0b3AnIHx8IGNhcHRpb25Qb3NpdGlvbiA9PT0gJ2Zsb2F0aW5nJykge1xuICAgICAgICBpZiAoKG9zICYmIG9zID09PSAnYW5kcm9pZCcpIHx8IGlzQW5kcm9pZCgpKSB7IC8vIElzIGFuZHJvaWQgb3Igbm90IGEgbW9iaWxlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICBjYXB0aW9uQ2xzID0gd2lkZ2V0Q2xzID0gJ2NvbC14cy0xMic7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhcHRpb25XaWR0aCkge1xuICAgICAgICAvLyBoYW5kbGluZyBpdGVtc3BlcnJvdyBjb250YWluaW5nIHN0cmluZyBvZiBjbGFzc2VzXG4gICAgICAgIGZvckVhY2goc3BsaXQoY2FwdGlvbldpZHRoLCAnICcpLCBmdW5jdGlvbiAoY2xzKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gc3BsaXQoY2xzLCAnLScpLFxuICAgICAgICAgICAgICAgIHRpZXIgPSBrZXlzWzBdO1xuICAgICAgICAgICAgbGV0IF9jYXB0aW9uV2lkdGgsXG4gICAgICAgICAgICAgICAgd2lkZ2V0V2lkdGg7XG4gICAgICAgICAgICBfY2FwdGlvbldpZHRoID0gcGFyc2VJbnQoa2V5c1sxXSwgMTApO1xuICAgICAgICAgICAgd2lkZ2V0V2lkdGggID0gMTIgLSBfY2FwdGlvbldpZHRoO1xuICAgICAgICAgICAgd2lkZ2V0V2lkdGggID0gd2lkZ2V0V2lkdGggPD0gMCA/IDEyIDogd2lkZ2V0V2lkdGg7XG4gICAgICAgICAgICBjYXB0aW9uQ2xzICs9ICcgJyArICdjb2wtJyArIHRpZXIgKyAnLScgKyBfY2FwdGlvbldpZHRoO1xuICAgICAgICAgICAgd2lkZ2V0Q2xzICArPSAnICcgKyAnY29sLScgKyB0aWVyICsgJy0nICsgd2lkZ2V0V2lkdGg7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAnY2FwdGlvbkNscycgOiBjYXB0aW9uQ2xzLFxuICAgICAgICAnd2lkZ2V0Q2xzJyAgOiB3aWRnZXRDbHNcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRWaWV3TW9kZVdpZGdldCA9IHdpZGdldCA9PiB7XG4gICAgaWYgKGluY2x1ZGVzKFsnY2hlY2tib3gnLCAndG9nZ2xlJywgJ2ljb25idXR0b24tdG9nZ2xlJywgJ3JhdGluZyddLCB3aWRnZXQpKSB7XG4gICAgICAgIHJldHVybiBWSUVXX01PREVfT1BUSU9OUy5ERUZBVUxUO1xuICAgIH1cbiAgICByZXR1cm4gVklFV19NT0RFX09QVElPTlMuTEFCRUw7XG59O1xuXG5jb25zdCBwYXJzZUJvb2xlYW5WYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7IC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyBvZiBudW1iZXIgdHlwZSBsaWtlICcxMjMnXG4gICAgICAgIHJldHVybiArdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVZhbHVlQnlUeXBlID0gKHZhbHVlLCB0eXBlLCB3aWRnZXQsIHRyYWlsaW5nemVybz8pID0+IHtcbiAgICBpZiAod2lkZ2V0KSB7XG4gICAgICAgIGlmICh3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLlNMSURFUiB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLkNVUlJFTkNZKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOYU4oTnVtYmVyKHZhbHVlKSk/IG51bGwgOiB0cmFpbGluZ3plcm8gPyB2YWx1ZSA6IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuTlVNQkVSICkge1xuICAgICAgICAgICAgcmV0dXJuIChpc05hTihOdW1iZXIodmFsdWUpKXx8IHZhbHVlID09IG51bGwpID8gbnVsbCA6IHRyYWlsaW5nemVybyA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWCB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLlRPR0dMRSB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLklDT05CVVRUT05UT0dHTEUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUJvb2xlYW5WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXJUeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiAoaXNOYU4oTnVtYmVyKHZhbHVlKSl8fCB2YWx1ZSA9PSBudWxsKSA/IG51bGwgOiBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gRGF0YVR5cGUuQk9PTEVBTikge1xuICAgICAgICByZXR1cm4gcGFyc2VCb29sZWFuVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBmaWVsZFR5cGVXaWRnZXRUeXBlTWFwID0ge1xuICAgICdpbnRlZ2VyJyAgICA6IFsnbnVtYmVyJywgJ3RleHQnLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ3JhdGluZycsICdzbGlkZXInLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2JpZ19pbnRlZ2VyJzogWydudW1iZXInLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAncmF0aW5nJywgJ3NsaWRlcicsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAnc2hvcnQnICAgICAgOiBbJ251bWJlcicsICd0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdzbGlkZXInLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2Zsb2F0JyAgICAgIDogWydudW1iZXInLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnc2xpZGVyJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICdiaWdfZGVjaW1hbCc6IFsnbnVtYmVyJywgJ3RleHQnLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ3NsaWRlcicsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnXSxcbiAgICAnbnVtYmVyJyAgICAgOiBbJ251bWJlcicsICd0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdzbGlkZXInLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2RvdWJsZScgICAgIDogWydudW1iZXInLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnc2xpZGVyJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICdsb25nJyAgICAgICA6IFsnbnVtYmVyJywgJ3RleHQnLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ3JhdGluZycsICdzbGlkZXInLCAnY3VycmVuY3knLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2J5dGUnICAgICAgIDogWydudW1iZXInLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnc2xpZGVyJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICdzdHJpbmcnICAgICA6IFsndGV4dCcsICdudW1iZXInLCAgJ3RleHRhcmVhJywgJ3Bhc3N3b3JkJywgJ3JpY2h0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdkYXRlJywgJ3RpbWUnLCAndGltZXN0YW1wJywgJ3N3aXRjaCcsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnLCAnY29sb3JwaWNrZXInXSxcbiAgICAnY2hhcmFjdGVyJyAgOiBbJ3RleHQnLCAnbnVtYmVyJywgICd0ZXh0YXJlYScsICdwYXNzd29yZCcsICdyaWNodGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnc3dpdGNoJywgJ2N1cnJlbmN5JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICd0ZXh0JyAgICAgICA6IFsndGV4dCcsICdudW1iZXInLCAgJ3RleHRhcmVhJywgJ3Bhc3N3b3JkJywgJ3JpY2h0ZXh0JywgJ3NlbGVjdCcsICdjaGVja2JveHNldCcsICdyYWRpb3NldCcsICdkYXRlJywgJ3RpbWUnLCAndGltZXN0YW1wJywgJ3N3aXRjaCcsICdjdXJyZW5jeScsICdhdXRvY29tcGxldGUnLCAnY2hpcHMnLCAnY29sb3JwaWNrZXInXSxcbiAgICAnZGF0ZScgICAgICAgOiBbJ2RhdGUnLCAndGV4dCcsICdudW1iZXInLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICd0aW1lJyAgICAgICA6IFsndGltZScsICd0ZXh0JywgJ251bWJlcicsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ3RpbWVzdGFtcCcgIDogWyd0aW1lc3RhbXAnLCAndGV4dCcsICdudW1iZXInLCAnc2VsZWN0JywgJ2NoZWNrYm94c2V0JywgJ3JhZGlvc2V0JywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICdkYXRldGltZScgICA6IFsnZGF0ZXRpbWUnLCAndGV4dCcsICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJ10sXG4gICAgJ2Jvb2xlYW4nICAgIDogWydjaGVja2JveCcsICdyYWRpb3NldCcsICd0b2dnbGUnLCAnaWNvbmJ1dHRvbi10b2dnbGUnLCAnc2VsZWN0J10sXG4gICAgJ2xpc3QnICAgICAgIDogWydzZWxlY3QnLCAncmFkaW9zZXQnLCAnY2hlY2tib3hzZXQnLCAnc3dpdGNoJywgJ2F1dG9jb21wbGV0ZScsICdjaGlwcyddLFxuICAgICdjbG9iJyAgICAgICA6IFsndGV4dCcsICd0ZXh0YXJlYScsICdyaWNodGV4dCddLFxuICAgICdibG9iJyAgICAgICA6IFsndXBsb2FkJ10sXG4gICAgJ2ZpbGUnICAgICAgIDogWyd1cGxvYWQnXSxcbiAgICAnY3VzdG9tJyAgICAgOiBbJ3RleHQnLCAnbnVtYmVyJywgICd0ZXh0YXJlYScsICdwYXNzd29yZCcsICdjaGVja2JveCcsICd0b2dnbGUnLCAnc2xpZGVyJywgJ3JpY2h0ZXh0JywgJ2N1cnJlbmN5JywgJ3N3aXRjaCcsXG4gICAgICAgICdzZWxlY3QnLCAnY2hlY2tib3hzZXQnLCAncmFkaW9zZXQnLCAnZGF0ZScsICd0aW1lJywgJ3RpbWVzdGFtcCcsICdyYXRpbmcnLCAnZGF0ZXRpbWUnLCAnYXV0b2NvbXBsZXRlJywgJ2NoaXBzJywgJ2NvbG9ycGlja2VyJ11cbn07XG5cbi8vIEdldCB3aWRnZXRzIGFwcGxpY2FibGUgdG8gdGhlIGdpdmVuIHR5cGVcbmV4cG9ydCBjb25zdCBnZXRGaWVsZFR5cGVXaWRnZXRUeXBlc01hcCA9ICgpID0+IHtcbiAgICByZXR1cm4gZmllbGRUeXBlV2lkZ2V0VHlwZU1hcDtcbn07XG5cbi8vIEdldCBmaWx0ZXIgd2lkZ2V0IGFwcGxpY2FibGUgdG8gdGhlIGdpdmVuIHR5cGVcbmV4cG9ydCBjb25zdCBnZXREYXRhVGFibGVGaWx0ZXJXaWRnZXQgPSB0eXBlID0+IHtcbiAgICBsZXQgd2lkZ2V0ID0gZmllbGRUeXBlV2lkZ2V0VHlwZU1hcFt0eXBlXSAmJiBmaWVsZFR5cGVXaWRnZXRUeXBlTWFwW3R5cGVdWzBdO1xuICAgIGlmICh0eXBlID09PSBEYXRhVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIHdpZGdldCA9IEZvcm1XaWRnZXRUeXBlLlNFTEVDVDtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGVzKFtGb3JtV2lkZ2V0VHlwZS5URVhULCBGb3JtV2lkZ2V0VHlwZS5OVU1CRVIsIEZvcm1XaWRnZXRUeXBlLlNFTEVDVCwgRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFLFxuICAgICAgICAgICAgRm9ybVdpZGdldFR5cGUuREFURSwgRm9ybVdpZGdldFR5cGUuVElNRSwgRm9ybVdpZGdldFR5cGUuREFURVRJTUVdLCB3aWRnZXQpKSB7XG4gICAgICAgIHJldHVybiB3aWRnZXQ7XG4gICAgfVxuICAgIHJldHVybiBGb3JtV2lkZ2V0VHlwZS5URVhUO1xufTtcblxuLyoqXG4gKiBAbmdkb2MgZnVuY3Rpb25cbiAqIEBuYW1lIHdtLndpZGdldHMubGl2ZS5nZXRFZGl0TW9kZVdpZGdldFxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkZWZhdWx0IHdpZGdldCBmb3IgZ3JpZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2xEZWYgZmllbGQgZGVmaW5pdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdE1vZGVXaWRnZXQgPSBjb2xEZWYgPT4ge1xuICAgIGlmIChjb2xEZWZbJ3JlbGF0ZWQtZW50aXR5LW5hbWUnXSAmJiBjb2xEZWZbJ3ByaW1hcnkta2V5J10pIHtcbiAgICAgICAgcmV0dXJuIEZvcm1XaWRnZXRUeXBlLlNFTEVDVDtcbiAgICB9XG4gICAgcmV0dXJuIChmaWVsZFR5cGVXaWRnZXRUeXBlTWFwW2NvbERlZi50eXBlXSAmJiBmaWVsZFR5cGVXaWRnZXRUeXBlTWFwW2NvbERlZi50eXBlXVswXSkgfHwgRm9ybVdpZGdldFR5cGUuVEVYVDtcbn07XG5cbi8qKlxuICogQG5nZG9jIGZ1bmN0aW9uXG4gKiBAbmFtZSB3bS53aWRnZXRzLmxpdmUuTGl2ZVdpZGdldFV0aWxzI2dldERlZmF1bHRWYWx1ZVxuICogQG1ldGhvZE9mIHdtLndpZGdldHMubGl2ZS5MaXZlV2lkZ2V0VXRpbHNcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogcmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGVmYXVsdCB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGNvbHVtbiB0eXBlIG9mIHRoZSB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFZhbHVlID0gKHZhbHVlLCB0eXBlLCB3aWRnZXQpID0+IHtcbiAgICBpZiAod2lkZ2V0KSB7XG4gICAgICAgIGlmICh3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLk5VTUJFUiB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLlNMSURFUiB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLkNVUlJFTkNZKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPyBudWxsIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2lkZ2V0ID09PSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWCB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLlRPR0dMRSB8fCB3aWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLklDT05CVVRUT05UT0dHTEUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUJvb2xlYW5WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXJUeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBpc05hTihOdW1iZXIodmFsdWUpKSA/IG51bGwgOiBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gRGF0YVR5cGUuQk9PTEVBTikge1xuICAgICAgICByZXR1cm4gcGFyc2VCb29sZWFuVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuIl19