@colijnit/sharedcomponents 1.0.56 → 1.0.58

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 (727) hide show
  1. package/README.md +8 -11
  2. package/bundles/colijnit-sharedcomponents.umd.js +10297 -0
  3. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -0
  4. package/colijnit-sharedcomponents.d.ts +91 -0
  5. package/colijnit-sharedcomponents.metadata.json +1 -0
  6. package/esm2015/colijnit-sharedcomponents.js +92 -0
  7. package/esm2015/lib/assets/dictionary/text.properties.js +11 -0
  8. package/esm2015/lib/businessobject/build-images-and-documentation-result.js +2 -0
  9. package/esm2015/lib/businessobject/co-document-right.bo.js +3 -0
  10. package/esm2015/lib/businessobject/drag-drop-container-element.js +2 -0
  11. package/esm2015/lib/businessobject/drag-drop-container.js +7 -0
  12. package/esm2015/lib/components/activity-list/activity-list.component.js +130 -0
  13. package/esm2015/lib/components/activity-list/activity-list.module.js +24 -0
  14. package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.component.js +47 -0
  15. package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.module.js +20 -0
  16. package/esm2015/lib/components/date-planning/component/agenda/agenda-base-view.component.js +61 -0
  17. package/esm2015/lib/components/date-planning/component/agenda/agenda-day-view.component.js +36 -0
  18. package/esm2015/lib/components/date-planning/component/agenda/agenda-event.component.js +56 -0
  19. package/esm2015/lib/components/date-planning/component/agenda/agenda-events.component.js +47 -0
  20. package/esm2015/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.js +68 -0
  21. package/esm2015/lib/components/date-planning/component/agenda/agenda-header.component.js +243 -0
  22. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-cell.component.js +36 -0
  23. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.js +50 -0
  24. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view.component.js +46 -0
  25. package/esm2015/lib/components/date-planning/component/agenda/agenda-month-view.component.js +61 -0
  26. package/esm2015/lib/components/date-planning/component/agenda/agenda-select-event.component.js +39 -0
  27. package/esm2015/lib/components/date-planning/component/agenda/agenda-view.component.js +35 -0
  28. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-select-view.component.js +64 -0
  29. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-view.component.js +48 -0
  30. package/esm2015/lib/components/date-planning/component/agenda/view-select.component.js +42 -0
  31. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-months.component.js +34 -0
  32. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-years.component.js +48 -0
  33. package/esm2015/lib/components/date-planning/component/calendar/calendar-header.component.js +107 -0
  34. package/esm2015/lib/components/date-planning/component/calendar/calendar-view.component.js +178 -0
  35. package/esm2015/lib/components/date-planning/component/calendar/calendar.component.js +34 -0
  36. package/esm2015/lib/components/date-planning/date-planning.component.js +113 -0
  37. package/esm2015/lib/components/date-planning/date-planning.module.js +63 -0
  38. package/esm2015/lib/components/docsign/component/signature/signature.component.js +75 -0
  39. package/esm2015/lib/components/docsign/component/signatures/signatures.component.js +44 -0
  40. package/esm2015/lib/components/docsign/docsign.component.js +242 -0
  41. package/esm2015/lib/components/docsign/docsign.module.js +23 -0
  42. package/esm2015/lib/components/file-upload/file-upload.component.js +189 -0
  43. package/esm2015/lib/components/file-upload/file-upload.module.js +25 -0
  44. package/esm2015/lib/components/file-upload-popup/file-upload-popup.component.js +397 -0
  45. package/esm2015/lib/components/file-upload-popup/file-upload-popup.module.js +30 -0
  46. package/esm2015/lib/components/files-upload/components/base-file-upload.component.js +469 -0
  47. package/esm2015/lib/components/files-upload/components/drag-drop-container.component.js +115 -0
  48. package/esm2015/lib/components/files-upload/files-upload.component.js +131 -0
  49. package/esm2015/lib/components/files-upload/files-upload.module.js +47 -0
  50. package/esm2015/lib/components/image-display/image-display.component.js +36 -0
  51. package/esm2015/lib/components/image-display/image-display.module.js +23 -0
  52. package/esm2015/lib/components/key-pad/key-pad.component.js +200 -0
  53. package/esm2015/lib/components/key-pad/key-pad.module.js +22 -0
  54. package/esm2015/lib/components/layout-switcher/layout-switcher.component.js +74 -0
  55. package/esm2015/lib/components/layout-switcher/layout-switcher.module.js +21 -0
  56. package/esm2015/lib/components/linear-gauge/co-linear-gauge.component.js +59 -0
  57. package/esm2015/lib/components/linear-gauge/co-linear-gauge.module.js +19 -0
  58. package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.component.js +89 -0
  59. package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.module.js +21 -0
  60. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.js +79 -0
  61. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.js +21 -0
  62. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.js +85 -0
  63. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.js +21 -0
  64. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.js +64 -0
  65. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.js +26 -0
  66. package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.js +40 -0
  67. package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.js +23 -0
  68. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.js +61 -0
  69. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.js +28 -0
  70. package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.component.js +38 -0
  71. package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.module.js +21 -0
  72. package/esm2015/lib/components/send-method-dialog/model/email-address-viewmodel.js +7 -0
  73. package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +258 -0
  74. package/esm2015/lib/components/send-method-dialog/send-method-dialog.module.js +35 -0
  75. package/esm2015/lib/components/send-method-dialog/send-method-params.interface.js +2 -0
  76. package/esm2015/lib/components/send-method-dialog/service/send-method.service.js +59 -0
  77. package/esm2015/lib/components/simple-tags/simple-tags.component.js +229 -0
  78. package/esm2015/lib/components/simple-tags/simple-tags.module.js +26 -0
  79. package/esm2015/lib/components/statusbar/statusbar-popup.component.js +97 -0
  80. package/esm2015/lib/components/statusbar/statusbar.component.js +81 -0
  81. package/esm2015/lib/components/statusbar/statusbar.module.js +27 -0
  82. package/esm2015/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.js +47 -0
  83. package/esm2015/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.js +47 -0
  84. package/esm2015/lib/components/stock/components/order-stock-history/order-stock-history.component.js +47 -0
  85. package/esm2015/lib/components/stock/components/order-stock-tab/order-stock-tab.component.js +47 -0
  86. package/esm2015/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.js +47 -0
  87. package/esm2015/lib/components/stock/components/order-tab/order-tab.component.js +67 -0
  88. package/esm2015/lib/components/stock/components/stock-history/stock-history.component.js +53 -0
  89. package/esm2015/lib/components/stock/components/stock-location/stock-location.component.js +240 -0
  90. package/esm2015/lib/components/stock/components/stock-prognose/stock-prognose.component.js +52 -0
  91. package/esm2015/lib/components/stock/components/stock-tab/stock-tab.component.js +41 -0
  92. package/esm2015/lib/components/stock/localization/translation.js +63 -0
  93. package/esm2015/lib/components/stock/stock-history-tabs/stock-history-tabs.component.js +33 -0
  94. package/esm2015/lib/components/stock/stock-information/stock-information.component.js +48 -0
  95. package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +457 -0
  96. package/esm2015/lib/components/stock/stock-tabs/stock-tabs.component.js +241 -0
  97. package/esm2015/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.js +2 -0
  98. package/esm2015/lib/components/stock/stock-transfer/stock-change-amount.component.js +72 -0
  99. package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +149 -0
  100. package/esm2015/lib/components/stock/stock.component.js +193 -0
  101. package/esm2015/lib/components/stock/stock.module.js +80 -0
  102. package/esm2015/lib/components/stock-statusbar/stock-statusbar.component.js +23 -0
  103. package/esm2015/lib/components/stock-statusbar/stock-statusbar.module.js +19 -0
  104. package/esm2015/lib/components/tab-bar/tab-bar.component.js +88 -0
  105. package/esm2015/lib/components/tab-bar/tab-bar.module.js +21 -0
  106. package/esm2015/lib/components/tab-bar/tab.interface.js +2 -0
  107. package/esm2015/lib/components/tile-renderer/tile-render.component.js +80 -0
  108. package/esm2015/lib/components/tile-renderer/tile-render.module.js +26 -0
  109. package/esm2015/lib/decorator/input-boolean.decorator.js +34 -0
  110. package/esm2015/lib/enum/calendar-view.enum.js +9 -0
  111. package/esm2015/lib/enum/document-email-report.enum.js +18 -0
  112. package/esm2015/lib/enum/domain-multiple-name.enum.js +13 -0
  113. package/esm2015/lib/enum/file-type.js +14 -0
  114. package/esm2015/lib/enum/files-upload-config-objects.js +3 -0
  115. package/esm2015/lib/enum/gauge-color.enum.js +10 -0
  116. package/esm2015/lib/enum/icon.enum.js +44 -0
  117. package/esm2015/lib/enum/internal-param.enum.js +38 -0
  118. package/esm2015/lib/enum/keyboard-code.enum.js +32 -0
  119. package/esm2015/lib/enum/language-code.enum.js +8 -0
  120. package/esm2015/lib/enum/month.enum.js +17 -0
  121. package/esm2015/lib/enum/read-write-access-config-names.enum.js +2 -0
  122. package/esm2015/lib/enum/table-name.enum.js +86 -0
  123. package/esm2015/lib/enum/tag-category.enum.js +22 -0
  124. package/esm2015/lib/enum/tags-component-config-names.js +2 -0
  125. package/esm2015/lib/enum/thumb-three-way-state.js +19 -0
  126. package/esm2015/lib/enum/tile-size-type.js +7 -0
  127. package/esm2015/lib/enum/time-period.enum.js +11 -0
  128. package/esm2015/lib/event/co-drag-event.js +2 -0
  129. package/esm2015/lib/event/co-drop-event.js +2 -0
  130. package/esm2015/lib/interface/key-value-pair.js +2 -0
  131. package/esm2015/lib/interface/operation-callback-simple-function.js +4 -0
  132. package/esm2015/lib/localization/localization.module.js +19 -0
  133. package/esm2015/lib/localization/localize.pipe.js +26 -0
  134. package/esm2015/lib/localization/localize.service.js +30 -0
  135. package/esm2015/lib/localization/translation.js +3 -0
  136. package/esm2015/lib/model/agenda-event-per-day.model.js +6 -0
  137. package/esm2015/lib/model/agenda-event.model.js +8 -0
  138. package/esm2015/lib/model/agenda-null-objects.js +11 -0
  139. package/esm2015/lib/model/constant/all-months.js +17 -0
  140. package/esm2015/lib/model/date-range.js +5 -0
  141. package/esm2015/lib/model/day.model.js +7 -0
  142. package/esm2015/lib/model/icon-svg.js +43 -0
  143. package/esm2015/lib/model/month.model.js +11 -0
  144. package/esm2015/lib/model/send-method.js +8 -0
  145. package/esm2015/lib/model/settings.js +4 -0
  146. package/esm2015/lib/model/tag-tree-item.bo.js +16 -0
  147. package/esm2015/lib/model/time-window.bo.js +26 -0
  148. package/esm2015/lib/model/tree-object.js +15 -0
  149. package/esm2015/lib/model/week.model.js +6 -0
  150. package/esm2015/lib/model/weekday.model.js +10 -0
  151. package/esm2015/lib/pipe/array-number.pipe.js +15 -0
  152. package/esm2015/lib/pipe/file-type-image.pipe.js +51 -0
  153. package/esm2015/lib/pipe/master-pipes.js +9 -0
  154. package/esm2015/lib/pipe/ucfirst.pipe.js +16 -0
  155. package/esm2015/lib/service/dictionary.service.js +76 -0
  156. package/esm2015/lib/service/drag-drop.service.js +365 -0
  157. package/esm2015/lib/service/icon-cache.service.js +51 -0
  158. package/esm2015/lib/service/options.service.js +48 -0
  159. package/esm2015/lib/service/shared-connector.service.js +433 -0
  160. package/esm2015/lib/service/shared.service.js +60 -0
  161. package/esm2015/lib/service/stock.service.js +110 -0
  162. package/esm2015/lib/utils/array-utils.js +202 -0
  163. package/esm2015/lib/utils/calendar.utils.js +68 -0
  164. package/esm2015/lib/utils/check-precision-and-scale-result.js +2 -0
  165. package/esm2015/lib/utils/check-within-stepped-bounds-result.js +2 -0
  166. package/esm2015/lib/utils/co-document-shared-field-logic.js +50 -0
  167. package/esm2015/lib/utils/date-utils.js +264 -0
  168. package/esm2015/lib/utils/enum-utils.js +128 -0
  169. package/esm2015/lib/utils/function/not-nill.function.js +5 -0
  170. package/esm2015/lib/utils/is-nill.function.js +5 -0
  171. package/esm2015/lib/utils/map-utils.js +41 -0
  172. package/esm2015/lib/utils/number-utils.js +390 -0
  173. package/esm2015/lib/utils/object-utils.js +278 -0
  174. package/esm2015/lib/utils/ref-code-utils.js +49 -0
  175. package/esm2015/lib/utils/string-utils.js +93 -0
  176. package/esm2015/public-api.js +31 -0
  177. package/fesm2015/colijnit-sharedcomponents.js +10555 -0
  178. package/fesm2015/colijnit-sharedcomponents.js.map +1 -0
  179. package/lib/assets/dictionary/text.properties.d.ts +3 -0
  180. package/lib/businessobject/build-images-and-documentation-result.d.ts +5 -0
  181. package/lib/businessobject/co-document-right.bo.d.ts +6 -0
  182. package/lib/businessobject/drag-drop-container-element.d.ts +6 -0
  183. package/lib/businessobject/drag-drop-container.d.ts +6 -0
  184. package/lib/components/access/read-write-access.scss +25 -0
  185. package/lib/components/access/style/_layout.scss +23 -0
  186. package/lib/components/access/style/_theme.scss +4 -0
  187. package/lib/components/activity-list/activity-list.component.d.ts +33 -0
  188. package/lib/components/activity-list/activity-list.module.d.ts +2 -0
  189. package/lib/components/activity-list/style/_layout.scss +68 -0
  190. package/lib/components/activity-list/style/_theme.scss +4 -0
  191. package/lib/components/app-file-dropzone/app-file-dropzone.component.d.ts +14 -0
  192. package/lib/components/app-file-dropzone/app-file-dropzone.module.d.ts +2 -0
  193. package/lib/components/app-file-dropzone/style/_layout.scss +61 -0
  194. package/lib/components/app-file-dropzone/style/_theme.scss +4 -0
  195. package/lib/components/date-planning/component/agenda/agenda-base-view.component.d.ts +21 -0
  196. package/lib/components/date-planning/component/agenda/agenda-day-view.component.d.ts +7 -0
  197. package/lib/components/date-planning/component/agenda/agenda-event.component.d.ts +18 -0
  198. package/lib/components/date-planning/component/agenda/agenda-events.component.d.ts +13 -0
  199. package/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.d.ts +18 -0
  200. package/lib/components/date-planning/component/agenda/agenda-header.component.d.ts +48 -0
  201. package/lib/components/date-planning/component/agenda/agenda-hour-cell.component.d.ts +9 -0
  202. package/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.d.ts +8 -0
  203. package/lib/components/date-planning/component/agenda/agenda-hour-view.component.d.ts +7 -0
  204. package/lib/components/date-planning/component/agenda/agenda-month-view.component.d.ts +10 -0
  205. package/lib/components/date-planning/component/agenda/agenda-select-event.component.d.ts +12 -0
  206. package/lib/components/date-planning/component/agenda/agenda-view.component.d.ts +12 -0
  207. package/lib/components/date-planning/component/agenda/agenda-week-select-view.component.d.ts +10 -0
  208. package/lib/components/date-planning/component/agenda/agenda-week-view.component.d.ts +9 -0
  209. package/lib/components/date-planning/component/agenda/view-select.component.d.ts +11 -0
  210. package/lib/components/date-planning/component/calendar/calendar-all-months.component.d.ts +9 -0
  211. package/lib/components/date-planning/component/calendar/calendar-all-years.component.d.ts +9 -0
  212. package/lib/components/date-planning/component/calendar/calendar-header.component.d.ts +23 -0
  213. package/lib/components/date-planning/component/calendar/calendar-view.component.d.ts +31 -0
  214. package/lib/components/date-planning/component/calendar/calendar.component.d.ts +10 -0
  215. package/lib/components/date-planning/date-planning.component.d.ts +28 -0
  216. package/lib/components/date-planning/date-planning.module.d.ts +2 -0
  217. package/lib/components/docsign/component/signature/signature.component.d.ts +16 -0
  218. package/lib/components/docsign/component/signatures/signatures.component.d.ts +12 -0
  219. package/lib/components/docsign/docsign.component.d.ts +94 -0
  220. package/lib/components/docsign/docsign.module.d.ts +2 -0
  221. package/lib/components/docsign/style/_material-definition.scss +12 -0
  222. package/lib/components/file-upload/file-upload.component.d.ts +42 -0
  223. package/lib/components/file-upload/file-upload.module.d.ts +2 -0
  224. package/lib/components/file-upload/style/_layout.scss +59 -0
  225. package/lib/components/file-upload/style/_material-definition.scss +2 -0
  226. package/lib/components/file-upload/style/_theme.scss +4 -0
  227. package/lib/components/file-upload/style/material.scss +4 -0
  228. package/lib/components/file-upload-popup/file-upload-popup.component.d.ts +75 -0
  229. package/lib/components/file-upload-popup/file-upload-popup.module.d.ts +2 -0
  230. package/lib/components/file-upload-popup/style/_layout.scss +48 -0
  231. package/lib/components/file-upload-popup/style/_material-definition.scss +2 -0
  232. package/lib/components/file-upload-popup/style/_theme.scss +5 -0
  233. package/lib/components/files-upload/components/base-file-upload.component.d.ts +98 -0
  234. package/lib/components/files-upload/components/drag-drop-container.component.d.ts +34 -0
  235. package/lib/components/files-upload/files-upload.component.d.ts +32 -0
  236. package/lib/components/files-upload/files-upload.module.d.ts +2 -0
  237. package/lib/components/files-upload/style/_layout.scss +49 -0
  238. package/lib/components/files-upload/style/_theme.scss +5 -0
  239. package/lib/components/files-upload/style/material.scss +4 -0
  240. package/lib/components/image-display/image-display.component.d.ts +14 -0
  241. package/lib/components/image-display/image-display.module.d.ts +2 -0
  242. package/lib/components/image-display/style/_layout.scss +56 -0
  243. package/lib/components/image-display/style/_material-definition.scss +4 -0
  244. package/lib/components/image-display/style/_theme.scss +6 -0
  245. package/lib/components/key-pad/key-pad.component.d.ts +38 -0
  246. package/lib/components/key-pad/key-pad.module.d.ts +2 -0
  247. package/lib/components/layout-switcher/layout-switcher.component.d.ts +16 -0
  248. package/lib/components/layout-switcher/layout-switcher.module.d.ts +2 -0
  249. package/lib/components/linear-gauge/co-linear-gauge.component.d.ts +11 -0
  250. package/lib/components/linear-gauge/co-linear-gauge.module.d.ts +2 -0
  251. package/lib/components/multi-property-toggler/multiple-property-toggler.component.d.ts +27 -0
  252. package/lib/components/multi-property-toggler/multiple-property-toggler.module.d.ts +2 -0
  253. package/lib/components/multi-property-toggler/style/_layout.scss +24 -0
  254. package/lib/components/multi-property-toggler/style/_theme.scss +4 -0
  255. package/lib/components/multi-property-toggler/style/material.scss +4 -0
  256. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.d.ts +19 -0
  257. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.d.ts +2 -0
  258. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.d.ts +19 -0
  259. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.d.ts +2 -0
  260. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.d.ts +14 -0
  261. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.d.ts +2 -0
  262. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.d.ts +8 -0
  263. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.d.ts +2 -0
  264. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.d.ts +13 -0
  265. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.d.ts +2 -0
  266. package/lib/components/send-method-dialog/components/signature-button/signature-button.component.d.ts +12 -0
  267. package/lib/components/send-method-dialog/components/signature-button/signature-button.module.d.ts +2 -0
  268. package/lib/components/send-method-dialog/model/email-address-viewmodel.d.ts +5 -0
  269. package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +71 -0
  270. package/lib/components/send-method-dialog/send-method-dialog.module.d.ts +2 -0
  271. package/lib/components/send-method-dialog/send-method-params.interface.d.ts +13 -0
  272. package/lib/components/send-method-dialog/service/send-method.service.d.ts +23 -0
  273. package/lib/components/simple-tags/simple-tags.component.d.ts +31 -0
  274. package/lib/components/simple-tags/simple-tags.module.d.ts +2 -0
  275. package/lib/components/simple-tags/style/material.scss +4 -0
  276. package/lib/components/statusbar/statusbar-popup.component.d.ts +21 -0
  277. package/lib/components/statusbar/statusbar.component.d.ts +26 -0
  278. package/lib/components/statusbar/statusbar.module.d.ts +2 -0
  279. package/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.d.ts +9 -0
  280. package/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.d.ts +9 -0
  281. package/lib/components/stock/components/order-stock-history/order-stock-history.component.d.ts +9 -0
  282. package/lib/components/stock/components/order-stock-tab/order-stock-tab.component.d.ts +11 -0
  283. package/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.d.ts +9 -0
  284. package/lib/components/stock/components/order-tab/order-tab.component.d.ts +20 -0
  285. package/lib/components/stock/components/stock-history/stock-history.component.d.ts +13 -0
  286. package/lib/components/stock/components/stock-location/stock-location.component.d.ts +50 -0
  287. package/lib/components/stock/components/stock-prognose/stock-prognose.component.d.ts +11 -0
  288. package/lib/components/stock/components/stock-tab/stock-tab.component.d.ts +9 -0
  289. package/lib/components/stock/localization/translation.d.ts +60 -0
  290. package/lib/components/stock/stock-history-tabs/stock-history-tabs.component.d.ts +7 -0
  291. package/lib/components/stock/stock-information/stock-information.component.d.ts +8 -0
  292. package/lib/components/stock/stock-information-grid/stock-information-grid.component.d.ts +75 -0
  293. package/lib/components/stock/stock-tabs/stock-tabs.component.d.ts +56 -0
  294. package/{projects/sharedcomponents/src/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.ts → lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.d.ts} +2 -2
  295. package/lib/components/stock/stock-transfer/stock-change-amount.component.d.ts +18 -0
  296. package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +42 -0
  297. package/lib/components/stock/stock.component.d.ts +57 -0
  298. package/lib/components/stock/stock.module.d.ts +2 -0
  299. package/lib/components/stock/style/material.scss +4 -0
  300. package/lib/components/stock-statusbar/stock-statusbar.component.d.ts +4 -0
  301. package/lib/components/stock-statusbar/stock-statusbar.module.d.ts +2 -0
  302. package/lib/components/stock-statusbar/style/_material-definition.scss +0 -0
  303. package/lib/components/stock-statusbar/style/_theme.scss +0 -0
  304. package/lib/components/stock-statusbar/style/material.scss +4 -0
  305. package/lib/components/tab-bar/style/_theme.scss +0 -0
  306. package/lib/components/tab-bar/style/material.scss +4 -0
  307. package/lib/components/tab-bar/tab-bar.component.d.ts +21 -0
  308. package/lib/components/tab-bar/tab-bar.module.d.ts +2 -0
  309. package/lib/components/tab-bar/tab.interface.d.ts +5 -0
  310. package/lib/components/tags/component/tag-join-label/style/material.scss +3 -0
  311. package/lib/components/tile-renderer/style/_layout.scss +90 -0
  312. package/lib/components/tile-renderer/style/_material-definition.scss +0 -0
  313. package/lib/components/tile-renderer/style/_theme.scss +4 -0
  314. package/lib/components/tile-renderer/style/material.scss +4 -0
  315. package/lib/components/tile-renderer/tile-render.component.d.ts +31 -0
  316. package/lib/components/tile-renderer/tile-render.module.d.ts +2 -0
  317. package/lib/decorator/input-boolean.decorator.d.ts +8 -0
  318. package/{projects/sharedcomponents/src/lib/enum/calendar-view.enum.ts → lib/enum/calendar-view.enum.d.ts} +2 -3
  319. package/lib/enum/document-email-report.enum.d.ts +15 -0
  320. package/lib/enum/domain-multiple-name.enum.d.ts +10 -0
  321. package/lib/enum/file-type.d.ts +7 -0
  322. package/lib/enum/files-upload-config-objects.d.ts +22 -0
  323. package/lib/enum/gauge-color.enum.d.ts +8 -0
  324. package/{projects/sharedcomponents/src/lib/enum/icon.enum.ts → lib/enum/icon.enum.d.ts} +8 -3
  325. package/lib/enum/internal-param.enum.d.ts +34 -0
  326. package/lib/enum/keyboard-code.enum.d.ts +30 -0
  327. package/lib/enum/language-code.enum.d.ts +6 -0
  328. package/{projects/sharedcomponents/src/lib/enum/month.enum.ts → lib/enum/month.enum.d.ts} +1 -2
  329. package/lib/enum/read-write-access-config-names.enum.d.ts +4 -0
  330. package/lib/enum/table-name.enum.d.ts +84 -0
  331. package/{projects/sharedcomponents/src/lib/enum/tag-category.enum.ts → lib/enum/tag-category.enum.d.ts} +1 -2
  332. package/lib/enum/tags-component-config-names.d.ts +4 -0
  333. package/lib/enum/thumb-three-way-state.d.ts +6 -0
  334. package/lib/enum/tile-size-type.d.ts +4 -0
  335. package/{projects/sharedcomponents/src/lib/enum/time-period.enum.ts → lib/enum/time-period.enum.d.ts} +1 -2
  336. package/lib/event/co-drag-event.d.ts +5 -0
  337. package/lib/event/co-drop-event.d.ts +8 -0
  338. package/lib/interface/key-value-pair.d.ts +4 -0
  339. package/lib/interface/operation-callback-simple-function.d.ts +4 -0
  340. package/lib/localization/localization.module.d.ts +2 -0
  341. package/lib/localization/localize.pipe.d.ts +7 -0
  342. package/lib/localization/localize.service.d.ts +7 -0
  343. package/lib/localization/translation.d.ts +2 -0
  344. package/lib/model/agenda-event-per-day.model.d.ts +5 -0
  345. package/lib/model/agenda-event.model.d.ts +17 -0
  346. package/lib/model/agenda-null-objects.d.ts +10 -0
  347. package/lib/model/constant/all-months.d.ts +2 -0
  348. package/lib/model/date-range.d.ts +7 -0
  349. package/lib/model/day.model.d.ts +8 -0
  350. package/lib/model/icon-svg.d.ts +4 -0
  351. package/lib/model/month.model.d.ts +5 -0
  352. package/lib/model/send-method.d.ts +7 -0
  353. package/lib/model/settings.d.ts +3 -0
  354. package/lib/model/tag-tree-item.bo.d.ts +18 -0
  355. package/lib/model/time-window.bo.d.ts +13 -0
  356. package/lib/model/tree-object.d.ts +8 -0
  357. package/lib/model/week.model.d.ts +4 -0
  358. package/lib/model/weekday.model.d.ts +16 -0
  359. package/lib/pipe/array-number.pipe.d.ts +4 -0
  360. package/lib/pipe/file-type-image.pipe.d.ts +12 -0
  361. package/lib/pipe/master-pipes.d.ts +1 -0
  362. package/lib/pipe/ucfirst.pipe.d.ts +4 -0
  363. package/lib/service/dictionary.service.d.ts +21 -0
  364. package/lib/service/drag-drop.service.d.ts +86 -0
  365. package/lib/service/icon-cache.service.d.ts +18 -0
  366. package/lib/service/options.service.d.ts +13 -0
  367. package/lib/service/shared-connector.service.d.ts +55 -0
  368. package/lib/service/shared.service.d.ts +18 -0
  369. package/lib/service/stock.service.d.ts +41 -0
  370. package/{projects/sharedcomponents/src/lib → lib}/style/_variables.scss +1 -1
  371. package/lib/utils/array-utils.d.ts +63 -0
  372. package/lib/utils/calendar.utils.d.ts +10 -0
  373. package/{projects/sharedcomponents/src/lib/utils/check-precision-and-scale-result.ts → lib/utils/check-precision-and-scale-result.d.ts} +0 -1
  374. package/lib/utils/co-document-shared-field-logic.d.ts +7 -0
  375. package/lib/utils/date-utils.d.ts +44 -0
  376. package/lib/utils/enum-utils.d.ts +31 -0
  377. package/lib/utils/function/not-nill.function.d.ts +1 -0
  378. package/lib/utils/is-nill.function.d.ts +1 -0
  379. package/lib/utils/map-utils.d.ts +16 -0
  380. package/lib/utils/number-utils.d.ts +125 -0
  381. package/lib/utils/object-utils.d.ts +40 -0
  382. package/lib/utils/ref-code-utils.d.ts +10 -0
  383. package/lib/utils/string-utils.d.ts +38 -0
  384. package/package.json +31 -68
  385. package/{projects/sharedcomponents/src/public-api.ts → public-api.d.ts} +4 -4
  386. package/.browserslistrc +0 -16
  387. package/.editorconfig +0 -16
  388. package/.vscode/extensions.json +0 -4
  389. package/.vscode/launch.json +0 -20
  390. package/.vscode/tasks.json +0 -42
  391. package/Sharedcomponents.iml +0 -11
  392. package/angular.json +0 -177
  393. package/custom-login-bundle.webpack.config.js +0 -3
  394. package/karma.conf.js +0 -44
  395. package/move-assets.js +0 -14
  396. package/projects/sharedcomponents/.browserslistrc +0 -16
  397. package/projects/sharedcomponents/README.md +0 -24
  398. package/projects/sharedcomponents/karma.conf.js +0 -44
  399. package/projects/sharedcomponents/ng-package.json +0 -17
  400. package/projects/sharedcomponents/package.json +0 -23
  401. package/projects/sharedcomponents/src/lib/assets/dictionary/text.properties.ts +0 -8
  402. package/projects/sharedcomponents/src/lib/assets/icons/account.svg +0 -1
  403. package/projects/sharedcomponents/src/lib/assets/icons/angle_left_solid.svg +0 -1
  404. package/projects/sharedcomponents/src/lib/assets/icons/angle_right_solid.svg +0 -1
  405. package/projects/sharedcomponents/src/lib/assets/icons/arrow_fat_right.svg +0 -1
  406. package/projects/sharedcomponents/src/lib/assets/icons/arrow_point_left.svg +0 -8
  407. package/projects/sharedcomponents/src/lib/assets/icons/arrow_point_right.svg +0 -4
  408. package/projects/sharedcomponents/src/lib/assets/icons/at_solid.svg +0 -1
  409. package/projects/sharedcomponents/src/lib/assets/icons/bring_forward_regular.svg +0 -1
  410. package/projects/sharedcomponents/src/lib/assets/icons/check_duotone.svg +0 -1
  411. package/projects/sharedcomponents/src/lib/assets/icons/check_round.svg +0 -1
  412. package/projects/sharedcomponents/src/lib/assets/icons/cross_skinny.svg +0 -1
  413. package/projects/sharedcomponents/src/lib/assets/icons/delete_left_regular.svg +0 -1
  414. package/projects/sharedcomponents/src/lib/assets/icons/delivery_truck.svg +0 -12
  415. package/projects/sharedcomponents/src/lib/assets/icons/email.svg +0 -5
  416. package/projects/sharedcomponents/src/lib/assets/icons/envelope_regular.svg +0 -1
  417. package/projects/sharedcomponents/src/lib/assets/icons/eye_regular.svg +0 -1
  418. package/projects/sharedcomponents/src/lib/assets/icons/file_export_regular.svg +0 -1
  419. package/projects/sharedcomponents/src/lib/assets/icons/file_export_solid.svg +0 -1
  420. package/projects/sharedcomponents/src/lib/assets/icons/file_pdf_regular.svg +0 -1
  421. package/projects/sharedcomponents/src/lib/assets/icons/file_pdf_solid.svg +0 -1
  422. package/projects/sharedcomponents/src/lib/assets/icons/file_signature_regular.svg +0 -1
  423. package/projects/sharedcomponents/src/lib/assets/icons/house_blank_regular.svg +0 -1
  424. package/projects/sharedcomponents/src/lib/assets/icons/lock.svg +0 -1
  425. package/projects/sharedcomponents/src/lib/assets/icons/message_sms_regular.svg +0 -1
  426. package/projects/sharedcomponents/src/lib/assets/icons/message_sms_solid.svg +0 -1
  427. package/projects/sharedcomponents/src/lib/assets/icons/pdf.svg +0 -15
  428. package/projects/sharedcomponents/src/lib/assets/icons/print.svg +0 -10
  429. package/projects/sharedcomponents/src/lib/assets/icons/print_regular.svg +0 -1
  430. package/projects/sharedcomponents/src/lib/assets/icons/print_solid.svg +0 -1
  431. package/projects/sharedcomponents/src/lib/assets/icons/signature_field.svg +0 -9
  432. package/projects/sharedcomponents/src/lib/assets/icons/tag_regular.svg +0 -1
  433. package/projects/sharedcomponents/src/lib/assets/icons/x_solid.svg +0 -1
  434. package/projects/sharedcomponents/src/lib/assets/icons/xml.svg +0 -1
  435. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-base-view.component.ts +0 -68
  436. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-day-view.component.ts +0 -35
  437. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-event.component.ts +0 -73
  438. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-events.component.ts +0 -53
  439. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.ts +0 -81
  440. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-header.component.ts +0 -275
  441. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-hour-cell.component.ts +0 -38
  442. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.ts +0 -50
  443. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-hour-view.component.ts +0 -46
  444. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-month-view.component.ts +0 -65
  445. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-select-event.component.ts +0 -39
  446. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-view.component.ts +0 -41
  447. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-week-select-view.component.ts +0 -63
  448. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/agenda-week-view.component.ts +0 -50
  449. package/projects/sharedcomponents/src/lib/components/date-planning/component/agenda/view-select.component.ts +0 -43
  450. package/projects/sharedcomponents/src/lib/components/date-planning/component/calendar/calendar-all-months.component.ts +0 -37
  451. package/projects/sharedcomponents/src/lib/components/date-planning/component/calendar/calendar-all-years.component.ts +0 -52
  452. package/projects/sharedcomponents/src/lib/components/date-planning/component/calendar/calendar-header.component.ts +0 -123
  453. package/projects/sharedcomponents/src/lib/components/date-planning/component/calendar/calendar-view.component.ts +0 -200
  454. package/projects/sharedcomponents/src/lib/components/date-planning/component/calendar/calendar.component.ts +0 -35
  455. package/projects/sharedcomponents/src/lib/components/date-planning/date-planning.component.ts +0 -141
  456. package/projects/sharedcomponents/src/lib/components/date-planning/date-planning.module.ts +0 -61
  457. package/projects/sharedcomponents/src/lib/components/docsign/component/signature/signature.component.ts +0 -82
  458. package/projects/sharedcomponents/src/lib/components/docsign/component/signatures/signatures.component.ts +0 -50
  459. package/projects/sharedcomponents/src/lib/components/docsign/docsign.component.ts +0 -270
  460. package/projects/sharedcomponents/src/lib/components/docsign/docsign.module.ts +0 -22
  461. package/projects/sharedcomponents/src/lib/components/key-pad/key-pad.component.ts +0 -216
  462. package/projects/sharedcomponents/src/lib/components/key-pad/key-pad.module.ts +0 -20
  463. package/projects/sharedcomponents/src/lib/components/layout-switcher/layout-switcher.component.ts +0 -98
  464. package/projects/sharedcomponents/src/lib/components/layout-switcher/layout-switcher.module.ts +0 -21
  465. package/projects/sharedcomponents/src/lib/components/linear-gauge/co-linear-gauge.component.ts +0 -57
  466. package/projects/sharedcomponents/src/lib/components/linear-gauge/co-linear-gauge.module.ts +0 -17
  467. package/projects/sharedcomponents/src/lib/components/login/components/login-base.component.ts +0 -98
  468. package/projects/sharedcomponents/src/lib/components/login/components/login-change-password.component.ts +0 -194
  469. package/projects/sharedcomponents/src/lib/components/login/components/login-mfa-code-entry.component.ts +0 -41
  470. package/projects/sharedcomponents/src/lib/components/login/components/login-mfa-code-setup.component.ts +0 -44
  471. package/projects/sharedcomponents/src/lib/components/login/components/login-username-password.component.ts +0 -167
  472. package/projects/sharedcomponents/src/lib/components/login/localization/login-translation.ts +0 -15
  473. package/projects/sharedcomponents/src/lib/components/login/login.component.ts +0 -137
  474. package/projects/sharedcomponents/src/lib/components/login/login.module.ts +0 -53
  475. package/projects/sharedcomponents/src/lib/components/login/service/login-adapter.service.ts +0 -58
  476. package/projects/sharedcomponents/src/lib/components/login/service/login.service.ts +0 -50
  477. package/projects/sharedcomponents/src/lib/components/screen-config-generator/enums/field-type.enum.ts +0 -9
  478. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/Config.ts +0 -6
  479. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/Field.ts +0 -8
  480. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/Header.ts +0 -8
  481. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/Module.ts +0 -6
  482. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/Rubric.ts +0 -10
  483. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/ScreenConfig.ts +0 -9
  484. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/SubCat.ts +0 -9
  485. package/projects/sharedcomponents/src/lib/components/screen-config-generator/models/SubRubric.ts +0 -8
  486. package/projects/sharedcomponents/src/lib/components/screen-config-generator/screen-config-generator.component.ts +0 -539
  487. package/projects/sharedcomponents/src/lib/components/screen-config-generator/screen-config-generator.module.ts +0 -21
  488. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.ts +0 -91
  489. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.ts +0 -19
  490. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.ts +0 -84
  491. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.ts +0 -19
  492. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.ts +0 -63
  493. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.ts +0 -24
  494. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.ts +0 -38
  495. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.ts +0 -21
  496. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.ts +0 -60
  497. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.ts +0 -26
  498. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/signature-button/signature-button.component.ts +0 -42
  499. package/projects/sharedcomponents/src/lib/components/send-method-dialog/components/signature-button/signature-button.module.ts +0 -19
  500. package/projects/sharedcomponents/src/lib/components/send-method-dialog/model/email-address-viewmodel.ts +0 -9
  501. package/projects/sharedcomponents/src/lib/components/send-method-dialog/send-method-dialog.component.ts +0 -325
  502. package/projects/sharedcomponents/src/lib/components/send-method-dialog/send-method-dialog.module.ts +0 -32
  503. package/projects/sharedcomponents/src/lib/components/send-method-dialog/send-method-params.interface.ts +0 -13
  504. package/projects/sharedcomponents/src/lib/components/send-method-dialog/service/send-method.service.ts +0 -63
  505. package/projects/sharedcomponents/src/lib/components/simple-tags/simple-tags.component.ts +0 -243
  506. package/projects/sharedcomponents/src/lib/components/simple-tags/simple-tags.module.ts +0 -24
  507. package/projects/sharedcomponents/src/lib/components/statusbar/statusbar-popup.component.ts +0 -100
  508. package/projects/sharedcomponents/src/lib/components/statusbar/statusbar.component.ts +0 -107
  509. package/projects/sharedcomponents/src/lib/components/statusbar/statusbar.module.ts +0 -25
  510. package/projects/sharedcomponents/src/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.ts +0 -45
  511. package/projects/sharedcomponents/src/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.ts +0 -45
  512. package/projects/sharedcomponents/src/lib/components/stock/components/order-stock-history/order-stock-history.component.ts +0 -45
  513. package/projects/sharedcomponents/src/lib/components/stock/components/order-stock-tab/order-stock-tab.component.ts +0 -43
  514. package/projects/sharedcomponents/src/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.ts +0 -45
  515. package/projects/sharedcomponents/src/lib/components/stock/components/order-tab/order-tab.component.ts +0 -71
  516. package/projects/sharedcomponents/src/lib/components/stock/components/stock-history/stock-history.component.ts +0 -52
  517. package/projects/sharedcomponents/src/lib/components/stock/components/stock-location/stock-location.component.ts +0 -276
  518. package/projects/sharedcomponents/src/lib/components/stock/components/stock-prognose/stock-prognose.component.ts +0 -49
  519. package/projects/sharedcomponents/src/lib/components/stock/components/stock-tab/stock-tab.component.ts +0 -40
  520. package/projects/sharedcomponents/src/lib/components/stock/localization/translation.ts +0 -60
  521. package/projects/sharedcomponents/src/lib/components/stock/stock-history-tabs/stock-history-tabs.component.ts +0 -32
  522. package/projects/sharedcomponents/src/lib/components/stock/stock-information/stock-information.component.ts +0 -56
  523. package/projects/sharedcomponents/src/lib/components/stock/stock-information-grid/stock-information-grid.component.ts +0 -500
  524. package/projects/sharedcomponents/src/lib/components/stock/stock-tabs/stock-tabs.component.ts +0 -276
  525. package/projects/sharedcomponents/src/lib/components/stock/stock-transfer/stock-change-amount.component.ts +0 -77
  526. package/projects/sharedcomponents/src/lib/components/stock/stock-transfer/stock-transfer.component.ts +0 -178
  527. package/projects/sharedcomponents/src/lib/components/stock/stock.component.ts +0 -228
  528. package/projects/sharedcomponents/src/lib/components/stock/stock.module.ts +0 -97
  529. package/projects/sharedcomponents/src/lib/components/stock-statusbar/stock-statusbar.component.ts +0 -23
  530. package/projects/sharedcomponents/src/lib/components/stock-statusbar/stock-statusbar.module.ts +0 -17
  531. package/projects/sharedcomponents/src/lib/components/tab-bar/tab-bar.component.ts +0 -106
  532. package/projects/sharedcomponents/src/lib/components/tab-bar/tab-bar.module.ts +0 -20
  533. package/projects/sharedcomponents/src/lib/components/tab-bar/tab.interface.ts +0 -5
  534. package/projects/sharedcomponents/src/lib/components/tags/component/tag-join-label/tag-join-label.component.ts +0 -61
  535. package/projects/sharedcomponents/src/lib/components/tags/component/tag-label/tag-label.component.ts +0 -47
  536. package/projects/sharedcomponents/src/lib/components/tags/component/treeview/model/tree-view-node-item.ts +0 -132
  537. package/projects/sharedcomponents/src/lib/components/tags/component/treeview/treeview.component.ts +0 -258
  538. package/projects/sharedcomponents/src/lib/components/tags/tags.component.ts +0 -192
  539. package/projects/sharedcomponents/src/lib/components/tags/tags.module.ts +0 -27
  540. package/projects/sharedcomponents/src/lib/directives/click-outside.directive.ts +0 -25
  541. package/projects/sharedcomponents/src/lib/enum/gauge-color.enum.ts +0 -8
  542. package/projects/sharedcomponents/src/lib/enum/keyboard-code.enum.ts +0 -30
  543. package/projects/sharedcomponents/src/lib/enum/language-code.enum.ts +0 -6
  544. package/projects/sharedcomponents/src/lib/enum/login-component-extra-action-type.enum.ts +0 -4
  545. package/projects/sharedcomponents/src/lib/enum/login-component-page.type.enum.ts +0 -6
  546. package/projects/sharedcomponents/src/lib/enum/login-component-query-variables-name.enum.ts +0 -5
  547. package/projects/sharedcomponents/src/lib/enum/thumb-three-way-state.ts +0 -18
  548. package/projects/sharedcomponents/src/lib/localization/localization.module.ts +0 -17
  549. package/projects/sharedcomponents/src/lib/localization/localize.pipe.ts +0 -21
  550. package/projects/sharedcomponents/src/lib/localization/localize.service.ts +0 -28
  551. package/projects/sharedcomponents/src/lib/localization/translation.ts +0 -2
  552. package/projects/sharedcomponents/src/lib/model/agenda-event-per-day.model.ts +0 -6
  553. package/projects/sharedcomponents/src/lib/model/agenda-event.model.ts +0 -19
  554. package/projects/sharedcomponents/src/lib/model/agenda-null-objects.ts +0 -11
  555. package/projects/sharedcomponents/src/lib/model/constant/all-months.ts +0 -17
  556. package/projects/sharedcomponents/src/lib/model/date-range.ts +0 -10
  557. package/projects/sharedcomponents/src/lib/model/day.model.ts +0 -9
  558. package/projects/sharedcomponents/src/lib/model/icon-svg.ts +0 -37
  559. package/projects/sharedcomponents/src/lib/model/month.model.ts +0 -11
  560. package/projects/sharedcomponents/src/lib/model/send-method.ts +0 -13
  561. package/projects/sharedcomponents/src/lib/model/settings.ts +0 -5
  562. package/projects/sharedcomponents/src/lib/model/tag-tree-item.bo.ts +0 -28
  563. package/projects/sharedcomponents/src/lib/model/time-window.bo.ts +0 -21
  564. package/projects/sharedcomponents/src/lib/model/tree-object.ts +0 -13
  565. package/projects/sharedcomponents/src/lib/model/tree-view-default.model.ts +0 -107
  566. package/projects/sharedcomponents/src/lib/model/tree-view-node-default.model.ts +0 -196
  567. package/projects/sharedcomponents/src/lib/model/tree-view-node-item-options.model.ts +0 -12
  568. package/projects/sharedcomponents/src/lib/model/tree-view-node.model.ts +0 -150
  569. package/projects/sharedcomponents/src/lib/model/tree-view.model.ts +0 -57
  570. package/projects/sharedcomponents/src/lib/model/week.model.ts +0 -5
  571. package/projects/sharedcomponents/src/lib/model/weekday.model.ts +0 -17
  572. package/projects/sharedcomponents/src/lib/pipe/array-number.pipe.ts +0 -14
  573. package/projects/sharedcomponents/src/lib/pipe/master-pipes.ts +0 -7
  574. package/projects/sharedcomponents/src/lib/pipe/ucfirst.pipe.ts +0 -14
  575. package/projects/sharedcomponents/src/lib/service/dictionary.service.ts +0 -86
  576. package/projects/sharedcomponents/src/lib/service/icon-cache.service.ts +0 -51
  577. package/projects/sharedcomponents/src/lib/service/options.service.ts +0 -43
  578. package/projects/sharedcomponents/src/lib/service/shared-connector.service.ts +0 -401
  579. package/projects/sharedcomponents/src/lib/service/shared-initializer.service.ts +0 -29
  580. package/projects/sharedcomponents/src/lib/service/shared.service.ts +0 -49
  581. package/projects/sharedcomponents/src/lib/service/stock.service.ts +0 -124
  582. package/projects/sharedcomponents/src/lib/utils/array-utils.ts +0 -225
  583. package/projects/sharedcomponents/src/lib/utils/calendar.utils.ts +0 -75
  584. package/projects/sharedcomponents/src/lib/utils/css-utils.ts +0 -275
  585. package/projects/sharedcomponents/src/lib/utils/date-utils.ts +0 -302
  586. package/projects/sharedcomponents/src/lib/utils/function/not-nill.function.ts +0 -4
  587. package/projects/sharedcomponents/src/lib/utils/is-nill.function.ts +0 -4
  588. package/projects/sharedcomponents/src/lib/utils/map-utils.ts +0 -44
  589. package/projects/sharedcomponents/src/lib/utils/number-utils.ts +0 -439
  590. package/projects/sharedcomponents/src/lib/utils/object-utils.ts +0 -310
  591. package/projects/sharedcomponents/src/lib/utils/string-utils.ts +0 -67
  592. package/projects/sharedcomponents/src/lib/utils/tree-utils.ts +0 -63
  593. package/projects/sharedcomponents/src/test.ts +0 -27
  594. package/projects/sharedcomponents/tsconfig.lib.json +0 -18
  595. package/projects/sharedcomponents/tsconfig.lib.prod.json +0 -10
  596. package/projects/sharedcomponents/tsconfig.spec.json +0 -17
  597. package/script/create-bundle-version.js +0 -19
  598. package/script/merge-icons.js +0 -39
  599. package/src/app/app.component.scss +0 -31
  600. package/src/app/app.component.spec.ts +0 -31
  601. package/src/app/app.component.ts +0 -454
  602. package/src/app/app.module.ts +0 -69
  603. package/src/app/bundle/index.html +0 -14
  604. package/src/app/bundle/login/login-bundle.component.scss +0 -6
  605. package/src/app/bundle/login/login-bundle.component.ts +0 -111
  606. package/src/app/bundle/login/login-bundle.module.ts +0 -30
  607. package/src/app/bundle/main-login-bundle.ts +0 -11
  608. package/src/app/bundle/polyfills.ts +0 -63
  609. package/src/app/test-data.service.ts +0 -60
  610. package/src/environments/environment.bundle.prod.ts +0 -3
  611. package/src/environments/environment.prod.ts +0 -3
  612. package/src/environments/environment.ts +0 -16
  613. package/src/favicon.ico +0 -0
  614. package/src/index.html +0 -13
  615. package/src/main.ts +0 -12
  616. package/src/polyfills.ts +0 -53
  617. package/src/styles.scss +0 -54
  618. package/src/test.ts +0 -26
  619. package/tsconfig.app.json +0 -15
  620. package/tsconfig.bundle.json +0 -38
  621. package/tsconfig.json +0 -64
  622. package/tsconfig.spec.json +0 -18
  623. package/webpack.login.bundle.config.js +0 -32
  624. /package/{projects/sharedcomponents/src/lib/components/docsign → lib/components/access}/style/_material-definition.scss +0 -0
  625. /package/{projects/sharedcomponents/src/lib/components/stock-statusbar → lib/components/access}/style/material.scss +0 -0
  626. /package/{projects/sharedcomponents/src/lib/components/date-planning → lib/components/activity-list}/style/_material-definition.scss +0 -0
  627. /package/{projects/sharedcomponents/src/lib/components/key-pad → lib/components/activity-list}/style/material.scss +0 -0
  628. /package/{projects/sharedcomponents/src/lib/components/screen-config-generator → lib/components/app-file-dropzone}/style/_material-definition.scss +0 -0
  629. /package/{projects/sharedcomponents/src/lib/components/stock → lib/components/app-file-dropzone}/style/material.scss +0 -0
  630. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/agenda/style/_layout.scss +0 -0
  631. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/agenda/style/_material-definition.scss +0 -0
  632. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/agenda/style/_theme.scss +0 -0
  633. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/agenda/style/material.scss +0 -0
  634. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/calendar/style/_layout.scss +0 -0
  635. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/calendar/style/_material-definition.scss +0 -0
  636. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/calendar/style/_theme.scss +0 -0
  637. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/component/calendar/style/material.scss +0 -0
  638. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/style/_layout.scss +0 -0
  639. /package/{projects/sharedcomponents/src/lib/components/stock-statusbar → lib/components/date-planning}/style/_material-definition.scss +0 -0
  640. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/style/_theme.scss +0 -0
  641. /package/{projects/sharedcomponents/src/lib → lib}/components/date-planning/style/material.scss +0 -0
  642. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signature/style/_layout.scss +0 -0
  643. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signature/style/_material-definition.scss +0 -0
  644. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signature/style/_theme.scss +0 -0
  645. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signature/style/material.scss +0 -0
  646. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signatures/style/_layout.scss +0 -0
  647. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signatures/style/_material-definition.scss +0 -0
  648. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signatures/style/_theme.scss +0 -0
  649. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/component/signatures/style/material.scss +0 -0
  650. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/style/_layout.scss +0 -0
  651. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/style/_theme.scss +0 -0
  652. /package/{projects/sharedcomponents/src/lib → lib}/components/docsign/style/material.scss +0 -0
  653. /package/{projects/sharedcomponents/src/lib/components/tab-bar → lib/components/file-upload-popup}/style/material.scss +0 -0
  654. /package/{projects/sharedcomponents/src/lib/components/stock-statusbar/style/_theme.scss → lib/components/files-upload/style/_material-definition.scss} +0 -0
  655. /package/{projects/sharedcomponents/src/lib/components/tags/component → lib/components/image-display}/style/material.scss +0 -0
  656. /package/{projects/sharedcomponents/src/lib → lib}/components/key-pad/style/_layout.scss +0 -0
  657. /package/{projects/sharedcomponents/src/lib → lib}/components/key-pad/style/_material-definition.scss +0 -0
  658. /package/{projects/sharedcomponents/src/lib → lib}/components/key-pad/style/_theme.scss +0 -0
  659. /package/{projects/sharedcomponents/src/lib/components/login → lib/components/key-pad}/style/material.scss +0 -0
  660. /package/{projects/sharedcomponents/src/lib → lib}/components/layout-switcher/style/_layout.scss +0 -0
  661. /package/{projects/sharedcomponents/src/lib → lib}/components/layout-switcher/style/_material-definition.scss +0 -0
  662. /package/{projects/sharedcomponents/src/lib → lib}/components/layout-switcher/style/_theme.scss +0 -0
  663. /package/{projects/sharedcomponents/src/lib → lib}/components/layout-switcher/style/material.scss +0 -0
  664. /package/{projects/sharedcomponents/src/lib → lib}/components/linear-gauge/style/_layout.scss +0 -0
  665. /package/{projects/sharedcomponents/src/lib → lib}/components/linear-gauge/style/_material-definition.scss +0 -0
  666. /package/{projects/sharedcomponents/src/lib → lib}/components/linear-gauge/style/_theme.scss +0 -0
  667. /package/{projects/sharedcomponents/src/lib → lib}/components/linear-gauge/style/material.scss +0 -0
  668. /package/{projects/sharedcomponents/src/lib → lib}/components/login/style/_layout.scss +0 -0
  669. /package/{projects/sharedcomponents/src/lib → lib}/components/login/style/_material-definition.scss +0 -0
  670. /package/{projects/sharedcomponents/src/lib → lib}/components/login/style/_theme.scss +0 -0
  671. /package/{projects/sharedcomponents/src/lib/components/screen-config-generator → lib/components/login}/style/material.scss +0 -0
  672. /package/{projects/sharedcomponents/src/lib/components/tab-bar/style/_theme.scss → lib/components/multi-property-toggler/style/_material-definition.scss} +0 -0
  673. /package/{projects/sharedcomponents/src/lib → lib}/components/screen-config-generator/style/_layout.scss +0 -0
  674. /package/{src/assets/.gitkeep → lib/components/screen-config-generator/style/_material-definition.scss} +0 -0
  675. /package/{projects/sharedcomponents/src/lib → lib}/components/screen-config-generator/style/_theme.scss +0 -0
  676. /package/{projects/sharedcomponents/src/lib/components/simple-tags → lib/components/screen-config-generator}/style/material.scss +0 -0
  677. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/layout-selection/style/_layout.scss +0 -0
  678. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/layout-selection/style/_material-definition.scss +0 -0
  679. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/layout-selection/style/_theme.scss +0 -0
  680. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/layout-selection/style/material.scss +0 -0
  681. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/printer-selection/style/_layout.scss +0 -0
  682. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/printer-selection/style/_material-definition.scss +0 -0
  683. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/printer-selection/style/_theme.scss +0 -0
  684. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/printer-selection/style/material.scss +0 -0
  685. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-email/style/_layout.scss +0 -0
  686. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-email/style/_material-definition.scss +0 -0
  687. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-email/style/_theme.scss +0 -0
  688. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-email/style/material.scss +0 -0
  689. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-pdf/style/_layout.scss +0 -0
  690. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-pdf/style/_material-definition.scss +0 -0
  691. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-pdf/style/_theme.scss +0 -0
  692. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-pdf/style/material.scss +0 -0
  693. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-printer/style/_layout.scss +0 -0
  694. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-printer/style/_material-definition.scss +0 -0
  695. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-printer/style/_theme.scss +0 -0
  696. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/send-method-printer/style/material.scss +0 -0
  697. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/signature-button/style/_layout.scss +0 -0
  698. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/signature-button/style/_material-definition.scss +0 -0
  699. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/signature-button/style/_theme.scss +0 -0
  700. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/components/signature-button/style/material.scss +0 -0
  701. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/style/_layout.scss +0 -0
  702. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/style/_material-definition.scss +0 -0
  703. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/style/_theme.scss +0 -0
  704. /package/{projects/sharedcomponents/src/lib → lib}/components/send-method-dialog/style/material.scss +0 -0
  705. /package/{projects/sharedcomponents/src/lib → lib}/components/simple-tags/style/_layout.scss +0 -0
  706. /package/{projects/sharedcomponents/src/lib → lib}/components/simple-tags/style/_material-definition.scss +0 -0
  707. /package/{projects/sharedcomponents/src/lib → lib}/components/simple-tags/style/_theme.scss +0 -0
  708. /package/{projects/sharedcomponents/src/lib → lib}/components/statusbar/style/_layout.scss +0 -0
  709. /package/{projects/sharedcomponents/src/lib → lib}/components/statusbar/style/_material-definition.scss +0 -0
  710. /package/{projects/sharedcomponents/src/lib → lib}/components/statusbar/style/_theme.scss +0 -0
  711. /package/{projects/sharedcomponents/src/lib → lib}/components/statusbar/style/material.scss +0 -0
  712. /package/{projects/sharedcomponents/src/lib → lib}/components/stock/style/_layout.scss +0 -0
  713. /package/{projects/sharedcomponents/src/lib → lib}/components/stock/style/_material-definition.scss +0 -0
  714. /package/{projects/sharedcomponents/src/lib → lib}/components/stock/style/_theme.scss +0 -0
  715. /package/{projects/sharedcomponents/src/lib → lib}/components/stock-statusbar/style/_layout.scss +0 -0
  716. /package/{projects/sharedcomponents/src/lib → lib}/components/tab-bar/style/_layout.scss +0 -0
  717. /package/{projects/sharedcomponents/src/lib → lib}/components/tab-bar/style/_material-definition.scss +0 -0
  718. /package/{projects/sharedcomponents/src/lib → lib}/components/tags/component/style/_layout.scss +0 -0
  719. /package/{projects/sharedcomponents/src/lib → lib}/components/tags/component/style/_material-definition.scss +0 -0
  720. /package/{projects/sharedcomponents/src/lib → lib}/components/tags/component/style/_theme.scss +0 -0
  721. /package/{projects/sharedcomponents/src/lib/components/tags/component/tag-join-label → lib/components/tags/component}/style/material.scss +0 -0
  722. /package/{projects/sharedcomponents/src/lib → lib}/components/tags/component/tag-join-label/style/_layout.scss +0 -0
  723. /package/{projects/sharedcomponents/src/lib → lib}/components/tags/component/tag-join-label/style/_material-definition.scss +0 -0
  724. /package/{projects/sharedcomponents/src/lib → lib}/components/tags/component/tag-join-label/style/_theme.scss +0 -0
  725. /package/{projects/sharedcomponents/src/lib → lib}/style/_mixin.scss +0 -0
  726. /package/{projects/sharedcomponents/src/lib → lib}/style/sharedcomponents-globals.scss +0 -0
  727. /package/{projects/sharedcomponents/src/lib/utils/check-within-stepped-bounds-result.ts → lib/utils/check-within-stepped-bounds-result.d.ts} +0 -0
@@ -0,0 +1,390 @@
1
+ import { ObjectUtils } from "./object-utils";
2
+ import { ArrayUtils } from "./array-utils";
3
+ import { isNill } from "./is-nill.function";
4
+ import { notNill } from "./function/not-nill.function";
5
+ // Static utility function holder related to numeric variable evaluations and operations.
6
+ export class NumberUtils {
7
+ // For user-typed number input; supports comma's as decimal delimiter.
8
+ static ParseIntNumberInput(arg) {
9
+ return NumberUtils.ParseInt(NumberUtils._NumberInputToNumberStr(arg));
10
+ }
11
+ // Parses given argument to an integer, using a native parseInt() function with a radix of 10. Returns NaN if parsing was not possible.
12
+ static ParseInt(arg) {
13
+ if (isNill(arg) || Array.isArray(arg)) {
14
+ return undefined;
15
+ }
16
+ return parseInt(arg, 10);
17
+ }
18
+ // For user-typed number input; supports comma's as decimal delimiter.
19
+ static ParseFloatNumberInput(arg, decimalPrecision = 2) {
20
+ return NumberUtils.ParseFloat(NumberUtils._NumberInputToNumberStr(arg), decimalPrecision);
21
+ }
22
+ static ParseFloatNumberInputKeepPrecision(arg) {
23
+ const correctedInputStr = NumberUtils._NumberInputToNumberStr(arg);
24
+ const decimalPrecision = this.GetDecimalPlaces(correctedInputStr);
25
+ return NumberUtils.ParseFloat(correctedInputStr, decimalPrecision);
26
+ }
27
+ /**
28
+ * Returns given arg as a float number with given decimal precision, if possible. Returns NaN if parse conversion failed.
29
+ *
30
+ * @param {any} arg The argument to parse to a float
31
+ * @param {number} decimalPrecision The number of decimals, or the precision, the parsed return float should have
32
+ * @returns {number} NaN if not possible, else the parsed float value
33
+ */
34
+ static ParseFloat(arg, decimalPrecision = 2) {
35
+ if (!ObjectUtils.AllExist(arg, decimalPrecision) || Array.isArray(arg)) {
36
+ return NaN;
37
+ }
38
+ if (!NumberUtils.IsInteger(decimalPrecision) || decimalPrecision < 0) {
39
+ decimalPrecision = 2;
40
+ // toFixed() can only handle up until 20
41
+ }
42
+ else if (decimalPrecision > 20) {
43
+ decimalPrecision = 20;
44
+ }
45
+ return parseFloat(parseFloat(arg).toFixed(decimalPrecision));
46
+ }
47
+ /**
48
+ * Returns given arg as a float number with given decimal precision, if possible. Returns NaN if parse conversion failed.
49
+ *
50
+ * @param arg The argument to parse to a float
51
+ * @returns {number} The argument as a float with its original decimal precision intact
52
+ */
53
+ static ParseFloatKeepPrecision(arg) {
54
+ const decimalPrecision = this.GetDecimalPlaces(arg);
55
+ return this.ParseFloat(arg, decimalPrecision);
56
+ }
57
+ /**
58
+ * Returns the given argument as a number. Returns given defaultValue if conversion of argument was impossible.
59
+ * @param arg
60
+ * @param {number} [defaultValue = 0]
61
+ * @returns {number}
62
+ */
63
+ static ParseNumberOrDefault(arg, defaultValue = 0) {
64
+ if (Array.isArray(arg)) {
65
+ return defaultValue;
66
+ }
67
+ if (!NumberUtils.IsNumber(arg)) {
68
+ arg = parseFloat(arg);
69
+ arg = isNaN(arg) ? defaultValue : arg;
70
+ }
71
+ return arg;
72
+ }
73
+ // Returns true iff given argument is an integer number. Returns false on non-numbers or numbers with significant decimals.
74
+ static IsInteger(arg) {
75
+ if (isNaN(arg) || Array.isArray(arg)) {
76
+ return false;
77
+ }
78
+ const argAsFloat = parseFloat(arg);
79
+ return ((argAsFloat | 0) === argAsFloat); // returns whether 'arg converted to an integer equals arg'
80
+ }
81
+ // Returns the number of decimal places of the given number. Returns 0 if no decimals whatsoever could be found on given arg.
82
+ static GetDecimalPlaces(arg, maxAnswer = 1000) {
83
+ const match = ("" + arg).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
84
+ if (!match) {
85
+ return 0;
86
+ }
87
+ let answer = Math.max(0,
88
+ // number of digits right of decimal point.
89
+ (match[1] ? match[1].length : 0)
90
+ // adjust for scientific notation
91
+ - (match[2] ? +match[2] : 0));
92
+ if (answer > maxAnswer) {
93
+ answer = maxAnswer;
94
+ }
95
+ return answer;
96
+ }
97
+ // Parses given numberInput to a number, or returns given defaultValue if parse not possible. Allows ',' char as decimal delimiter.
98
+ static ParseNumberInputOrDefault(numberInput, defaultValue = 0) {
99
+ return NumberUtils.ParseNumberOrDefault(NumberUtils._NumberInputToNumberStr(numberInput), defaultValue);
100
+ }
101
+ // Returns whether the type of given argument is 'number'.
102
+ static IsNumber(arg) {
103
+ return typeof arg === "number" && !isNaN(arg);
104
+ }
105
+ /**
106
+ * Returns whether given arg is indeed not a number (it's NaN or it has another type than 'number')
107
+ * Our exact copy of AS Flex'es isNaN(arg) function. Always use this method for copying Flex isNaN(..) occurences into TypeScript.
108
+ * @param arg
109
+ * @returns {boolean}
110
+ * @constructor
111
+ */
112
+ static IsNaN(arg) {
113
+ return isNaN(arg) || !NumberUtils.IsNumber(arg);
114
+ }
115
+ // Our copy of CoMath.NaN. Returns number, or substitute if NumberUtils.IsNaN(number) holds true.
116
+ static NaN(number, substitute = 0) {
117
+ return NumberUtils.IsNaN(number) ? substitute : number;
118
+ }
119
+ // Returns whether the value is parasable as a number.
120
+ static IsParsableNumber(arg) {
121
+ if (Array.isArray(arg)) {
122
+ return false;
123
+ }
124
+ return !isNaN(parseFloat(arg));
125
+ }
126
+ static IsParsableNumberInput(numberInput) {
127
+ return NumberUtils.IsParsableNumber(NumberUtils._NumberInputToNumberStr(numberInput));
128
+ }
129
+ /**
130
+ * Returns whether given arg is parseable as a number, and whether the lengts of its number parse result is equal to its original length.
131
+ * I.e. this function returns FALSE with given number-parsable strings, but that have non-numeric appendices, eg '2233ff'. That arg
132
+ * IS number-parseable, but not a strict 'string number', the latter being what this method actually checks for.
133
+ */
134
+ static IsStringNumber(arg) {
135
+ if (!NumberUtils.IsParsableNumber(arg)) {
136
+ return false;
137
+ }
138
+ else {
139
+ return arg.toString().length === parseFloat(arg).toString().length;
140
+ }
141
+ }
142
+ static IsListOfNumbers(arg, separator = ",") {
143
+ const nrs = arg.split(separator);
144
+ if (nrs.length === 0) {
145
+ return false;
146
+ }
147
+ return nrs.filter(s => NumberUtils.IsStringNumber(s)).length === nrs.length;
148
+ }
149
+ // Returns given argument as a string representation of a number parse, e.g. "1" for a number parse result of arg to 1.
150
+ static ParseStringNumber(arg) {
151
+ if (!this.IsStringNumber(arg)) {
152
+ return NaN;
153
+ }
154
+ return NumberUtils.ParseFloatKeepPrecision(arg);
155
+ }
156
+ static ParseStringNumberDefault(arg, defaultValue = 0) {
157
+ return NumberUtils.NaN(NumberUtils.ParseStringNumber(arg), defaultValue);
158
+ }
159
+ /**
160
+ * Returns a random integer in range [lowerBound .. upperBound], an inclusive range. Returns NaN if not possible.
161
+ * Given bounds are truncated first, before serving as the true lower- and upper bounds for the random int.
162
+ */
163
+ static RandomInt(lowerBoundInt, upperBoundInt) {
164
+ if (!NumberUtils.IsNumber(lowerBoundInt) || !NumberUtils.IsNumber(upperBoundInt) || lowerBoundInt > upperBoundInt) {
165
+ return NaN;
166
+ }
167
+ lowerBoundInt = Math.trunc(lowerBoundInt);
168
+ upperBoundInt = Math.trunc(upperBoundInt);
169
+ if (lowerBoundInt === upperBoundInt) {
170
+ return lowerBoundInt;
171
+ }
172
+ const delta = upperBoundInt - lowerBoundInt;
173
+ return (Math.round(Math.random() * delta) + lowerBoundInt);
174
+ }
175
+ // Adds thousands comma's to given value, E.g. '1000' to '1,000'. Returns empty string if value was undefined.
176
+ static AddThousandsCommasTo(value) {
177
+ if (isNill(value)) {
178
+ return "";
179
+ }
180
+ return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
181
+ }
182
+ /**
183
+ * Function used to check wether a given number is composed of another number, power-of-two wise.
184
+ * Example usage: NumberUtils.NumIsComposedOf(articleListObject.publication, ArticlePublication.Selector).
185
+ * This would return whether or not that articleListObject was publicated for selector or not, where articleListObject.publication
186
+ * was possibly a 'COMPOSITE that was made out of (including)' ArticlePublication.Selector.
187
+ */
188
+ static NumIsComposedOfOtherPowTwoNum(bigNrToCheck, powTwoNumItShouldBeComposedOf) {
189
+ if (!bigNrToCheck) {
190
+ return false;
191
+ }
192
+ else if (!powTwoNumItShouldBeComposedOf) {
193
+ return true;
194
+ }
195
+ else {
196
+ return ((bigNrToCheck & powTwoNumItShouldBeComposedOf) === powTwoNumItShouldBeComposedOf);
197
+ }
198
+ }
199
+ /**
200
+ * Returns given nr, or the given default number (default 0) if the nr number was undefined or otherwise not a number.
201
+ * Same as CoMath.NaN from AS code (used as its substitute in transaction logic)
202
+ * @param nr
203
+ * @param defaultNr
204
+ * @returns {number}
205
+ */
206
+ static NrOrDefault(nr, defaultNr = 0) {
207
+ if (notNill(nr) && NumberUtils.IsNumber(nr)) {
208
+ return nr;
209
+ }
210
+ else {
211
+ return defaultNr;
212
+ }
213
+ }
214
+ /**
215
+ * Returns whether given nrToCheck is within the given precision and scale limits. Precision and scale, here, are Oracle DB terms.
216
+ * This function can thus be used to check whether the given number is safe to send to the 'database' beforehand, if we know the
217
+ * precision and scale of the number in the db declaration.
218
+ *
219
+ * I.e. A number declared in the Oracle DB as number(5, 2) has a precision of 5 and a scale of 2.
220
+ *
221
+ * @param {number} nrToCheck
222
+ * @param {number} precision The number of significant digits, including possibly negative scale. E.g. 3 in '123' and 5 in '51.123'
223
+ * @param {number} [scale = 0] The number of significant digits AFTER the decimal point. E.g. 1 in 5432.1 and 3 in 54000.003
224
+ * @returns {CheckPrecisionAndScaleResult} Whether given nrToCheck is ok for given precision and scale, and if not, the
225
+ * nearest number that IS ok for those constraints.
226
+ */
227
+ static CheckPrecisionAndScale(nrToCheck, precision, scale = 0) {
228
+ // let's say any undefined number is checked OK, and all numbers are checked OK for an undefined precision
229
+ if (!ObjectUtils.AllExist(nrToCheck, precision, scale)) {
230
+ return { isOk: true, nearestOkNr: NaN };
231
+ }
232
+ // no number can have 0 or less than 0 significant digits, in our universe
233
+ if (precision < 1 || precision - scale < 1) {
234
+ return { isOk: false, nearestOkNr: NaN };
235
+ }
236
+ // begin check
237
+ const isNegative = (nrToCheck < 0);
238
+ const nrParts = nrToCheck.toString().split(".");
239
+ // remove minus sign if negative
240
+ if (isNegative) {
241
+ nrParts[0] = nrParts[0].slice(1);
242
+ }
243
+ const numCountBeforeDot = nrParts[0].length;
244
+ const allowedNumCountBeforeDot = precision - scale;
245
+ if (numCountBeforeDot <= allowedNumCountBeforeDot) {
246
+ return { isOk: true, nearestOkNr: nrToCheck };
247
+ }
248
+ else {
249
+ // cut a part from the "before decimal number" so that the number is not too big anymore
250
+ const numCountToRemove = numCountBeforeDot - allowedNumCountBeforeDot;
251
+ // remove the right-most numbers before the decimal dot
252
+ nrParts[0] = nrParts[0].slice(0, -1 * numCountToRemove);
253
+ // add minus sign again if it was negative
254
+ if (isNegative) {
255
+ nrParts[0] = "-" + nrParts[0];
256
+ }
257
+ // build and return composite number again
258
+ let nearestOkNr;
259
+ if (nrParts[1]) {
260
+ nearestOkNr = Number(nrParts[0] + "." + nrParts[1]);
261
+ }
262
+ else {
263
+ nearestOkNr = Number(nrParts[0]);
264
+ }
265
+ return { isOk: false, nearestOkNr: nearestOkNr };
266
+ }
267
+ }
268
+ /**
269
+ * Returns whether given x is OK within the given min, max and step boundaries, where it should hold that nrToCheck = min + N * step,
270
+ * with N integer or 0.
271
+ * @param {number} nrToCheck Number to check whether it's within the given bounds
272
+ * @param min Inclusive
273
+ * @param max Inclusive
274
+ * @param stepSize
275
+ * @returns {CheckWithinSteppedBounds} Returns remainder of undefined when nrToCheck was OUTSIDE [min, max], else full result object.
276
+ */
277
+ static CheckWithinSteppedBounds(nrToCheck, min, max, stepSize = 1) {
278
+ if (nrToCheck < min || nrToCheck > max) {
279
+ return { isOk: false, remainder: undefined };
280
+ }
281
+ // we're in [min, max], but still check if nrToCheck = min + N * step holds (for N integer or 0)
282
+ let remainder = (nrToCheck - min) % stepSize;
283
+ // correct float for largest precision amongst input numbers
284
+ remainder = NumberUtils.ParseFloat(remainder, NumberUtils._GetLargestDecimalPrecisionOf(nrToCheck, min, stepSize));
285
+ return { isOk: (remainder === 0), remainder: remainder };
286
+ }
287
+ /**
288
+ * Finds the number closest to the originalNumber, that adheres to the given bounds. That is, for which it holds that
289
+ * nr = min + N * step with N integer or 0.
290
+ * @param {number} originalNr Find closest answer to this number
291
+ * @param min Inclusive
292
+ * @param max Inclusive
293
+ * @param stepSize
294
+ * @returns {boolean} The closest OK number for bounds.
295
+ */
296
+ static GetNearestNumberWithinSteppedBounds(originalNr, min, max, stepSize = 1) {
297
+ if (originalNr < min) {
298
+ return min;
299
+ }
300
+ else if (originalNr > max) {
301
+ return NumberUtils.GetTrueSteppedBoundsMax(min, max, stepSize);
302
+ }
303
+ const boundsCheck = NumberUtils.CheckWithinSteppedBounds(originalNr, min, max, stepSize);
304
+ if (boundsCheck.isOk) {
305
+ return originalNr;
306
+ }
307
+ let answer;
308
+ const remainder = boundsCheck.remainder;
309
+ if (remainder) {
310
+ // round up or down?
311
+ if ((remainder / stepSize) < 0.5) {
312
+ // round down, but not below min
313
+ answer = (originalNr - remainder >= min ? originalNr - remainder : min);
314
+ }
315
+ else {
316
+ // round up, but not above max
317
+ answer = (originalNr + stepSize - remainder <= max ? originalNr + stepSize - remainder :
318
+ NumberUtils.GetTrueSteppedBoundsMax(min, max, stepSize));
319
+ }
320
+ }
321
+ else {
322
+ // is this real life, why wasn't our stepped bounds check OK?
323
+ answer = originalNr;
324
+ }
325
+ // 'correct' float errors
326
+ answer = NumberUtils.ParseFloat(answer, NumberUtils._GetLargestDecimalPrecisionOf(originalNr, min, max, stepSize));
327
+ return answer;
328
+ }
329
+ /**
330
+ * Returns the true maximum allowed value for the given "stepped bounds": min, stepSize and max, for which it holds that each allowed
331
+ * value Y = min + stepSize * N, for any INTEGER or 0 N where it also holds, of course, that Y <= max.
332
+ * @param min
333
+ * @param max
334
+ * @param stepSize
335
+ */
336
+ static GetTrueSteppedBoundsMax(min, max, stepSize = 1) {
337
+ // solve max integer X in formula min + X * step <= max, and return min + X * stepSize for that X
338
+ const maxSteps = Math.floor((max - min) / stepSize);
339
+ // 'correct' float errors
340
+ return NumberUtils.ParseFloat(min + maxSteps * stepSize, NumberUtils._GetLargestDecimalPrecisionOf(min, min, max));
341
+ }
342
+ // Returns the nearest number, relative to the given originalNr, that is within the given [min, max] inclusive bounds.
343
+ static GetNearestNumberWithinBounds(originalNr, min, max) {
344
+ let answer = originalNr;
345
+ if (originalNr < min) {
346
+ answer = min;
347
+ }
348
+ else if (originalNr > max) {
349
+ answer = max;
350
+ }
351
+ return answer;
352
+ }
353
+ // Returns the string representation of given number. If it's not a number, returns the empty string.
354
+ static ToString(nr) {
355
+ if (!NumberUtils.IsNaN(nr)) {
356
+ return "" + nr;
357
+ }
358
+ else {
359
+ return "";
360
+ }
361
+ }
362
+ static DecimalsToStepIncrement(numberOfDecimals) {
363
+ return Math.pow(10, -1 * numberOfDecimals);
364
+ }
365
+ static Round(value, decimals) {
366
+ const factor = Math.pow(10, decimals);
367
+ return Math.round(value * factor) / factor;
368
+ }
369
+ // @returns The inclusive max value
370
+ static PrecisionScaleToMaxValue(precision, scale) {
371
+ const oneStep = this.DecimalsToStepIncrement(scale);
372
+ const maxExclusive = Math.pow(10, precision - scale);
373
+ return maxExclusive - oneStep;
374
+ }
375
+ // @returns the difference between given 2 numbers
376
+ static DifferenceBetweenNumbers(numberA, numberB) {
377
+ return Math.abs(numberA - numberB);
378
+ }
379
+ static _GetLargestDecimalPrecisionOf(...args) {
380
+ const result = ArrayUtils.GetMaxCalculatedValue(args, (arg) => {
381
+ return NumberUtils.GetDecimalPlaces(arg);
382
+ });
383
+ return result;
384
+ }
385
+ // Returns given number input as a number that's useable by Javascript. Allows for incoming ',' decimal delimiter.
386
+ static _NumberInputToNumberStr(numberInput) {
387
+ return (numberInput + "").replace(",", ".");
388
+ }
389
+ }
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL3V0aWxzL251bWJlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJELHlGQUF5RjtBQUN6RixNQUFNLE9BQU8sV0FBVztJQUNwQixzRUFBc0U7SUFDL0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQVE7UUFDdEMsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCx1SUFBdUk7SUFDaEksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFRO1FBQzNCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFFRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELHNFQUFzRTtJQUMvRCxNQUFNLENBQUMscUJBQXFCLENBQUMsR0FBUSxFQUFFLG1CQUEyQixDQUFDO1FBQ3RFLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU0sTUFBTSxDQUFDLGtDQUFrQyxDQUFDLEdBQVE7UUFDckQsTUFBTSxpQkFBaUIs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QUMsQ0FBQztRQUM1RCxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDN0QsT0FBTyxZQUFZLEdBQUcsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrREFBa0Q7SUFDM0MsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE9BQWUsRUFBRSxPQUFlO1FBQ25FLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLElBQWM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ2xFLE9BQU8sV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELGtIQUFrSDtJQUMxRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsV0FBbUI7UUFDdEQsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuL29iamVjdC11dGlsc1wiO1xyXG5pbXBvcnQge0NoZWNrV2l0aGluU3RlcHBlZEJvdW5kc1Jlc3VsdH0gZnJvbSBcIi4vY2hlY2std2l0aGluLXN0ZXBwZWQtYm91bmRzLXJlc3VsdFwiO1xyXG5pbXBvcnQge0FycmF5VXRpbHN9IGZyb20gXCIuL2FycmF5LXV0aWxzXCI7XHJcbmltcG9ydCB7Q2hlY2tQcmVjaXNpb25BbmRTY2FsZVJlc3VsdH0gZnJvbSBcIi4vY2hlY2stcHJlY2lzaW9uLWFuZC1zY2FsZS1yZXN1bHRcIjtcclxuaW1wb3J0IHtpc05pbGx9IGZyb20gXCIuL2lzLW5pbGwuZnVuY3Rpb25cIjtcclxuaW1wb3J0IHtub3ROaWxsfSBmcm9tIFwiLi9mdW5jdGlvbi9ub3QtbmlsbC5mdW5jdGlvblwiO1xyXG5cclxuLy8gU3RhdGljIHV0aWxpdHkgZnVuY3Rpb24gaG9sZGVyIHJlbGF0ZWQgdG8gbnVtZXJpYyB2YXJpYWJsZSBldmFsdWF0aW9ucyBhbmQgb3BlcmF0aW9ucy5cclxuZXhwb3J0IGNsYXNzIE51bWJlclV0aWxzIHtcclxuICAgIC8vIEZvciB1c2VyLXR5cGVkIG51bWJlciBpbnB1dDsgc3VwcG9ydHMgY29tbWEncyBhcyBkZWNpbWFsIGRlbGltaXRlci5cclxuICAgIHB1YmxpYyBzdGF0aWMgUGFyc2VJbnROdW1iZXJJbnB1dChhcmc6IGFueSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlclV0aWxzLlBhcnNlSW50KE51bWJlclV0aWxzLl9OdW1iZXJJbnB1dFRvTnVtYmVyU3RyKGFyZykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnNlcyBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnRlZ2VyLCB1c2luZyBhIG5hdGl2ZSBwYXJzZUludCgpIGZ1bmN0aW9uIHdpdGggYSByYWRpeCBvZiAxMC4gUmV0dXJucyBOYU4gaWYgcGFyc2luZyB3YXMgbm90IHBvc3NpYmxlLlxyXG4gICAgcHVibGljIHN0YXRpYyBQYXJzZUludChhcmc6IGFueSk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGlzTmlsbChhcmcpIHx8IEFycmF5LmlzQXJyYXkoYXJnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGFyZywgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciB1c2VyLXR5cGVkIG51bWJlciBpbnB1dDsgc3VwcG9ydHMgY29tbWEncyBhcyBkZWNpbWFsIGRlbGltaXRlci5cclxuICAgIHB1YmxpYyBzdGF0aWMgUGFyc2VGbG9hdE51bWJlcklucHV0KGFyZzogYW55LCBkZWNpbWFsUHJlY2lzaW9uOiBudW1iZXIgPSAyKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTnVtYmVyVXRpbHMuUGFyc2VGbG9hdChOdW1iZXJVdGlscy5fTnVtYmVySW5wdXRUb051bWJlclN0cihhcmcpLCBkZWNpbWFsUHJlY2lzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFBhcnNlRmxvYXROdW1iZXJJbnB1dEtlZXBQcmVjaXNpb24oYXJnOiBhbnkpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGNvcnJlY3RlZElucHV0U3RyOiBzdHJpbmcgPSBOdW1iZXJVdGlscy5fTnVtYmVySW5wdXRUb051bWJlclN0cihhcmcpO1xyXG4gICAgICAgIGNvbnN0IGRlY2ltYWxQcmVjaXNpb246IG51bWJlciA9IHRoaXMuR2V0RGVjaW1hbFBsYWNlcyhjb3JyZWN0ZWRJbnB1dFN0cik7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlclV0aWxzLlBhcnNlRmxvYXQoY29ycmVjdGVkSW5wdXRTdHIsIGRlY2ltYWxQcmVjaXNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBnaXZlbiBhcmcgYXMgYSBmbG9hdCBudW1iZXIgd2l0aCBnaXZlbiBkZWNpbWFsIHByZWNpc2lvbiwgaWYgcG9zc2libGUuIFJldHVybnMgTmFOIGlmIHBhcnNlIGNvbnZlcnNpb24gZmFpbGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBhcmcgVGhlIGFyZ3VtZW50IHRvIHBhcnNlIHRvIGEgZmxvYXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWNpbWFsUHJlY2lzaW9uIFRoZSBudW1iZXIgb2YgZGVjaW1hbHMsIG9yIHRoZSBwcmVjaXNpb24sIHRoZSBwYXJzZWQgcmV0dXJuIGZsb2F0IHNob3VsZCBoYXZlXHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOYU4gaWYgbm90IHBvc3NpYmxlLCBlbHNlIHRoZSBwYXJzZWQgZmxvYXQgdmFsdWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBQYXJzZUZsb2F0KGFyZzogYW55LCBkZWNpbWFsUHJlY2lzaW9uOiBudW1iZXIgPSAyKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLkFsbEV4aXN0KGFyZywgZGVjaW1hbFByZWNpc2lvbikgfHwgQXJyYXkuaXNBcnJheShhcmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOYU47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIU51bWJlclV0aWxzLklzSW50ZWdlcihkZWNpbWFsUHJlY2lzaW9uKSB8fCBkZWNpbWFsUHJlY2lzaW9uIDwgMCkge1xyXG4gICAgICAgICAgICBkZWNpbWFsUHJlY2lzaW9uID0gMjtcclxuICAgICAgICAgICAgLy8gdG9GaXhlZCgpIGNhbiBvbmx5IGhhbmRsZSB1cCB1bnRpbCAyMFxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGVjaW1hbFByZWNpc2lvbiA+IDIwKSB7XHJcbiAgICAgICAgICAgIGRlY2ltYWxQcmVjaXNpb24gPSAyMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKGRlY2ltYWxQcmVjaXNpb24pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgZ2l2ZW4gYXJnIGFzIGEgZmxvYXQgbnVtYmVyIHdpdGggZ2l2ZW4gZGVjaW1hbCBwcmVjaXNpb24sIGlmIHBvc3NpYmxlLiBSZXR1cm5zIE5hTiBpZiBwYXJzZSBjb252ZXJzaW9uIGZhaWxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXJnIFRoZSBhcmd1bWVudCB0byBwYXJzZSB0byBhIGZsb2F0XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYXJndW1lbnQgYXMgYSBmbG9hdCB3aXRoIGl0cyBvcmlnaW5hbCBkZWNpbWFsIHByZWNpc2lvbiBpbnRhY3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBQYXJzZUZsb2F0S2VlcFByZWNpc2lvbihhcmc6IGFueSk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZGVjaW1hbFByZWNpc2lvbjogbnVtYmVyID0gdGhpcy5HZXREZWNpbWFsUGxhY2VzKGFyZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuUGFyc2VGbG9hdChhcmcsIGRlY2ltYWxQcmVjaXNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZ2l2ZW4gYXJndW1lbnQgYXMgYSBudW1iZXIuIFJldHVybnMgZ2l2ZW4gZGVmYXVsdFZhbHVlIGlmIGNvbnZlcnNpb24gb2YgYXJndW1lbnQgd2FzIGltcG9zc2libGUuXHJcbiAgICAgKiBAcGFyYW0gYXJnXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRWYWx1ZSA9IDBdXHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFBhcnNlTnVtYmVyT3JEZWZhdWx0KGFyZzogYW55LCBkZWZhdWx0VmFsdWU6IG51bWJlciA9IDApOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghTnVtYmVyVXRpbHMuSXNOdW1iZXIoYXJnKSkge1xyXG4gICAgICAgICAgICBhcmcgPSBwYXJzZUZsb2F0KGFyZyk7XHJcbiAgICAgICAgICAgIGFyZyA9IGlzTmFOKGFyZykgPyBkZWZhdWx0VmFsdWUgOiBhcmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcmc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJucyB0cnVlIGlmZiBnaXZlbiBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIG51bWJlci4gUmV0dXJucyBmYWxzZSBvbiBub24tbnVtYmVycyBvciBudW1iZXJzIHdpdGggc2lnbmlmaWNhbnQgZGVjaW1hbHMuXHJcbiAgICBwdWJsaWMgc3RhdGljIElzSW50ZWdlcihhcmc6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChpc05hTihhcmcpIHx8IEFycmF5LmlzQXJyYXkoYXJnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFyZ0FzRmxvYXQ6IG51bWJlciA9IHBhcnNlRmxvYXQoYXJnKTtcclxuICAgICAgICByZXR1cm4gKChhcmdBc0Zsb2F0IHwgMCkgPT09IGFyZ0FzRmxvYXQpOyAvLyByZXR1cm5zIHdoZXRoZXIgJ2FyZyBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBlcXVhbHMgYXJnJ1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBvZiB0aGUgZ2l2ZW4gbnVtYmVyLiBSZXR1cm5zIDAgaWYgbm8gZGVjaW1hbHMgd2hhdHNvZXZlciBjb3VsZCBiZSBmb3VuZCBvbiBnaXZlbiBhcmcuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldERlY2ltYWxQbGFjZXMoYXJnOiBhbnksIG1heEFuc3dlcjogbnVtYmVyID0gMTAwMCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkgPSAoXCJcIiArIGFyZykubWF0Y2goLyg/OlxcLihcXGQrKSk/KD86W2VFXShbKy1dP1xcZCspKT8kLyk7XHJcbiAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhbnN3ZXI6IG51bWJlciA9IE1hdGgubWF4KDAsXHJcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiBkaWdpdHMgcmlnaHQgb2YgZGVjaW1hbCBwb2ludC5cclxuICAgICAgICAgICAgKG1hdGNoWzFdID8gbWF0Y2hbMV0ubGVuZ3RoIDogMClcclxuICAgICAgICAgICAgLy8gYWRqdXN0IGZvciBzY2llbnRpZmljIG5vdGF0aW9uXHJcbiAgICAgICAgICAgIC0gKG1hdGNoWzJdID8gK21hdGNoWzJdIDogMCkpO1xyXG5cclxuICAgICAgICBpZiAoYW5zd2VyID4gbWF4QW5zd2VyKSB7XHJcbiAgICAgICAgICAgIGFuc3dlciA9IG1heEFuc3dlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGFyc2VzIGdpdmVuIG51bWJlcklucHV0IHRvIGEgbnVtYmVyLCBvciByZXR1cm5zIGdpdmVuIGRlZmF1bHRWYWx1ZSBpZiBwYXJzZSBub3QgcG9zc2libGUuIEFsbG93cyAnLCcgY2hhciBhcyBkZWNpbWFsIGRlbGltaXRlci5cclxuICAgIHB1YmxpYyBzdGF0aWMgUGFyc2VOdW1iZXJJbnB1dE9yRGVmYXVsdChudW1iZXJJbnB1dDogYW55LCBkZWZhdWx0VmFsdWU6IG51bWJlciA9IDApOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBOdW1iZXJVdGlscy5QYXJzZU51bWJlck9yRGVmYXVsdChOdW1iZXJVdGlscy5fTnVtYmVySW5wdXRUb051bWJlclN0cihudW1iZXJJbnB1dCksIGRlZmF1bHRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSB0eXBlIG9mIGdpdmVuIGFyZ3VtZW50IGlzICdudW1iZXInLlxyXG4gICAgcHVibGljIHN0YXRpYyBJc051bWJlcihhcmc6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSBcIm51bWJlclwiICYmICFpc05hTihhcmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGdpdmVuIGFyZyBpcyBpbmRlZWQgbm90IGEgbnVtYmVyIChpdCdzIE5hTiBvciBpdCBoYXMgYW5vdGhlciB0eXBlIHRoYW4gJ251bWJlcicpXHJcbiAgICAgKiBPdXIgZXhhY3QgY29weSBvZiBBUyBGbGV4J2VzIGlzTmFOKGFyZykgZnVuY3Rpb24uIEFsd2F5cyB1c2UgdGhpcyBtZXRob2QgZm9yIGNvcHlpbmcgRmxleCBpc05hTiguLikgb2NjdXJlbmNlcyBpbnRvIFR5cGVTY3JpcHQuXHJcbiAgICAgKiBAcGFyYW0gYXJnXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqIEBjb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIElzTmFOKGFyZzogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGlzTmFOKGFyZykgfHwgIU51bWJlclV0aWxzLklzTnVtYmVyKGFyZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT3VyIGNvcHkgb2YgQ29NYXRoLk5hTi4gUmV0dXJucyBudW1iZXIsIG9yIHN1YnN0aXR1dGUgaWYgTnVtYmVyVXRpbHMuSXNOYU4obnVtYmVyKSBob2xkcyB0cnVlLlxyXG4gICAgcHVibGljIHN0YXRpYyBOYU4obnVtYmVyOiBhbnksIHN1YnN0aXR1dGU6IG51bWJlciA9IDApOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBOdW1iZXJVdGlscy5Jc05hTihudW1iZXIpID8gc3Vic3RpdHV0ZSA6IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIGlzIHBhcmFzYWJsZSBhcyBhIG51bWJlci5cclxuICAgIHB1YmxpYyBzdGF0aWMgSXNQYXJzYWJsZU51bWJlcihhcmc6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KGFyZykpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgSXNQYXJzYWJsZU51bWJlcklucHV0KG51bWJlcklucHV0OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gTnVtYmVyVXRpbHMuSXNQYXJzYWJsZU51bWJlcihOdW1iZXJVdGlscy5fTnVtYmVySW5wdXRUb051bWJlclN0cihudW1iZXJJbnB1dCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGdpdmVuIGFyZyBpcyBwYXJzZWFibGUgYXMgYSBudW1iZXIsIGFuZCB3aGV0aGVyIHRoZSBsZW5ndHMgb2YgaXRzIG51bWJlciBwYXJzZSByZXN1bHQgaXMgZXF1YWwgdG8gaXRzIG9yaWdpbmFsIGxlbmd0aC5cclxuICAgICAqIEkuZS4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIEZBTFNFIHdpdGggZ2l2ZW4gbnVtYmVyLXBhcnNhYmxlIHN0cmluZ3MsIGJ1dCB0aGF0IGhhdmUgbm9uLW51bWVyaWMgYXBwZW5kaWNlcywgZWcgJzIyMzNmZicuIFRoYXQgYXJnXHJcbiAgICAgKiBJUyBudW1iZXItcGFyc2VhYmxlLCBidXQgbm90IGEgc3RyaWN0ICdzdHJpbmcgbnVtYmVyJywgdGhlIGxhdHRlciBiZWluZyB3aGF0IHRoaXMgbWV0aG9kIGFjdHVhbGx5IGNoZWNrcyBmb3IuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgSXNTdHJpbmdOdW1iZXIoYXJnOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIU51bWJlclV0aWxzLklzUGFyc2FibGVOdW1iZXIoYXJnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZy50b1N0cmluZygpLmxlbmd0aCA9PT0gcGFyc2VGbG9hdChhcmcpLnRvU3RyaW5nKCkubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIElzTGlzdE9mTnVtYmVycyhhcmc6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcgPSBcIixcIik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IG5yczogc3RyaW5nW10gPSBhcmcuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgICBpZiAobnJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBucnMuZmlsdGVyKHMgPT4gTnVtYmVyVXRpbHMuSXNTdHJpbmdOdW1iZXIocykpLmxlbmd0aCA9PT0gbnJzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm5zIGdpdmVuIGFyZ3VtZW50IGFzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyIHBhcnNlLCBlLmcuIFwiMVwiIGZvciBhIG51bWJlciBwYXJzZSByZXN1bHQgb2YgYXJnIHRvIDEuXHJcbiAgICBwdWJsaWMgc3RhdGljIFBhcnNlU3RyaW5nTnVtYmVyKGFyZzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIXRoaXMuSXNTdHJpbmdOdW1iZXIoYXJnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTmFOO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIE51bWJlclV0aWxzLlBhcnNlRmxvYXRLZWVwUHJlY2lzaW9uKGFyZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBQYXJzZVN0cmluZ051bWJlckRlZmF1bHQoYXJnOiBzdHJpbmcgfCBhbnksIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlclV0aWxzLk5hTihOdW1iZXJVdGlscy5QYXJzZVN0cmluZ051bWJlcihhcmcpLCBkZWZhdWx0VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGluIHJhbmdlIFtsb3dlckJvdW5kIC4uIHVwcGVyQm91bmRdLCBhbiBpbmNsdXNpdmUgcmFuZ2UuIFJldHVybnMgTmFOIGlmIG5vdCBwb3NzaWJsZS5cclxuICAgICAqIEdpdmVuIGJvdW5kcyBhcmUgdHJ1bmNhdGVkIGZpcnN0LCBiZWZvcmUgc2VydmluZyBhcyB0aGUgdHJ1ZSBsb3dlci0gYW5kIHVwcGVyIGJvdW5kcyBmb3IgdGhlIHJhbmRvbSBpbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgUmFuZG9tSW50KGxvd2VyQm91bmRJbnQ6IG51bWJlciwgdXBwZXJCb3VuZEludDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIU51bWJlclV0aWxzLklzTnVtYmVyKGxvd2VyQm91bmRJbnQpIHx8ICFOdW1iZXJVdGlscy5Jc051bWJlcih1cHBlckJvdW5kSW50KSB8fCBsb3dlckJvdW5kSW50ID4gdXBwZXJCb3VuZEludCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTmFOO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG93ZXJCb3VuZEludCA9IE1hdGgudHJ1bmMobG93ZXJCb3VuZEludCk7XHJcbiAgICAgICAgdXBwZXJCb3VuZEludCA9IE1hdGgudHJ1bmModXBwZXJCb3VuZEludCk7XHJcblxyXG4gICAgICAgIGlmIChsb3dlckJvdW5kSW50ID09PSB1cHBlckJvdW5kSW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb3dlckJvdW5kSW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9IHVwcGVyQm91bmRJbnQgLSBsb3dlckJvdW5kSW50O1xyXG4gICAgICAgIHJldHVybiAoTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogZGVsdGEpICsgbG93ZXJCb3VuZEludCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkcyB0aG91c2FuZHMgY29tbWEncyB0byBnaXZlbiB2YWx1ZSwgRS5nLiAnMTAwMCcgdG8gJzEsMDAwJy4gUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgdmFsdWUgd2FzIHVuZGVmaW5lZC5cclxuICAgIHB1YmxpYyBzdGF0aWMgQWRkVGhvdXNhbmRzQ29tbWFzVG8odmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGlzTmlsbCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIixcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGNoZWNrIHdldGhlciBhIGdpdmVuIG51bWJlciBpcyBjb21wb3NlZCBvZiBhbm90aGVyIG51bWJlciwgcG93ZXItb2YtdHdvIHdpc2UuXHJcbiAgICAgKiBFeGFtcGxlIHVzYWdlOiBOdW1iZXJVdGlscy5OdW1Jc0NvbXBvc2VkT2YoYXJ0aWNsZUxpc3RPYmplY3QucHVibGljYXRpb24sIEFydGljbGVQdWJsaWNhdGlvbi5TZWxlY3RvcikuXHJcbiAgICAgKiBUaGlzIHdvdWxkIHJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGF0IGFydGljbGVMaXN0T2JqZWN0IHdhcyBwdWJsaWNhdGVkIGZvciBzZWxlY3RvciBvciBub3QsIHdoZXJlIGFydGljbGVMaXN0T2JqZWN0LnB1YmxpY2F0aW9uXHJcbiAgICAgKiB3YXMgcG9zc2libHkgYSAnQ09NUE9TSVRFIHRoYXQgd2FzIG1hZGUgb3V0IG9mIChpbmNsdWRpbmcpJyBBcnRpY2xlUHVibGljYXRpb24uU2VsZWN0b3IuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgTnVtSXNDb21wb3NlZE9mT3RoZXJQb3dUd29OdW0oYmlnTnJUb0NoZWNrOiBudW1iZXIsIHBvd1R3b051bUl0U2hvdWxkQmVDb21wb3NlZE9mOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWJpZ05yVG9DaGVjaykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICghcG93VHdvTnVtSXRTaG91bGRCZUNvbXBvc2VkT2YpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICgoYmlnTnJUb0NoZWNrICYgcG93VHdvTnVtSXRTaG91bGRCZUNvbXBvc2VkT2YpID09PSBwb3dUd29OdW1JdFNob3VsZEJlQ29tcG9zZWRPZik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBnaXZlbiBuciwgb3IgdGhlIGdpdmVuIGRlZmF1bHQgbnVtYmVyIChkZWZhdWx0IDApIGlmIHRoZSBuciBudW1iZXIgd2FzIHVuZGVmaW5lZCBvciBvdGhlcndpc2Ugbm90IGEgbnVtYmVyLlxyXG4gICAgICogU2FtZSBhcyBDb01hdGguTmFOIGZyb20gQVMgY29kZSAodXNlZCBhcyBpdHMgc3Vic3RpdHV0ZSBpbiB0cmFuc2FjdGlvbiBsb2dpYylcclxuICAgICAqIEBwYXJhbSBuclxyXG4gICAgICogQHBhcmFtIGRlZmF1bHROclxyXG4gICAgICogQHJldHVybnMge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBOck9yRGVmYXVsdChucjogbnVtYmVyLCBkZWZhdWx0TnI6IG51bWJlciA9IDApOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChub3ROaWxsKG5yKSAmJiBOdW1iZXJVdGlscy5Jc051bWJlcihucikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5yO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGdpdmVuIG5yVG9DaGVjayBpcyB3aXRoaW4gdGhlIGdpdmVuIHByZWNpc2lvbiBhbmQgc2NhbGUgbGltaXRzLiBQcmVjaXNpb24gYW5kIHNjYWxlLCBoZXJlLCBhcmUgT3JhY2xlIERCIHRlcm1zLlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBjYW4gdGh1cyBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG51bWJlciBpcyBzYWZlIHRvIHNlbmQgdG8gdGhlICdkYXRhYmFzZScgYmVmb3JlaGFuZCwgaWYgd2Uga25vdyB0aGVcclxuICAgICAqIHByZWNpc2lvbiBhbmQgc2NhbGUgb2YgdGhlIG51bWJlciBpbiB0aGUgZGIgZGVjbGFyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogSS5lLiBBIG51bWJlciBkZWNsYXJlZCBpbiB0aGUgT3JhY2xlIERCIGFzIG51bWJlcig1LCAyKSBoYXMgYSBwcmVjaXNpb24gb2YgNSBhbmQgYSBzY2FsZSBvZiAyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuclRvQ2hlY2tcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjaXNpb24gVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMsIGluY2x1ZGluZyBwb3NzaWJseSBuZWdhdGl2ZSBzY2FsZS4gRS5nLiAzIGluICcxMjMnIGFuZCA1IGluICc1MS4xMjMnXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NjYWxlID0gMF0gVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgQUZURVIgdGhlIGRlY2ltYWwgcG9pbnQuIEUuZy4gMSBpbiA1NDMyLjEgYW5kIDMgaW4gNTQwMDAuMDAzXHJcbiAgICAgKiBAcmV0dXJucyB7Q2hlY2tQcmVjaXNpb25BbmRTY2FsZVJlc3VsdH0gV2hldGhlciBnaXZlbiBuclRvQ2hlY2sgaXMgb2sgZm9yIGdpdmVuIHByZWNpc2lvbiBhbmQgc2NhbGUsIGFuZCBpZiBub3QsIHRoZVxyXG4gICAgICogbmVhcmVzdCBudW1iZXIgdGhhdCBJUyBvayBmb3IgdGhvc2UgY29uc3RyYWludHMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgQ2hlY2tQcmVjaXNpb25BbmRTY2FsZShuclRvQ2hlY2s6IG51bWJlciwgcHJlY2lzaW9uOiBudW1iZXIsIHNjYWxlOiBudW1iZXIgPSAwKTogQ2hlY2tQcmVjaXNpb25BbmRTY2FsZVJlc3VsdCB7XHJcbiAgICAgICAgLy8gbGV0J3Mgc2F5IGFueSB1bmRlZmluZWQgbnVtYmVyIGlzIGNoZWNrZWQgT0ssIGFuZCBhbGwgbnVtYmVycyBhcmUgY2hlY2tlZCBPSyBmb3IgYW4gdW5kZWZpbmVkIHByZWNpc2lvblxyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuQWxsRXhpc3QobnJUb0NoZWNrLCBwcmVjaXNpb24sIHNjYWxlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge2lzT2s6IHRydWUsIG5lYXJlc3RPa05yOiBOYU59O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBubyBudW1iZXIgY2FuIGhhdmUgMCBvciBsZXNzIHRoYW4gMCBzaWduaWZpY2FudCBkaWdpdHMsIGluIG91ciB1bml2ZXJzZVxyXG4gICAgICAgIGlmIChwcmVjaXNpb24gPCAxIHx8IHByZWNpc2lvbiAtIHNjYWxlIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge2lzT2s6IGZhbHNlLCBuZWFyZXN0T2tOcjogTmFOfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYmVnaW4gY2hlY2tcclxuICAgICAgICBjb25zdCBpc05lZ2F0aXZlOiBib29sZWFuID0gKG5yVG9DaGVjayA8IDApO1xyXG4gICAgICAgIGNvbnN0IG5yUGFydHM6IHN0cmluZ1tdID0gbnJUb0NoZWNrLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIC8vIHJlbW92ZSBtaW51cyBzaWduIGlmIG5lZ2F0aXZlXHJcbiAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcclxuICAgICAgICAgICAgbnJQYXJ0c1swXSA9IG5yUGFydHNbMF0uc2xpY2UoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG51bUNvdW50QmVmb3JlRG90OiBudW1iZXIgPSBuclBhcnRzWzBdLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBhbGxvd2VkTnVtQ291bnRCZWZvcmVEb3Q6IG51bWJlciA9IHByZWNpc2lvbiAtIHNjYWxlO1xyXG4gICAgICAgIGlmIChudW1Db3VudEJlZm9yZURvdCA8PSBhbGxvd2VkTnVtQ291bnRCZWZvcmVEb3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtpc09rOiB0cnVlLCBuZWFyZXN0T2tOcjogbnJUb0NoZWNrfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBjdXQgYSBwYXJ0IGZyb20gdGhlIFwiYmVmb3JlIGRlY2ltYWwgbnVtYmVyXCIgc28gdGhhdCB0aGUgbnVtYmVyIGlzIG5vdCB0b28gYmlnIGFueW1vcmVcclxuICAgICAgICAgICAgY29uc3QgbnVtQ291bnRUb1JlbW92ZTogbnVtYmVyID0gbnVtQ291bnRCZWZvcmVEb3QgLSBhbGxvd2VkTnVtQ291bnRCZWZvcmVEb3Q7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcmlnaHQtbW9zdCBudW1iZXJzIGJlZm9yZSB0aGUgZGVjaW1hbCBkb3RcclxuICAgICAgICAgICAgbnJQYXJ0c1swXSA9IG5yUGFydHNbMF0uc2xpY2UoMCwgLTEgKiBudW1Db3VudFRvUmVtb3ZlKTtcclxuICAgICAgICAgICAgLy8gYWRkIG1pbnVzIHNpZ24gYWdhaW4gaWYgaXQgd2FzIG5lZ2F0aXZlXHJcbiAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBuclBhcnRzWzBdID0gXCItXCIgKyBuclBhcnRzWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGJ1aWxkIGFuZCByZXR1cm4gY29tcG9zaXRlIG51bWJlciBhZ2FpblxyXG4gICAgICAgICAgICBsZXQgbmVhcmVzdE9rTnI6IG51bWJlcjtcclxuICAgICAgICAgICAgaWYgKG5yUGFydHNbMV0pIHtcclxuICAgICAgICAgICAgICAgIG5lYXJlc3RPa05yID0gTnVtYmVyKG5yUGFydHNbMF0gKyBcIi5cIiArIG5yUGFydHNbMV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmVhcmVzdE9rTnIgPSBOdW1iZXIobnJQYXJ0c1swXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtpc09rOiBmYWxzZSwgbmVhcmVzdE9rTnI6IG5lYXJlc3RPa05yfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgZ2l2ZW4geCBpcyBPSyB3aXRoaW4gdGhlIGdpdmVuIG1pbiwgbWF4IGFuZCBzdGVwIGJvdW5kYXJpZXMsIHdoZXJlIGl0IHNob3VsZCBob2xkIHRoYXQgbnJUb0NoZWNrID0gbWluICsgTiAqIHN0ZXAsXHJcbiAgICAgKiB3aXRoIE4gaW50ZWdlciBvciAwLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG5yVG9DaGVjayBOdW1iZXIgdG8gY2hlY2sgd2hldGhlciBpdCdzIHdpdGhpbiB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAgICAgKiBAcGFyYW0gbWluIEluY2x1c2l2ZVxyXG4gICAgICogQHBhcmFtIG1heCBJbmNsdXNpdmVcclxuICAgICAqIEBwYXJhbSBzdGVwU2l6ZVxyXG4gICAgICogQHJldHVybnMge0NoZWNrV2l0aGluU3RlcHBlZEJvdW5kc30gUmV0dXJucyByZW1haW5kZXIgb2YgdW5kZWZpbmVkIHdoZW4gbnJUb0NoZWNrIHdhcyBPVVRTSURFIFttaW4sIG1heF0sIGVsc2UgZnVsbCByZXN1bHQgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIENoZWNrV2l0aGluU3RlcHBlZEJvdW5kcyhcclxuICAgICAgICBuclRvQ2hlY2s6IG51bWJlcixcclxuICAgICAgICBtaW46IG51bWJlcixcclxuICAgICAgICBtYXg6IG51bWJlcixcclxuICAgICAgICBzdGVwU2l6ZTogbnVtYmVyID0gMVxyXG4gICAgKTogQ2hlY2tXaXRoaW5TdGVwcGVkQm91bmRzUmVzdWx0IHtcclxuICAgICAgICBpZiAobnJUb0NoZWNrIDwgbWluIHx8IG5yVG9DaGVjayA+IG1heCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge2lzT2s6IGZhbHNlLCByZW1haW5kZXI6IHVuZGVmaW5lZH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3ZSdyZSBpbiBbbWluLCBtYXhdLCBidXQgc3RpbGwgY2hlY2sgaWYgbnJUb0NoZWNrID0gbWluICsgTiAqIHN0ZXAgaG9sZHMgKGZvciBOIGludGVnZXIgb3IgMClcclxuICAgICAgICBsZXQgcmVtYWluZGVyOiBudW1iZXIgPSAobnJUb0NoZWNrIC0gbWluKSAlIHN0ZXBTaXplO1xyXG4gICAgICAgIC8vIGNvcnJlY3QgZmxvYXQgZm9yIGxhcmdlc3QgcHJlY2lzaW9uIGFtb25nc3QgaW5wdXQgbnVtYmVyc1xyXG4gICAgICAgIHJlbWFpbmRlciA9IE51bWJlclV0aWxzLlBhcnNlRmxvYXQocmVtYWluZGVyLCBOdW1iZXJVdGlscy5fR2V0TGFyZ2VzdERlY2ltYWxQcmVjaXNpb25PZihuclRvQ2hlY2ssIG1pbiwgc3RlcFNpemUpKTtcclxuICAgICAgICByZXR1cm4ge2lzT2s6IChyZW1haW5kZXIgPT09IDApLCByZW1haW5kZXI6IHJlbWFpbmRlcn07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgbnVtYmVyIGNsb3Nlc3QgdG8gdGhlIG9yaWdpbmFsTnVtYmVyLCB0aGF0IGFkaGVyZXMgdG8gdGhlIGdpdmVuIGJvdW5kcy4gVGhhdCBpcywgZm9yIHdoaWNoIGl0IGhvbGRzIHRoYXRcclxuICAgICAqIG5yID0gbWluICsgTiAqIHN0ZXAgd2l0aCBOIGludGVnZXIgb3IgMC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcmlnaW5hbE5yIEZpbmQgY2xvc2VzdCBhbnN3ZXIgdG8gdGhpcyBudW1iZXJcclxuICAgICAqIEBwYXJhbSBtaW4gSW5jbHVzaXZlXHJcbiAgICAgKiBAcGFyYW0gbWF4IEluY2x1c2l2ZVxyXG4gICAgICogQHBhcmFtIHN0ZXBTaXplXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGNsb3Nlc3QgT0sgbnVtYmVyIGZvciBib3VuZHMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0TmVhcmVzdE51bWJlcldpdGhpblN0ZXBwZWRCb3VuZHMob3JpZ2luYWxOcjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIHN0ZXBTaXplOiBudW1iZXIgPSAxKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAob3JpZ2luYWxOciA8IG1pbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbWluO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxOciA+IG1heCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyVXRpbHMuR2V0VHJ1ZVN0ZXBwZWRCb3VuZHNNYXgobWluLCBtYXgsIHN0ZXBTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdW5kc0NoZWNrOiBDaGVja1dpdGhpblN0ZXBwZWRCb3VuZHNSZXN1bHQgPSBOdW1iZXJVdGlscy5DaGVja1dpdGhpblN0ZXBwZWRCb3VuZHMob3JpZ2luYWxOciwgbWluLCBtYXgsIHN0ZXBTaXplKTtcclxuICAgICAgICBpZiAoYm91bmRzQ2hlY2suaXNPaykge1xyXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhbnN3ZXI6IG51bWJlcjtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtYWluZGVyOiBudW1iZXIgPSBib3VuZHNDaGVjay5yZW1haW5kZXI7XHJcbiAgICAgICAgaWYgKHJlbWFpbmRlcikge1xyXG4gICAgICAgICAgICAvLyByb3VuZCB1cCBvciBkb3duP1xyXG4gICAgICAgICAgICBpZiAoKHJlbWFpbmRlciAvIHN0ZXBTaXplKSA8IDAuNSkge1xyXG4gICAgICAgICAgICAgICAgLy8gIHJvdW5kIGRvd24sIGJ1dCBub3QgYmVsb3cgbWluXHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSAob3JpZ2luYWxOciAtIHJlbWFpbmRlciA+PSBtaW4gPyBvcmlnaW5hbE5yIC0gcmVtYWluZGVyIDogbWluKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHJvdW5kIHVwLCBidXQgbm90IGFib3ZlIG1heFxyXG4gICAgICAgICAgICAgICAgYW5zd2VyID0gKG9yaWdpbmFsTnIgKyBzdGVwU2l6ZSAtIHJlbWFpbmRlciA8PSBtYXggPyBvcmlnaW5hbE5yICsgc3RlcFNpemUgLSByZW1haW5kZXIgOlxyXG4gICAgICAgICAgICAgICAgICAgIE51bWJlclV0aWxzLkdldFRydWVTdGVwcGVkQm91bmRzTWF4KG1pbiwgbWF4LCBzdGVwU2l6ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaXMgdGhpcyByZWFsIGxpZmUsIHdoeSB3YXNuJ3Qgb3VyIHN0ZXBwZWQgYm91bmRzIGNoZWNrIE9LP1xyXG4gICAgICAgICAgICBhbnN3ZXIgPSBvcmlnaW5hbE5yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gJ2NvcnJlY3QnIGZsb2F0IGVycm9yc1xyXG4gICAgICAgIGFuc3dlciA9IE51bWJlclV0aWxzLlBhcnNlRmxvYXQoYW5zd2VyLCBOdW1iZXJVdGlscy5fR2V0TGFyZ2VzdERlY2ltYWxQcmVjaXNpb25PZihvcmlnaW5hbE5yLCBtaW4sIG1heCwgc3RlcFNpemUpKTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdHJ1ZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBcInN0ZXBwZWQgYm91bmRzXCI6IG1pbiwgc3RlcFNpemUgYW5kIG1heCwgZm9yIHdoaWNoIGl0IGhvbGRzIHRoYXQgZWFjaCBhbGxvd2VkXHJcbiAgICAgKiB2YWx1ZSBZID0gbWluICsgc3RlcFNpemUgKiBOLCBmb3IgYW55IElOVEVHRVIgb3IgMCBOIHdoZXJlIGl0IGFsc28gaG9sZHMsIG9mIGNvdXJzZSwgdGhhdCBZIDw9IG1heC5cclxuICAgICAqIEBwYXJhbSBtaW5cclxuICAgICAqIEBwYXJhbSBtYXhcclxuICAgICAqIEBwYXJhbSBzdGVwU2l6ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldFRydWVTdGVwcGVkQm91bmRzTWF4KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgc3RlcFNpemU6IG51bWJlciA9IDEpOiBudW1iZXIge1xyXG4gICAgICAgIC8vIHNvbHZlIG1heCBpbnRlZ2VyIFggaW4gZm9ybXVsYSBtaW4gKyBYICogc3RlcCA8PSBtYXgsIGFuZCByZXR1cm4gbWluICsgWCAqIHN0ZXBTaXplIGZvciB0aGF0IFhcclxuICAgICAgICBjb25zdCBtYXhTdGVwczogbnVtYmVyID0gTWF0aC5mbG9vcigobWF4IC0gbWluKSAvIHN0ZXBTaXplKTtcclxuICAgICAgICAvLyAnY29ycmVjdCcgZmxvYXQgZXJyb3JzXHJcbiAgICAgICAgcmV0dXJuIE51bWJlclV0aWxzLlBhcnNlRmxvYXQobWluICsgbWF4U3RlcHMgKiBzdGVwU2l6ZSwgTnVtYmVyVXRpbHMuX0dldExhcmdlc3REZWNpbWFsUHJlY2lzaW9uT2YobWluLCBtaW4sIG1heCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgdGhlIG5lYXJlc3QgbnVtYmVyLCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gb3JpZ2luYWxOciwgdGhhdCBpcyB3aXRoaW4gdGhlIGdpdmVuIFttaW4sIG1heF0gaW5jbHVzaXZlIGJvdW5kcy5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0TmVhcmVzdE51bWJlcldpdGhpbkJvdW5kcyhvcmlnaW5hbE5yOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGFuc3dlcjogbnVtYmVyID0gb3JpZ2luYWxOcjtcclxuXHJcbiAgICAgICAgaWYgKG9yaWdpbmFsTnIgPCBtaW4pIHtcclxuICAgICAgICAgICAgYW5zd2VyID0gbWluO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxOciA+IG1heCkge1xyXG4gICAgICAgICAgICBhbnN3ZXIgPSBtYXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBnaXZlbiBudW1iZXIuIElmIGl0J3Mgbm90IGEgbnVtYmVyLCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuXHJcbiAgICBwdWJsaWMgc3RhdGljIFRvU3RyaW5nKG5yOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghTnVtYmVyVXRpbHMuSXNOYU4obnIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgbnI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRGVjaW1hbHNUb1N0ZXBJbmNyZW1lbnQobnVtYmVyT2ZEZWNpbWFsczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIC0xICogbnVtYmVyT2ZEZWNpbWFscyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBSb3VuZCh2YWx1ZTogbnVtYmVyLCBkZWNpbWFsczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBmYWN0b3I6IG51bWJlciA9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBmYWN0b3IpIC8gZmFjdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEByZXR1cm5zIFRoZSBpbmNsdXNpdmUgbWF4IHZhbHVlXHJcbiAgICBwdWJsaWMgc3RhdGljIFByZWNpc2lvblNjYWxlVG9NYXhWYWx1ZShwcmVjaXNpb246IG51bWJlciwgc2NhbGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3Qgb25lU3RlcDogbnVtYmVyID0gdGhpcy5EZWNpbWFsc1RvU3RlcEluY3JlbWVudChzY2FsZSk7XHJcbiAgICAgICAgY29uc3QgbWF4RXhjbHVzaXZlOiBudW1iZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIC0gc2NhbGUpO1xyXG4gICAgICAgIHJldHVybiBtYXhFeGNsdXNpdmUgLSBvbmVTdGVwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZ2l2ZW4gMiBudW1iZXJzXHJcbiAgICBwdWJsaWMgc3RhdGljIERpZmZlcmVuY2VCZXR3ZWVuTnVtYmVycyhudW1iZXJBOiBudW1iZXIsIG51bWJlckI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKG51bWJlckEgLSBudW1iZXJCKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfR2V0TGFyZ2VzdERlY2ltYWxQcmVjaXNpb25PZiguLi5hcmdzOiBudW1iZXJbXSk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gQXJyYXlVdGlscy5HZXRNYXhDYWxjdWxhdGVkVmFsdWUoYXJncywgKGFyZzogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXJVdGlscy5HZXREZWNpbWFsUGxhY2VzKGFyZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm5zIGdpdmVuIG51bWJlciBpbnB1dCBhcyBhIG51bWJlciB0aGF0J3MgdXNlYWJsZSBieSBKYXZhc2NyaXB0LiBBbGxvd3MgZm9yIGluY29taW5nICcsJyBkZWNpbWFsIGRlbGltaXRlci5cclxuICAgIHByaXZhdGUgc3RhdGljIF9OdW1iZXJJbnB1dFRvTnVtYmVyU3RyKG51bWJlcklucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAobnVtYmVySW5wdXQgKyBcIlwiKS5yZXBsYWNlKFwiLFwiLCBcIi5cIik7XHJcbiAgICB9XHJcbn1cclxuIl19