@mtna/web-form-angular 1.0.4 → 1.0.5

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 (394) hide show
  1. package/_index.scss +20 -0
  2. package/bundles/mtna-web-form-angular.umd.js +5912 -359
  3. package/bundles/mtna-web-form-angular.umd.js.map +1 -1
  4. package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.component.js +1 -1
  5. package/esm2015/lib/components/base-form/base-form.component.js +11 -2
  6. package/esm2015/lib/components/base-items/base-form-item.component.js +11 -2
  7. package/esm2015/lib/components/base-items/base-section-item.component.js +1 -2
  8. package/esm2015/lib/components/form/form.component.js +2 -2
  9. package/esm2015/lib/components/form-item/form-item.component.js +11 -2
  10. package/esm2015/lib/components/form-item-dialog/form-item-dialog.component.js +1 -1
  11. package/esm2015/lib/components/form-item-impl/boolean/boolean.component.js +2 -2
  12. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.component.js +2 -2
  13. package/esm2015/lib/components/form-item-impl/date/date.component.js +1 -1
  14. package/esm2015/lib/components/form-item-impl/date/date.module.js +5 -2
  15. package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +2 -2
  16. package/esm2015/lib/components/form-item-impl/file-upload/file-upload.component.js +1 -1
  17. package/esm2015/lib/components/form-item-impl/form-group/form-group.component.js +2 -2
  18. package/esm2015/lib/components/form-item-impl/form-section/form-section.component.js +2 -2
  19. package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.component.js +3 -2
  20. package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.module.js +6 -3
  21. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +2 -2
  22. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.js +11 -10
  23. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.js +6 -2
  24. package/esm2015/lib/components/form-item-impl/search/resource-search.component.js +9 -8
  25. package/esm2015/lib/components/form-item-impl/table-item/table-item.component.js +2 -2
  26. package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.component.js +3 -3
  27. package/esm2015/lib/components/form-item-impl/year-quarter-range/year-quarter-range.component.js +2 -2
  28. package/esm2015/lib/components/form-item-injector/form-item-injector.component.js +12 -2
  29. package/esm2015/lib/components/index.js +2 -1
  30. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.component.js +2 -2
  31. package/esm2015/lib/components/step-card/step-card.component.js +1 -2
  32. package/esm2015/lib/components/template-item-impl/base/base-template-item-with-list.component.js +26 -0
  33. package/esm2015/lib/components/template-item-impl/base/base-template-item.component.js +80 -0
  34. package/esm2015/lib/components/template-item-impl/base/index.js +3 -0
  35. package/esm2015/lib/components/template-item-impl/boolean-item/boolean-item.component.js +24 -0
  36. package/esm2015/lib/components/template-item-impl/boolean-item/boolean-item.module.js +21 -0
  37. package/esm2015/lib/components/template-item-impl/boolean-item/index.js +3 -0
  38. package/esm2015/lib/components/template-item-impl/checkbox-item/checkbox-item.component.js +37 -0
  39. package/esm2015/lib/components/template-item-impl/checkbox-item/checkbox-item.module.js +24 -0
  40. package/esm2015/lib/components/template-item-impl/checkbox-item/index.js +3 -0
  41. package/esm2015/lib/components/template-item-impl/date/index.js +4 -0
  42. package/esm2015/lib/components/template-item-impl/date/offset-date-range-item/index.js +3 -0
  43. package/esm2015/lib/components/template-item-impl/date/offset-date-range-item/offset-date-range-item.component.js +41 -0
  44. package/esm2015/lib/components/template-item-impl/date/offset-date-range-item/offset-date-range-item.module.js +21 -0
  45. package/esm2015/lib/components/template-item-impl/date/year-quarter-item/index.js +3 -0
  46. package/esm2015/lib/components/template-item-impl/date/year-quarter-item/year-quarter-item.component.js +59 -0
  47. package/esm2015/lib/components/template-item-impl/date/year-quarter-item/year-quarter-item.module.js +48 -0
  48. package/esm2015/lib/components/template-item-impl/date/year-quarter-range-item/index.js +3 -0
  49. package/esm2015/lib/components/template-item-impl/date/year-quarter-range-item/year-quarter-range-item.component.js +21 -0
  50. package/esm2015/lib/components/template-item-impl/date/year-quarter-range-item/year-quarter-range-item.module.js +22 -0
  51. package/esm2015/lib/components/template-item-impl/date-item/date-item.component.js +85 -0
  52. package/esm2015/lib/components/template-item-impl/date-item/date-item.module.js +52 -0
  53. package/esm2015/lib/components/template-item-impl/date-item/index.js +3 -0
  54. package/esm2015/lib/components/template-item-impl/decimal-answer-item/decimal-answer-item.component.js +29 -0
  55. package/esm2015/lib/components/template-item-impl/decimal-answer-item/decimal-answer-item.module.js +41 -0
  56. package/esm2015/lib/components/template-item-impl/decimal-answer-item/index.js +3 -0
  57. package/esm2015/lib/components/template-item-impl/dropdown-item/dropdown-item.component.js +23 -0
  58. package/esm2015/lib/components/template-item-impl/dropdown-item/dropdown-item.module.js +48 -0
  59. package/esm2015/lib/components/template-item-impl/dropdown-item/index.js +3 -0
  60. package/esm2015/lib/components/template-item-impl/file-upload-item/file-upload-item.component.js +25 -0
  61. package/esm2015/lib/components/template-item-impl/file-upload-item/file-upload-item.module.js +45 -0
  62. package/esm2015/lib/components/template-item-impl/file-upload-item/index.js +3 -0
  63. package/esm2015/lib/components/template-item-impl/i18n-paragraph-answer-item/i18n-paragraph-answer-item.component.js +51 -0
  64. package/esm2015/lib/components/template-item-impl/i18n-paragraph-answer-item/i18n-paragraph-answer-item.module.js +45 -0
  65. package/esm2015/lib/components/template-item-impl/i18n-paragraph-answer-item/index.js +3 -0
  66. package/esm2015/lib/components/template-item-impl/i18n-short-answer-item/i18n-short-answer-item.component.js +50 -0
  67. package/esm2015/lib/components/template-item-impl/i18n-short-answer-item/i18n-short-answer-item.module.js +48 -0
  68. package/esm2015/lib/components/template-item-impl/i18n-short-answer-item/index.js +3 -0
  69. package/esm2015/lib/components/template-item-impl/index.js +29 -0
  70. package/esm2015/lib/components/template-item-impl/models/index.js +2 -0
  71. package/esm2015/lib/components/template-item-impl/models/step-aware.model.js +6 -0
  72. package/esm2015/lib/components/template-item-impl/multiple-choice-item/index.js +3 -0
  73. package/esm2015/lib/components/template-item-impl/multiple-choice-item/multiple-choice-item.component.js +21 -0
  74. package/esm2015/lib/components/template-item-impl/multiple-choice-item/multiple-choice-item.module.js +21 -0
  75. package/esm2015/lib/components/template-item-impl/option/template-option-group-item.component.js +17 -0
  76. package/esm2015/lib/components/template-item-impl/option/template-option-item.component.js +17 -0
  77. package/esm2015/lib/components/template-item-impl/ordered-list-item/index.js +3 -0
  78. package/esm2015/lib/components/template-item-impl/ordered-list-item/ordered-list-item.component.js +21 -0
  79. package/esm2015/lib/components/template-item-impl/ordered-list-item/ordered-list-item.module.js +19 -0
  80. package/esm2015/lib/components/template-item-impl/paragraph-answer-item/index.js +3 -0
  81. package/esm2015/lib/components/template-item-impl/paragraph-answer-item/paragraph-answer-item.component.js +28 -0
  82. package/esm2015/lib/components/template-item-impl/paragraph-answer-item/paragraph-answer-item.module.js +41 -0
  83. package/esm2015/lib/components/template-item-impl/repeatable-item/index.js +3 -0
  84. package/esm2015/lib/components/template-item-impl/repeatable-item/repeatable-item.component.js +23 -0
  85. package/esm2015/lib/components/template-item-impl/repeatable-item/repeatable-item.module.js +18 -0
  86. package/esm2015/lib/components/template-item-impl/repeatable-item-container/index.js +3 -0
  87. package/esm2015/lib/components/template-item-impl/repeatable-item-container/repeatable-item-container.component.js +46 -0
  88. package/esm2015/lib/components/template-item-impl/repeatable-item-container/repeatable-item-container.module.js +50 -0
  89. package/esm2015/lib/components/template-item-impl/short-answer-item/index.js +3 -0
  90. package/esm2015/lib/components/template-item-impl/short-answer-item/short-answer-item.component.js +28 -0
  91. package/esm2015/lib/components/template-item-impl/short-answer-item/short-answer-item.module.js +41 -0
  92. package/esm2015/lib/components/template-item-impl/template/index.js +3 -0
  93. package/esm2015/lib/components/template-item-impl/template/template.component.js +89 -0
  94. package/esm2015/lib/components/template-item-impl/template/template.module.js +46 -0
  95. package/esm2015/lib/components/template-item-impl/template-display-viewer/index.js +3 -0
  96. package/esm2015/lib/components/template-item-impl/template-display-viewer/template-display-viewer.component.js +44 -0
  97. package/esm2015/lib/components/template-item-impl/template-display-viewer/template-display-viewer.module.js +57 -0
  98. package/esm2015/lib/components/template-item-impl/template-item/index.js +3 -0
  99. package/esm2015/lib/components/template-item-impl/template-item/template-item.component.js +81 -0
  100. package/esm2015/lib/components/template-item-impl/template-item/template-item.module.js +21 -0
  101. package/esm2015/lib/components/template-item-impl/template-item-component-provider/index.js +3 -0
  102. package/esm2015/lib/components/template-item-impl/template-item-component-provider/template-item-component-provider.js +8 -0
  103. package/esm2015/lib/components/template-item-impl/template-item-component-provider/template-item-injected-components.js +107 -0
  104. package/esm2015/lib/components/template-item-impl/template-item-group/index.js +3 -0
  105. package/esm2015/lib/components/template-item-impl/template-item-group/template-item-group.component.js +52 -0
  106. package/esm2015/lib/components/template-item-impl/template-item-group/template-item-group.module.js +22 -0
  107. package/esm2015/lib/components/template-item-impl/template-item-header/index.js +3 -0
  108. package/esm2015/lib/components/template-item-impl/template-item-header/template-item-header.component.js +68 -0
  109. package/esm2015/lib/components/template-item-impl/template-item-header/template-item-header.module.js +19 -0
  110. package/esm2015/lib/components/template-item-impl/template-item-injector/index.js +3 -0
  111. package/esm2015/lib/components/template-item-impl/template-item-injector/template-item-injector.component.js +115 -0
  112. package/esm2015/lib/components/template-item-impl/template-item-injector/template-item-injector.module.js +18 -0
  113. package/esm2015/lib/components/template-item-impl/template-section/index.js +3 -0
  114. package/esm2015/lib/components/template-item-impl/template-section/template-section.component.js +32 -0
  115. package/esm2015/lib/components/template-item-impl/template-section/template-section.module.js +44 -0
  116. package/esm2015/lib/components/template-item-impl/text-item/index.js +3 -0
  117. package/esm2015/lib/components/template-item-impl/text-item/text-item.component.js +21 -0
  118. package/esm2015/lib/components/template-item-impl/text-item/text-item.module.js +19 -0
  119. package/esm2015/lib/components/template-item-impl/title-item/index.js +3 -0
  120. package/esm2015/lib/components/template-item-impl/title-item/title-item.component.js +20 -0
  121. package/esm2015/lib/components/template-item-impl/title-item/title-item.module.js +19 -0
  122. package/esm2015/lib/components/template-item-impl/unordered-list-item/index.js +3 -0
  123. package/esm2015/lib/components/template-item-impl/unordered-list-item/unordered-list-item.component.js +21 -0
  124. package/esm2015/lib/components/template-item-impl/unordered-list-item/unordered-list-item.module.js +19 -0
  125. package/esm2015/lib/components/template-item-impl/whole-number-answer-item/index.js +3 -0
  126. package/esm2015/lib/components/template-item-impl/whole-number-answer-item/whole-number-answer-item.component.js +28 -0
  127. package/esm2015/lib/components/template-item-impl/whole-number-answer-item/whole-number-answer-item.module.js +41 -0
  128. package/esm2015/lib/models/custom-date-format-provider.model.js +13 -0
  129. package/esm2015/lib/models/date/default-year-range.model.js +3 -0
  130. package/esm2015/lib/models/date/index.js +2 -0
  131. package/esm2015/lib/models/design/conditional-processing-resources.model.js +2 -0
  132. package/esm2015/lib/models/design/design-mapper/boolean-item-template-mapper.js +15 -0
  133. package/esm2015/lib/models/design/design-mapper/bulleted-list-item-template-mapper.js +27 -0
  134. package/esm2015/lib/models/design/design-mapper/checkbox-item-template-mapper.js +15 -0
  135. package/esm2015/lib/models/design/design-mapper/date-item-template-mapper.js +39 -0
  136. package/esm2015/lib/models/design/design-mapper/dropdown-item-template-mapper.js +26 -0
  137. package/esm2015/lib/models/design/design-mapper/file-upload-item-template-mapper.js +31 -0
  138. package/esm2015/lib/models/design/design-mapper/i18n-text-response-item-template-mapper.js +28 -0
  139. package/esm2015/lib/models/design/design-mapper/index.js +27 -0
  140. package/esm2015/lib/models/design/design-mapper/mapper-classes.model.js +89 -0
  141. package/esm2015/lib/models/design/design-mapper/mapping-logic-core.js +19 -0
  142. package/esm2015/lib/models/design/design-mapper/multiple-choice-item-template-mapper.js +25 -0
  143. package/esm2015/lib/models/design/design-mapper/numbered-list-item-template-mapper.js +27 -0
  144. package/esm2015/lib/models/design/design-mapper/numeric-response-item-template-mapper.js +37 -0
  145. package/esm2015/lib/models/design/design-mapper/offset-date-range-template-mapper.js +32 -0
  146. package/esm2015/lib/models/design/design-mapper/option-group-item-mapper.js +59 -0
  147. package/esm2015/lib/models/design/design-mapper/option-item-mapper.js +54 -0
  148. package/esm2015/lib/models/design/design-mapper/option-selector-mapper.js +117 -0
  149. package/esm2015/lib/models/design/design-mapper/repeatable-item-template-mapper.js +50 -0
  150. package/esm2015/lib/models/design/design-mapper/template-item-group-mapper.js +34 -0
  151. package/esm2015/lib/models/design/design-mapper/template-item-mapper.js +79 -0
  152. package/esm2015/lib/models/design/design-mapper/template-mapper.js +64 -0
  153. package/esm2015/lib/models/design/design-mapper/template-section-mapper.js +40 -0
  154. package/esm2015/lib/models/design/design-mapper/text-item-template-mapper.js +26 -0
  155. package/esm2015/lib/models/design/design-mapper/text-response-item-template-mapper.js +32 -0
  156. package/esm2015/lib/models/design/design-mapper/time-item-template-mapper.js +30 -0
  157. package/esm2015/lib/models/design/design-mapper/title-item-template-mapper.js +26 -0
  158. package/esm2015/lib/models/design/design-mapper/year-quarter-range-template-mapper.js +28 -0
  159. package/esm2015/lib/models/design/enumerations/date-enumeration.model.js +33 -0
  160. package/esm2015/lib/models/design/enumerations/index.js +2 -0
  161. package/esm2015/lib/models/design/index.js +9 -0
  162. package/esm2015/lib/models/design/option-group-item-section-display-name-map.model.js +8 -0
  163. package/esm2015/lib/models/design/option-item-section-display-name-map.model.js +6 -0
  164. package/esm2015/lib/models/design/potential-designs.model.js +160 -0
  165. package/esm2015/lib/models/design/template-design-constants.model.js +48 -0
  166. package/esm2015/lib/models/design/template-design-context.model.js +10 -0
  167. package/esm2015/lib/models/i18n-constants.model.js +185 -0
  168. package/esm2015/lib/models/index.js +5 -1
  169. package/esm2015/lib/pipes/filter-hidden-items.pipe.js +1 -1
  170. package/esm2015/lib/pipes/get-i18n-string-value-from-locale.pipe.js +36 -0
  171. package/esm2015/lib/pipes/get-i18n-strings-value-from-locale.pipe.js +36 -0
  172. package/esm2015/lib/pipes/get-progressive-form-item.pipe.js +1 -2
  173. package/esm2015/lib/pipes/index.js +6 -1
  174. package/esm2015/lib/pipes/instance-of-template-item-group-impl.pipe.js +33 -0
  175. package/esm2015/lib/pipes/instance-of-template-item.pipe.js +29 -0
  176. package/esm2015/lib/pipes/instance-of-template.pipe.js +29 -0
  177. package/esm2015/lib/pipes/items-with-value.pipe.js +1 -3
  178. package/esm2015/lib/services/api.service.js +8 -2
  179. package/esm2015/lib/services/dialog.service.js +9 -9
  180. package/esm2015/lib/services/index.js +2 -1
  181. package/esm2015/lib/services/template-transformation.service.js +27 -0
  182. package/esm2015/lib/state/design/index.js +2 -0
  183. package/esm2015/lib/state/design/template-design.facade.js +239 -0
  184. package/esm2015/lib/state/form/index.js +8 -0
  185. package/esm2015/lib/state/form/template-form-api.actions.js +6 -0
  186. package/esm2015/lib/state/form/template-form.actions.js +5 -0
  187. package/esm2015/lib/state/form/template-form.effects.js +39 -0
  188. package/esm2015/lib/state/form/template-form.facade.js +28 -0
  189. package/esm2015/lib/state/form/template-form.reducer.js +18 -0
  190. package/esm2015/lib/state/form/template-form.selectors.js +8 -0
  191. package/esm2015/lib/state/index.js +3 -0
  192. package/esm2015/lib/utilities/design-conditionals-util.js +124 -0
  193. package/esm2015/lib/utilities/form-option-design-util.js +88 -0
  194. package/esm2015/lib/utilities/generate-form-steps.js +1 -1
  195. package/esm2015/lib/utilities/index.js +6 -2
  196. package/esm2015/lib/utilities/merge-template-util.js +116 -0
  197. package/esm2015/lib/utilities/new-base-designs.util.js +193 -0
  198. package/esm2015/lib/utilities/serializer-util.js +33 -2
  199. package/esm2015/lib/utilities/template-design-core-util.js +34 -0
  200. package/esm2015/lib/utilities/template-design-util.js +113 -0
  201. package/esm2015/public-api.js +2 -1
  202. package/fesm2015/mtna-web-form-angular.js +4649 -138
  203. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  204. package/lib/_index.scss +45 -0
  205. package/lib/components/base-form/base-form.component.d.ts +6 -2
  206. package/lib/components/base-items/base-form-item.component.d.ts +4 -1
  207. package/lib/components/form-item/form-item.component.d.ts +4 -1
  208. package/lib/components/form-item-impl/checkbox/_checkbox-theme.scss +3 -20
  209. package/lib/components/form-item-impl/i18n-input/i18n-input.module.d.ts +2 -1
  210. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.d.ts +2 -1
  211. package/lib/components/form-item-impl/search/resource-search.component.d.ts +3 -3
  212. package/lib/components/form-item-impl/year-quarter/year-quarter.component.d.ts +2 -6
  213. package/lib/components/form-item-injector/form-item-injector.component.d.ts +5 -1
  214. package/lib/components/index.d.ts +1 -0
  215. package/lib/components/template-item-impl/base/base-template-item-with-list.component.d.ts +12 -0
  216. package/lib/components/template-item-impl/base/base-template-item.component.d.ts +30 -0
  217. package/lib/components/template-item-impl/base/index.d.ts +2 -0
  218. package/lib/components/template-item-impl/boolean-item/boolean-item.component.d.ts +11 -0
  219. package/lib/components/template-item-impl/boolean-item/boolean-item.module.d.ts +11 -0
  220. package/lib/components/template-item-impl/boolean-item/index.d.ts +2 -0
  221. package/lib/components/template-item-impl/checkbox-item/_checkbox-item-template-theme.scss +47 -0
  222. package/lib/components/template-item-impl/checkbox-item/checkbox-item.component.d.ts +11 -0
  223. package/lib/components/template-item-impl/checkbox-item/checkbox-item.module.d.ts +14 -0
  224. package/lib/components/template-item-impl/checkbox-item/index.d.ts +2 -0
  225. package/lib/components/template-item-impl/date/index.d.ts +3 -0
  226. package/lib/components/template-item-impl/date/offset-date-range-item/index.d.ts +2 -0
  227. package/lib/components/template-item-impl/date/offset-date-range-item/offset-date-range-item.component.d.ts +13 -0
  228. package/lib/components/template-item-impl/date/offset-date-range-item/offset-date-range-item.module.d.ts +11 -0
  229. package/lib/components/template-item-impl/date/year-quarter-item/_year-quarter-item-template-theme.scss +28 -0
  230. package/lib/components/template-item-impl/date/year-quarter-item/index.d.ts +2 -0
  231. package/lib/components/template-item-impl/date/year-quarter-item/year-quarter-item.component.d.ts +23 -0
  232. package/lib/components/template-item-impl/date/year-quarter-item/year-quarter-item.module.d.ts +14 -0
  233. package/lib/components/template-item-impl/date/year-quarter-range-item/index.d.ts +2 -0
  234. package/lib/components/template-item-impl/date/year-quarter-range-item/year-quarter-range-item.component.d.ts +7 -0
  235. package/lib/components/template-item-impl/date/year-quarter-range-item/year-quarter-range-item.module.d.ts +12 -0
  236. package/lib/components/template-item-impl/date-item/_date-item-template-theme.scss +29 -0
  237. package/lib/components/template-item-impl/date-item/date-item.component.d.ts +22 -0
  238. package/lib/components/template-item-impl/date-item/date-item.module.d.ts +14 -0
  239. package/lib/components/template-item-impl/date-item/index.d.ts +2 -0
  240. package/lib/components/template-item-impl/decimal-answer-item/decimal-answer-item.component.d.ts +8 -0
  241. package/lib/components/template-item-impl/decimal-answer-item/decimal-answer-item.module.d.ts +13 -0
  242. package/lib/components/template-item-impl/decimal-answer-item/index.d.ts +2 -0
  243. package/lib/components/template-item-impl/dropdown-item/_dropdown-item-template-theme.scss +35 -0
  244. package/lib/components/template-item-impl/dropdown-item/dropdown-item.component.d.ts +7 -0
  245. package/lib/components/template-item-impl/dropdown-item/dropdown-item.module.d.ts +15 -0
  246. package/lib/components/template-item-impl/dropdown-item/index.d.ts +2 -0
  247. package/lib/components/template-item-impl/file-upload-item/file-upload-item.component.d.ts +9 -0
  248. package/lib/components/template-item-impl/file-upload-item/file-upload-item.module.d.ts +13 -0
  249. package/lib/components/template-item-impl/file-upload-item/index.d.ts +2 -0
  250. package/lib/components/template-item-impl/i18n-paragraph-answer-item/i18n-paragraph-answer-item.component.d.ts +13 -0
  251. package/lib/components/template-item-impl/i18n-paragraph-answer-item/i18n-paragraph-answer-item.module.d.ts +14 -0
  252. package/lib/components/template-item-impl/i18n-paragraph-answer-item/index.d.ts +2 -0
  253. package/lib/components/template-item-impl/i18n-short-answer-item/i18n-short-answer-item.component.d.ts +11 -0
  254. package/lib/components/template-item-impl/i18n-short-answer-item/i18n-short-answer-item.module.d.ts +15 -0
  255. package/lib/components/template-item-impl/i18n-short-answer-item/index.d.ts +2 -0
  256. package/lib/components/template-item-impl/index.d.ts +28 -0
  257. package/lib/components/template-item-impl/models/index.d.ts +1 -0
  258. package/lib/components/template-item-impl/models/step-aware.model.d.ts +5 -0
  259. package/lib/components/template-item-impl/multiple-choice-item/index.d.ts +2 -0
  260. package/lib/components/template-item-impl/multiple-choice-item/multiple-choice-item.component.d.ts +7 -0
  261. package/lib/components/template-item-impl/multiple-choice-item/multiple-choice-item.module.d.ts +11 -0
  262. package/lib/components/template-item-impl/option/template-option-group-item.component.d.ts +8 -0
  263. package/lib/components/template-item-impl/option/template-option-item.component.d.ts +8 -0
  264. package/lib/components/template-item-impl/ordered-list-item/index.d.ts +2 -0
  265. package/lib/components/template-item-impl/ordered-list-item/ordered-list-item.component.d.ts +7 -0
  266. package/lib/components/template-item-impl/ordered-list-item/ordered-list-item.module.d.ts +10 -0
  267. package/lib/components/template-item-impl/paragraph-answer-item/index.d.ts +2 -0
  268. package/lib/components/template-item-impl/paragraph-answer-item/paragraph-answer-item.component.d.ts +8 -0
  269. package/lib/components/template-item-impl/paragraph-answer-item/paragraph-answer-item.module.d.ts +13 -0
  270. package/lib/components/template-item-impl/repeatable-item/index.d.ts +2 -0
  271. package/lib/components/template-item-impl/repeatable-item/repeatable-item.component.d.ts +5 -0
  272. package/lib/components/template-item-impl/repeatable-item/repeatable-item.module.d.ts +8 -0
  273. package/lib/components/template-item-impl/repeatable-item-container/_repeatable-item-template-container-theme.scss +28 -0
  274. package/lib/components/template-item-impl/repeatable-item-container/index.d.ts +2 -0
  275. package/lib/components/template-item-impl/repeatable-item-container/repeatable-item-container.component.d.ts +8 -0
  276. package/lib/components/template-item-impl/repeatable-item-container/repeatable-item-container.module.d.ts +15 -0
  277. package/lib/components/template-item-impl/short-answer-item/index.d.ts +2 -0
  278. package/lib/components/template-item-impl/short-answer-item/short-answer-item.component.d.ts +8 -0
  279. package/lib/components/template-item-impl/short-answer-item/short-answer-item.module.d.ts +13 -0
  280. package/lib/components/template-item-impl/template/index.d.ts +2 -0
  281. package/lib/components/template-item-impl/template/template.component.d.ts +35 -0
  282. package/lib/components/template-item-impl/template/template.module.d.ts +14 -0
  283. package/lib/components/template-item-impl/template-display-viewer/index.d.ts +2 -0
  284. package/lib/components/template-item-impl/template-display-viewer/template-display-viewer.component.d.ts +25 -0
  285. package/lib/components/template-item-impl/template-display-viewer/template-display-viewer.module.d.ts +17 -0
  286. package/lib/components/template-item-impl/template-item/index.d.ts +2 -0
  287. package/lib/components/template-item-impl/template-item/template-item.component.d.ts +29 -0
  288. package/lib/components/template-item-impl/template-item/template-item.module.d.ts +11 -0
  289. package/lib/components/template-item-impl/template-item-component-provider/index.d.ts +2 -0
  290. package/lib/components/template-item-impl/template-item-component-provider/template-item-component-provider.d.ts +4 -0
  291. package/lib/components/template-item-impl/template-item-component-provider/template-item-injected-components.d.ts +2 -0
  292. package/lib/components/template-item-impl/template-item-group/_template-item-group-theme.scss +31 -0
  293. package/lib/components/template-item-impl/template-item-group/index.d.ts +2 -0
  294. package/lib/components/template-item-impl/template-item-group/template-item-group.component.d.ts +18 -0
  295. package/lib/components/template-item-impl/template-item-group/template-item-group.module.d.ts +12 -0
  296. package/lib/components/template-item-impl/template-item-header/_template-item-header-theme.scss +28 -0
  297. package/lib/components/template-item-impl/template-item-header/index.d.ts +2 -0
  298. package/lib/components/template-item-impl/template-item-header/template-item-header.component.d.ts +26 -0
  299. package/lib/components/template-item-impl/template-item-header/template-item-header.module.d.ts +10 -0
  300. package/lib/components/template-item-impl/template-item-injector/index.d.ts +2 -0
  301. package/lib/components/template-item-impl/template-item-injector/template-item-injector.component.d.ts +43 -0
  302. package/lib/components/template-item-impl/template-item-injector/template-item-injector.module.d.ts +8 -0
  303. package/lib/components/template-item-impl/template-section/index.d.ts +2 -0
  304. package/lib/components/template-item-impl/template-section/template-section.component.d.ts +12 -0
  305. package/lib/components/template-item-impl/template-section/template-section.module.d.ts +13 -0
  306. package/lib/components/template-item-impl/text-item/index.d.ts +2 -0
  307. package/lib/components/template-item-impl/text-item/text-item.component.d.ts +7 -0
  308. package/lib/components/template-item-impl/text-item/text-item.module.d.ts +10 -0
  309. package/lib/components/template-item-impl/title-item/_title-item-template-theme.scss +28 -0
  310. package/lib/components/template-item-impl/title-item/index.d.ts +2 -0
  311. package/lib/components/template-item-impl/title-item/title-item.component.d.ts +7 -0
  312. package/lib/components/template-item-impl/title-item/title-item.module.d.ts +9 -0
  313. package/lib/components/template-item-impl/unordered-list-item/index.d.ts +2 -0
  314. package/lib/components/template-item-impl/unordered-list-item/unordered-list-item.component.d.ts +7 -0
  315. package/lib/components/template-item-impl/unordered-list-item/unordered-list-item.module.d.ts +10 -0
  316. package/lib/components/template-item-impl/whole-number-answer-item/index.d.ts +2 -0
  317. package/lib/components/template-item-impl/whole-number-answer-item/whole-number-answer-item.component.d.ts +8 -0
  318. package/lib/components/template-item-impl/whole-number-answer-item/whole-number-answer-item.module.d.ts +13 -0
  319. package/lib/core/_all-color.scss +18 -0
  320. package/lib/core/_all-theme.scss +18 -0
  321. package/lib/core/_all-typography.scss +18 -0
  322. package/lib/core/_mixins.scss +58 -0
  323. package/lib/models/custom-date-format-provider.model.d.ts +2 -0
  324. package/lib/models/date/default-year-range.model.d.ts +6 -0
  325. package/lib/models/date/index.d.ts +1 -0
  326. package/lib/models/design/conditional-processing-resources.model.d.ts +7 -0
  327. package/lib/models/design/design-mapper/boolean-item-template-mapper.d.ts +10 -0
  328. package/lib/models/design/design-mapper/bulleted-list-item-template-mapper.d.ts +11 -0
  329. package/lib/models/design/design-mapper/checkbox-item-template-mapper.d.ts +10 -0
  330. package/lib/models/design/design-mapper/date-item-template-mapper.d.ts +11 -0
  331. package/lib/models/design/design-mapper/dropdown-item-template-mapper.d.ts +11 -0
  332. package/lib/models/design/design-mapper/file-upload-item-template-mapper.d.ts +11 -0
  333. package/lib/models/design/design-mapper/i18n-text-response-item-template-mapper.d.ts +11 -0
  334. package/lib/models/design/design-mapper/index.d.ts +26 -0
  335. package/lib/models/design/design-mapper/mapper-classes.model.d.ts +1 -0
  336. package/lib/models/design/design-mapper/mapping-logic-core.d.ts +19 -0
  337. package/lib/models/design/design-mapper/multiple-choice-item-template-mapper.d.ts +10 -0
  338. package/lib/models/design/design-mapper/numbered-list-item-template-mapper.d.ts +11 -0
  339. package/lib/models/design/design-mapper/numeric-response-item-template-mapper.d.ts +11 -0
  340. package/lib/models/design/design-mapper/offset-date-range-template-mapper.d.ts +11 -0
  341. package/lib/models/design/design-mapper/option-group-item-mapper.d.ts +13 -0
  342. package/lib/models/design/design-mapper/option-item-mapper.d.ts +13 -0
  343. package/lib/models/design/design-mapper/option-selector-mapper.d.ts +29 -0
  344. package/lib/models/design/design-mapper/repeatable-item-template-mapper.d.ts +11 -0
  345. package/lib/models/design/design-mapper/template-item-group-mapper.d.ts +12 -0
  346. package/lib/models/design/design-mapper/template-item-mapper.d.ts +13 -0
  347. package/lib/models/design/design-mapper/template-mapper.d.ts +13 -0
  348. package/lib/models/design/design-mapper/template-section-mapper.d.ts +12 -0
  349. package/lib/models/design/design-mapper/text-item-template-mapper.d.ts +11 -0
  350. package/lib/models/design/design-mapper/text-response-item-template-mapper.d.ts +11 -0
  351. package/lib/models/design/design-mapper/time-item-template-mapper.d.ts +11 -0
  352. package/lib/models/design/design-mapper/title-item-template-mapper.d.ts +11 -0
  353. package/lib/models/design/design-mapper/year-quarter-range-template-mapper.d.ts +11 -0
  354. package/lib/models/design/enumerations/date-enumeration.model.d.ts +8 -0
  355. package/lib/models/design/enumerations/index.d.ts +1 -0
  356. package/lib/models/design/index.d.ts +8 -0
  357. package/lib/models/design/option-group-item-section-display-name-map.model.d.ts +3 -0
  358. package/lib/models/design/option-item-section-display-name-map.model.d.ts +3 -0
  359. package/lib/models/design/potential-designs.model.d.ts +27 -0
  360. package/lib/models/design/template-design-constants.model.d.ts +47 -0
  361. package/lib/models/design/template-design-context.model.d.ts +3 -0
  362. package/lib/models/i18n-constants.model.d.ts +183 -0
  363. package/lib/models/index.d.ts +4 -0
  364. package/lib/pipes/get-i18n-string-value-from-locale.pipe.d.ts +14 -0
  365. package/lib/pipes/get-i18n-strings-value-from-locale.pipe.d.ts +14 -0
  366. package/lib/pipes/index.d.ts +5 -0
  367. package/lib/pipes/instance-of-template-item-group-impl.pipe.d.ts +14 -0
  368. package/lib/pipes/instance-of-template-item.pipe.d.ts +13 -0
  369. package/lib/pipes/instance-of-template.pipe.d.ts +13 -0
  370. package/lib/services/api.service.d.ts +4 -2
  371. package/lib/services/dialog.service.d.ts +3 -3
  372. package/lib/services/index.d.ts +1 -0
  373. package/lib/services/template-transformation.service.d.ts +14 -0
  374. package/lib/state/design/index.d.ts +1 -0
  375. package/lib/state/design/template-design.facade.d.ts +31 -0
  376. package/lib/state/form/index.d.ts +7 -0
  377. package/lib/state/form/template-form-api.actions.d.ts +13 -0
  378. package/lib/state/form/template-form.actions.d.ts +12 -0
  379. package/lib/state/form/template-form.effects.d.ts +23 -0
  380. package/lib/state/form/template-form.facade.d.ts +16 -0
  381. package/lib/state/form/template-form.reducer.d.ts +11 -0
  382. package/lib/state/form/template-form.selectors.d.ts +6 -0
  383. package/lib/state/index.d.ts +2 -0
  384. package/lib/utilities/design-conditionals-util.d.ts +13 -0
  385. package/lib/utilities/form-option-design-util.d.ts +12 -0
  386. package/lib/utilities/generate-form-steps.d.ts +2 -2
  387. package/lib/utilities/index.d.ts +5 -1
  388. package/lib/utilities/merge-template-util.d.ts +11 -0
  389. package/lib/utilities/new-base-designs.util.d.ts +25 -0
  390. package/lib/utilities/serializer-util.d.ts +1 -0
  391. package/lib/utilities/template-design-core-util.d.ts +10 -0
  392. package/lib/utilities/template-design-util.d.ts +14 -0
  393. package/package.json +5 -2
  394. package/public-api.d.ts +1 -0
@@ -0,0 +1,193 @@
1
+ import { BOOLEAN_ITEM_TEMPLATE_ID, BULLETED_LIST_ITEM_TEMPLATE_ID, CHECKBOX_ITEM_TEMPLATE_ID, DATE_ITEM_TEMPLATE_ID, DECIMAL_ANSWER_ITEM_TEMPLATE_ID, DROPDOWN_ITEM_TEMPLATE_ID, FILE_UPLOAD_ITEM_TEMPLATE_ID, INTERNATIONALIZED_PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, INTERNATIONALIZED_SHORT_ANSWER_ITEM_TEMPLATE_ID, MULTIPLE_CHOICE_ITEM_TEMPLATE_ID, NUMBERED_LIST_ITEM_TEMPLATE_ID, OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID, PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, SHORT_ANSWER_ITEM_TEMPLATE_ID, TEMPLATE_ITEM_GROUP_IMPL_ID, TEMPLATE_SECTION_IMPL_ID, TEXT_ITEM_TEMPLATE_ID, TIME_ITEM_TEMPLATE_ID, TITLE_ITEM_TEMPLATE_ID, WHOLE_NUMBER_ANSWER_ITEM_TEMPLATE_ID, YEAR_QUARTER_RANGE_ITEM_TEMPLATE_ID, } from '@mtna/web-form-ts';
2
+ import { i18n_booleanItem, i18n_checkboxItem, i18n_date, i18n_dateItem, i18n_decimalAnswerItem, i18n_decimalValue, i18n_descriptiveText, i18n_dropdown, i18n_dropdownItem, i18n_exampleText, i18n_fileUploadItem, i18n_groupItem, i18n_internationalizedParagraphAnswer, i18n_internationalizedParagraphAnswerItem, i18n_internationalizedShortAnswer, i18n_internationalizedShortAnswerItem, i18n_multipleChoiceItem, i18n_newOption, i18n_newTemplateItem, i18n_offsetDateRangeItem, i18n_orderedListItem, i18n_paragraphAnswer, i18n_paragraphAnswerItem, i18n_questionText, i18n_sectionItem, i18n_shortAnswer, i18n_shortAnswerItem, i18n_textItem, i18n_timeItem, i18n_titleItem, i18n_unorderedListItem, i18n_wholeNumberAnswerItem, i18n_wholeNumberValue, i18n_yearQuarterRangeItem, } from '../models/i18n-constants.model';
3
+ import { v4 as uuidv4 } from 'uuid';
4
+ const newTemplateItemNameMap = {
5
+ [BOOLEAN_ITEM_TEMPLATE_ID]: i18n_booleanItem,
6
+ [BULLETED_LIST_ITEM_TEMPLATE_ID]: i18n_unorderedListItem,
7
+ [CHECKBOX_ITEM_TEMPLATE_ID]: i18n_checkboxItem,
8
+ [DATE_ITEM_TEMPLATE_ID]: i18n_dateItem,
9
+ [DECIMAL_ANSWER_ITEM_TEMPLATE_ID]: i18n_decimalAnswerItem,
10
+ [DROPDOWN_ITEM_TEMPLATE_ID]: i18n_dropdownItem,
11
+ [FILE_UPLOAD_ITEM_TEMPLATE_ID]: i18n_fileUploadItem,
12
+ [INTERNATIONALIZED_PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID]: i18n_internationalizedParagraphAnswerItem,
13
+ [INTERNATIONALIZED_SHORT_ANSWER_ITEM_TEMPLATE_ID]: i18n_internationalizedShortAnswerItem,
14
+ [MULTIPLE_CHOICE_ITEM_TEMPLATE_ID]: i18n_multipleChoiceItem,
15
+ [NUMBERED_LIST_ITEM_TEMPLATE_ID]: i18n_orderedListItem,
16
+ [OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID]: i18n_offsetDateRangeItem,
17
+ [PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID]: i18n_paragraphAnswerItem,
18
+ [SHORT_ANSWER_ITEM_TEMPLATE_ID]: i18n_shortAnswerItem,
19
+ [TEMPLATE_ITEM_GROUP_IMPL_ID]: i18n_groupItem,
20
+ [TEMPLATE_SECTION_IMPL_ID]: i18n_sectionItem,
21
+ [TEXT_ITEM_TEMPLATE_ID]: i18n_textItem,
22
+ [TIME_ITEM_TEMPLATE_ID]: i18n_timeItem,
23
+ [TITLE_ITEM_TEMPLATE_ID]: i18n_titleItem,
24
+ [WHOLE_NUMBER_ANSWER_ITEM_TEMPLATE_ID]: i18n_wholeNumberAnswerItem,
25
+ [YEAR_QUARTER_RANGE_ITEM_TEMPLATE_ID]: i18n_yearQuarterRangeItem,
26
+ };
27
+ const baseTemplateItem = (designBase, languageId) => {
28
+ var _a;
29
+ return {
30
+ itemId: designBase.type,
31
+ instanceId: designBase.id,
32
+ annotatableId: designBase.id,
33
+ descriptiveText: [{ facetId: languageId, value: i18n_descriptiveText }],
34
+ name: (_a = newTemplateItemNameMap[designBase.type]) !== null && _a !== void 0 ? _a : i18n_newTemplateItem,
35
+ questionText: [{ facetId: languageId, value: i18n_questionText }],
36
+ annotationEnabled: false,
37
+ excludeFromPrint: false,
38
+ required: false,
39
+ ignoreConditionalInstructions: false,
40
+ printAlternative: '',
41
+ };
42
+ };
43
+ const baseTemplateItemImpl = (designBase, languageId) => {
44
+ return Object.assign(Object.assign({}, baseTemplateItem(designBase, languageId)), { disabled: false, hasCondition: false, hideOnDisable: false });
45
+ };
46
+ const booleanOption = {
47
+ containerDescription: '',
48
+ conditionalInstructions: '',
49
+ name: i18n_newOption,
50
+ id: uuidv4(),
51
+ help: '',
52
+ description: '',
53
+ value: false,
54
+ };
55
+ const stringOption = {
56
+ containerDescription: '',
57
+ conditionalInstructions: '',
58
+ name: i18n_newOption,
59
+ id: uuidv4(),
60
+ help: '',
61
+ description: '',
62
+ value: i18n_newOption,
63
+ };
64
+ const newFormOptionSelectorStringOption = {
65
+ containerDescription: '',
66
+ codeValue: '',
67
+ acknowledgement: undefined,
68
+ disabledItems: [],
69
+ enabledItems: [],
70
+ multiSelect: false,
71
+ option: stringOption,
72
+ selected: false,
73
+ selectionCount: 0,
74
+ unavailable: false,
75
+ };
76
+ const newFormOptionSelectorBooleanOption = {
77
+ containerDescription: '',
78
+ codeValue: '',
79
+ acknowledgement: undefined,
80
+ disabledItems: [],
81
+ enabledItems: [],
82
+ multiSelect: false,
83
+ option: booleanOption,
84
+ selected: false,
85
+ selectionCount: 0,
86
+ unavailable: false,
87
+ };
88
+ export const getNewBooleanItemTemplate = (designBase, languageId) => {
89
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { codeOption: undefined, option: newFormOptionSelectorBooleanOption, optionTemplateMap: {} });
90
+ };
91
+ export const getNewCheckboxItemTemplate = (designBase, languageId) => {
92
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { codeValueTemplateInline: {}, codeValueTemplateMap: {}, maxSelections: 1, minSelections: 0, optionSubsets: [], optionTemplateMap: {}, options: [newFormOptionSelectorStringOption] });
93
+ };
94
+ export const getNewDateItemTemplate = (designBase, languageId) => {
95
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { format: 'YYYY/MM/dd', label: [{ facetId: languageId, value: i18n_date }], presetValue: new Date() });
96
+ };
97
+ export const getNewDecimalAnswerItemTemplate = (designBase, languageId) => {
98
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { label: [{ facetId: languageId, value: i18n_decimalValue }], maxValue: 100, minValue: -100, positiveOnly: false });
99
+ };
100
+ export const getNewDropdownItemTemplate = (designBase, languageId) => {
101
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { label: [{ facetId: languageId, value: i18n_dropdown }], codeValueTemplateInline: {}, codeValueTemplateMap: {}, optionTemplateMap: {}, options: [newFormOptionSelectorStringOption], optionSubsets: [], minSelections: 0, maxSelections: 1 });
102
+ };
103
+ export const getNewFileUploadItemTemplate = (designBase, languageId) => {
104
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { downloadAllowed: false, fileTypeId: '' });
105
+ };
106
+ export const getNewI18nParagraphAnswerItemTemplate = (designBase, languageId, languageTags = []) => {
107
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { label: [{ facetId: languageId, value: i18n_internationalizedParagraphAnswer }], languageTags });
108
+ };
109
+ export const getNewParagraphAnswerItemTemplate = (designBase, languageId) => {
110
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { label: [{ facetId: languageId, value: i18n_paragraphAnswer }], minCharCount: 0, maxCharCount: 100 });
111
+ };
112
+ export const getNewI18nShortAnswerItemTemplate = (designBase, languageId, languageTags = []) => {
113
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { label: [{ facetId: languageId, value: i18n_internationalizedShortAnswer }], languageTags });
114
+ };
115
+ export const getNewShortAnswerItemTemplate = (designBase, languageId) => {
116
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { label: [{ facetId: languageId, value: i18n_shortAnswer }], minCharCount: 0, maxCharCount: 100 });
117
+ };
118
+ export const getNewMultipleChoiceItemTemplate = (designBase, languageId) => {
119
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { codeValueTemplateMap: {}, codeValueTemplateInline: {}, optionTemplateMap: {}, options: [newFormOptionSelectorStringOption], optionSubsets: [], minSelections: 0, maxSelections: 1 });
120
+ };
121
+ export const getNewNumberedListItemTemplate = (designBase, languageId) => {
122
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { items: [{ facetId: languageId, value: [i18n_exampleText] }] });
123
+ };
124
+ export const getNewBulletedListItemTemplate = (designBase, languageId) => {
125
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { values: [{ facetId: languageId, value: [i18n_exampleText] }] });
126
+ };
127
+ export const getNewWholeNumberAnswerItemTemplate = (designBase, languageId) => {
128
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { label: [{ facetId: languageId, value: i18n_wholeNumberValue }], maxValue: 100, minValue: -100, positiveOnly: false });
129
+ };
130
+ export const getNewOffsetDateRangeItemTemplate = (designBase, languageId) => {
131
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { format: 'YYYY/MM/dd', rangeLimits: {
132
+ start: new Date(),
133
+ end: new Date(),
134
+ } });
135
+ };
136
+ export const getYearQuarterRangeItemTemplate = (designBase, languageId) => {
137
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { rangeLimits: {
138
+ start: { year: new Date().getFullYear(), quarter: 0 },
139
+ end: { year: new Date().getFullYear(), quarter: 3 },
140
+ } });
141
+ };
142
+ export const getNewTextItemTemplate = (designBase, languageId) => {
143
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { value: [{ facetId: languageId, value: 'Text' }] });
144
+ };
145
+ export const getNewTimeItemTemplate = (designBase, languageId) => {
146
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { format: '' });
147
+ };
148
+ export const getNewTitleItemTemplate = (designBase, languageId) => {
149
+ return Object.assign(Object.assign({}, baseTemplateItemImpl(designBase, languageId)), { value: [{ facetId: languageId, value: 'Title' }], level: 1 });
150
+ };
151
+ export const getNewTemplateItemGroup = (designBase, languageId) => {
152
+ return Object.assign(Object.assign({}, baseTemplateItem(designBase, languageId)), { items: [], layout: 'COLUMN' });
153
+ };
154
+ export const getNewTemplateSection = (designBase, languageId) => {
155
+ return Object.assign(Object.assign({}, getNewTemplateItemGroup(designBase, languageId)), { title: getNewTitleItemTemplate(designBase, languageId) });
156
+ };
157
+ const standardFactories = {
158
+ [BOOLEAN_ITEM_TEMPLATE_ID]: getNewBooleanItemTemplate,
159
+ [BULLETED_LIST_ITEM_TEMPLATE_ID]: getNewBulletedListItemTemplate,
160
+ [CHECKBOX_ITEM_TEMPLATE_ID]: getNewCheckboxItemTemplate,
161
+ [DATE_ITEM_TEMPLATE_ID]: getNewDateItemTemplate,
162
+ [DECIMAL_ANSWER_ITEM_TEMPLATE_ID]: getNewDecimalAnswerItemTemplate,
163
+ [DROPDOWN_ITEM_TEMPLATE_ID]: getNewDropdownItemTemplate,
164
+ [FILE_UPLOAD_ITEM_TEMPLATE_ID]: getNewFileUploadItemTemplate,
165
+ [MULTIPLE_CHOICE_ITEM_TEMPLATE_ID]: getNewMultipleChoiceItemTemplate,
166
+ [NUMBERED_LIST_ITEM_TEMPLATE_ID]: getNewNumberedListItemTemplate,
167
+ [OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID]: getNewOffsetDateRangeItemTemplate,
168
+ [PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID]: getNewParagraphAnswerItemTemplate,
169
+ [SHORT_ANSWER_ITEM_TEMPLATE_ID]: getNewShortAnswerItemTemplate,
170
+ [TEMPLATE_ITEM_GROUP_IMPL_ID]: getNewTemplateItemGroup,
171
+ [TEMPLATE_SECTION_IMPL_ID]: getNewTemplateSection,
172
+ [TEXT_ITEM_TEMPLATE_ID]: getNewTextItemTemplate,
173
+ [TIME_ITEM_TEMPLATE_ID]: getNewTimeItemTemplate,
174
+ [TITLE_ITEM_TEMPLATE_ID]: getNewTitleItemTemplate,
175
+ [WHOLE_NUMBER_ANSWER_ITEM_TEMPLATE_ID]: getNewWholeNumberAnswerItemTemplate,
176
+ [YEAR_QUARTER_RANGE_ITEM_TEMPLATE_ID]: getYearQuarterRangeItemTemplate,
177
+ };
178
+ const i18nFactories = {
179
+ [INTERNATIONALIZED_PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID]: getNewI18nParagraphAnswerItemTemplate,
180
+ [INTERNATIONALIZED_SHORT_ANSWER_ITEM_TEMPLATE_ID]: getNewI18nShortAnswerItemTemplate,
181
+ };
182
+ export function getNewInitTemplateItem(designBase, languageId, languageTags) {
183
+ if (designBase.type in standardFactories) {
184
+ const factory = standardFactories[designBase.type];
185
+ return factory(designBase, languageId);
186
+ }
187
+ if (designBase.type in i18nFactories) {
188
+ const i18nFactory = i18nFactories[designBase.type];
189
+ return i18nFactory(designBase, languageId, languageTags || []);
190
+ }
191
+ return baseTemplateItem(designBase, languageId);
192
+ }
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWJhc2UtZGVzaWducy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9uZXctYmFzZS1kZXNpZ25zLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHdCQUF3QixFQUd4Qiw4QkFBOEIsRUFFOUIseUJBQXlCLEVBRXpCLHFCQUFxQixFQUVyQiwrQkFBK0IsRUFFL0IseUJBQXlCLEVBRXpCLDRCQUE0QixFQUc1QixtREFBbUQsRUFDbkQsK0NBQStDLEVBRy9DLGdDQUFnQyxFQUVoQyw4QkFBOEIsRUFFOUIsa0NBQWtDLEVBRWxDLGlDQUFpQyxFQUVqQyw2QkFBNkIsRUFHN0IsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUt4QixxQkFBcUIsRUFFckIscUJBQXFCLEVBRXJCLHNCQUFzQixFQUV0QixvQ0FBb0MsRUFFcEMsbUNBQW1DLEdBRXBDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLHFDQUFxQyxFQUNyQyx5Q0FBeUMsRUFDekMsaUNBQWlDLEVBQ2pDLHFDQUFxQyxFQUNyQyx1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLHNCQUFzQixFQUN0QiwwQkFBMEIsRUFDMUIs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QyxtREFBbUQsQ0FBQyxFQUFFLHFDQUFxQztJQUM1RixDQUFDLCtDQUErQyxDQUFDLEVBQUUsaUNBQWlDO0NBQ3JGLENBQUM7QUFFRixNQUFNLFVBQVUsc0JBQXNCLENBQUMsVUFBc0IsRUFBRSxVQUEwQixFQUFFLFlBQXVCO0lBQ2hILElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRTtRQUN4QyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBbUMsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUN4QztJQUVELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxhQUFhLEVBQUU7UUFDcEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUF1QyxDQUFDLENBQUM7UUFDdEYsT0FBTyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7S0FDaEU7SUFFRCxPQUFPLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQk9PTEVBTl9JVEVNX1RFTVBMQVRFX0lELFxuICBCb29sZWFuSXRlbVRlbXBsYXRlLFxuICBCb29sZWFuT3B0aW9uLFxuICBCVUxMRVRFRF9MSVNUX0lURU1fVEVNUExBVEVfSUQsXG4gIEJ1bGxldGVkTGlzdEl0ZW1UZW1wbGF0ZSxcbiAgQ0hFQ0tCT1hfSVRFTV9URU1QTEFURV9JRCxcbiAgQ2hlY2tib3hJdGVtVGVtcGxhdGUsXG4gIERBVEVfSVRFTV9URU1QTEFURV9JRCxcbiAgRGF0ZUl0ZW1UZW1wbGF0ZSxcbiAgREVDSU1BTF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRCxcbiAgRGVjaW1hbEFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgRFJPUERPV05fSVRFTV9URU1QTEFURV9JRCxcbiAgRHJvcGRvd25JdGVtVGVtcGxhdGUsXG4gIEZJTEVfVVBMT0FEX0lURU1fVEVNUExBVEVfSUQsXG4gIEZpbGVVcGxvYWRJdGVtVGVtcGxhdGUsXG4gIEZvcm1PcHRpb25TZWxlY3RvcixcbiAgSU5URVJOQVRJT05BTElaRURfUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBJTlRFUk5BVElPTkFMSVpFRF9TSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRCxcbiAgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIE1VTFRJUExFX0NIT0lDRV9JVEVNX1RFTVBMQVRFX0lELFxuICBNdWx0aXBsZUNob2ljZUl0ZW1UZW1wbGF0ZSxcbiAgTlVNQkVSRURfTElTVF9JVEVNX1RFTVBMQVRFX0lELFxuICBOdW1iZXJlZExpc3RJdGVtVGVtcGxhdGUsXG4gIE9GRlNFVF9EQVRFX1JBTkdFX0lURU1fVEVNUExBVEVfSUQsXG4gIE9mZnNldERhdGVSYW5nZVRlbXBsYXRlLFxuICBQQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIFBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgU0hPUlRfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIFNob3J0QW5zd2VySXRlbVRlbXBsYXRlLFxuICBTdHJpbmdPcHRpb24sXG4gIFRFTVBMQVRFX0lURU1fR1JPVVBfSU1QTF9JRCxcbiAgVEVNUExBVEVfU0VDVElPTl9JTVBMX0lELFxuICBUZW1wbGF0ZUl0ZW0sXG4gIFRlbXBsYXRlSXRlbUdyb3VwLFxuICBUZW1wbGF0ZUl0ZW1JbXBsLFxuICBUZW1wbGF0ZVNlY3Rpb24sXG4gIFRFWFRfSVRFTV9URU1QTEFURV9JRCxcbiAgVGV4dEl0ZW1UZW1wbGF0ZSxcbiAgVElNRV9JVEVNX1RFTVBMQVRFX0lELFxuICBUaW1lSXRlbVRlbXBsYXRlLFxuICBUSVRMRV9JVEVNX1RFTVBMQVRFX0lELFxuICBUaXRsZUl0ZW1UZW1wbGF0ZSxcbiAgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBXaG9sZU51bWJlckFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgWUVBUl9RVUFSVEVSX1JBTkdFX0lURU1fVEVNUExBVEVfSUQsXG4gIFllYXJRdWFydGVyUmFuZ2VUZW1wbGF0ZSxcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHtcbiAgaTE4bl9ib29sZWFuSXRlbSxcbiAgaTE4bl9jaGVja2JveEl0ZW0sXG4gIGkxOG5fZGF0ZSxcbiAgaTE4bl9kYXRlSXRlbSxcbiAgaTE4bl9kZWNpbWFsQW5zd2VySXRlbSxcbiAgaTE4bl9kZWNpbWFsVmFsdWUsXG4gIGkxOG5fZGVzY3JpcHRpdmVUZXh0LFxuICBpMThuX2Ryb3Bkb3duLFxuICBpMThuX2Ryb3Bkb3duSXRlbSxcbiAgaTE4bl9leGFtcGxlVGV4dCxcbiAgaTE4bl9maWxlVXBsb2FkSXRlbSxcbiAgaTE4bl9ncm91cEl0ZW0sXG4gIGkxOG5faW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXIsXG4gIGkxOG5faW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBpMThuX2ludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXIsXG4gIGkxOG5faW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW0sXG4gIGkxOG5fbXVsdGlwbGVDaG9pY2VJdGVtLFxuICBpMThuX25ld09wdGlvbixcbiAgaTE4bl9uZXdUZW1wbGF0ZUl0ZW0sXG4gIGkxOG5fb2Zmc2V0RGF0ZVJhbmdlSXRlbSxcbiAgaTE4bl9vcmRlcmVkTGlzdEl0ZW0sXG4gIGkxOG5fcGFyYWdyYXBoQW5zd2VyLFxuICBpMThuX3BhcmFncmFwaEFuc3dlckl0ZW0sXG4gIGkxOG5fcXVlc3Rpb25UZXh0LFxuICBpMThuX3NlY3Rpb25JdGVtLFxuICBpMThuX3Nob3J0QW5zd2VyLFxuICBpMThuX3Nob3J0QW5zd2VySXRlbSxcbiAgaTE4bl90ZXh0SXRlbSxcbiAgaTE4bl90aW1lSXRlbSxcbiAgaTE4bl90aXRsZUl0ZW0sXG4gIGkxOG5fdW5vcmRlcmVkTGlzdEl0ZW0sXG4gIGkxOG5fd2hvbGVOdW1iZXJBbnN3ZXJJdGVtLFxuICBpMThuX3dob2xlTnVtYmVyVmFsdWUsXG4gIGkxOG5feWVhclF1YXJ0ZXJSYW5nZUl0ZW0sXG59IGZyb20gJy4uL21vZGVscy9pMThuLWNvbnN0YW50cy5tb2RlbCc7XG5pbXBvcnQgeyBEZXNpZ25CYXNlIH0gZnJvbSAnQG10bmEvZGVzaWduZXItdHMnO1xuaW1wb3J0IHsgTXRuYUxhbmd1YWdlSWQgfSBmcm9tICdAbXRuYS9jb3JlLWkxOG4tYW5ndWxhcic7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuY29uc3QgbmV3VGVtcGxhdGVJdGVtTmFtZU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgW0JPT0xFQU5fSVRFTV9URU1QTEFURV9JRF06IGkxOG5fYm9vbGVhbkl0ZW0sXG4gIFtCVUxMRVRFRF9MSVNUX0lURU1fVEVNUExBVEVfSURdOiBpMThuX3Vub3JkZXJlZExpc3RJdGVtLFxuICBbQ0hFQ0tCT1hfSVRFTV9URU1QTEFURV9JRF06IGkxOG5fY2hlY2tib3hJdGVtLFxuICBbREFURV9JVEVNX1RFTVBMQVRFX0lEXTogaTE4bl9kYXRlSXRlbSxcbiAgW0RFQ0lNQUxfQU5TV0VSX0lURU1fVEVNUExBVEVfSURdOiBpMThuX2RlY2ltYWxBbnN3ZXJJdGVtLFxuICBbRFJPUERPV05fSVRFTV9URU1QTEFURV9JRF06IGkxOG5fZHJvcGRvd25JdGVtLFxuICBbRklMRV9VUExPQURfSVRFTV9URU1QTEFURV9JRF06IGkxOG5fZmlsZVVwbG9hZEl0ZW0sXG4gIFtJTlRFUk5BVElPTkFMSVpFRF9QQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSURdOiBpMThuX2ludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgW0lOVEVSTkFUSU9OQUxJWkVEX1NIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEXTogaTE4bl9pbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbSxcbiAgW01VTFRJUExFX0NIT0lDRV9JVEVNX1RFTVBMQVRFX0lEXTogaTE4bl9tdWx0aXBsZUNob2ljZUl0ZW0sXG4gIFtOVU1CRVJFRF9MSVNUX0lURU1fVEVNUExBVEVfSURdOiBpMThuX29yZGVyZWRMaXN0SXRlbSxcbiAgW09GRlNFVF9EQVRFX1JBTkdFX0lURU1fVEVNUExBVEVfSURdOiBpMThuX29mZnNldERhdGVSYW5nZUl0ZW0sXG4gIFtQQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSURdOiBpMThuX3BhcmFncmFwaEFuc3dlckl0ZW0sXG4gIFtTSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRF06IGkxOG5fc2hvcnRBbnN3ZXJJdGVtLFxuICBbVEVNUExBVEVfSVRFTV9HUk9VUF9JTVBMX0lEXTogaTE4bl9ncm91cEl0ZW0sXG4gIFtURU1QTEFURV9TRUNUSU9OX0lNUExfSURdOiBpMThuX3NlY3Rpb25JdGVtLFxuICBbVEVYVF9JVEVNX1RFTVBMQVRFX0lEXTogaTE4bl90ZXh0SXRlbSxcbiAgW1RJTUVfSVRFTV9URU1QTEFURV9JRF06IGkxOG5fdGltZUl0ZW0sXG4gIFtUSVRMRV9JVEVNX1RFTVBMQVRFX0lEXTogaTE4bl90aXRsZUl0ZW0sXG4gIFtXSE9MRV9OVU1CRVJfQU5TV0VSX0lURU1fVEVNUExBVEVfSURdOiBpMThuX3dob2xlTnVtYmVyQW5zd2VySXRlbSxcbiAgW1lFQVJfUVVBUlRFUl9SQU5HRV9JVEVNX1RFTVBMQVRFX0lEXTogaTE4bl95ZWFyUXVhcnRlclJhbmdlSXRlbSxcbn07XG5cbmNvbnN0IGJhc2VUZW1wbGF0ZUl0ZW0gPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBUZW1wbGF0ZUl0ZW0gPT4ge1xuICByZXR1cm4ge1xuICAgIGl0ZW1JZDogZGVzaWduQmFzZS50eXBlLFxuICAgIGluc3RhbmNlSWQ6IGRlc2lnbkJhc2UuaWQsXG4gICAgYW5ub3RhdGFibGVJZDogZGVzaWduQmFzZS5pZCxcbiAgICBkZXNjcmlwdGl2ZVRleHQ6IFt7IGZhY2V0SWQ6IGxhbmd1YWdlSWQsIHZhbHVlOiBpMThuX2Rlc2NyaXB0aXZlVGV4dCB9XSxcbiAgICBuYW1lOiBuZXdUZW1wbGF0ZUl0ZW1OYW1lTWFwW2Rlc2lnbkJhc2UudHlwZV0gPz8gaTE4bl9uZXdUZW1wbGF0ZUl0ZW0sXG4gICAgcXVlc3Rpb25UZXh0OiBbeyBmYWNldElkOiBsYW5ndWFnZUlkLCB2YWx1ZTogaTE4bl9xdWVzdGlvblRleHQgfV0sXG4gICAgYW5ub3RhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgIGV4Y2x1ZGVGcm9tUHJpbnQ6IGZhbHNlLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBpZ25vcmVDb25kaXRpb25hbEluc3RydWN0aW9uczogZmFsc2UsXG4gICAgcHJpbnRBbHRlcm5hdGl2ZTogJycsXG4gIH07XG59O1xuXG5jb25zdCBiYXNlVGVtcGxhdGVJdGVtSW1wbCA9IChkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCk6IFRlbXBsYXRlSXRlbUltcGwgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VUZW1wbGF0ZUl0ZW0oZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGhhc0NvbmRpdGlvbjogZmFsc2UsXG4gICAgaGlkZU9uRGlzYWJsZTogZmFsc2UsXG4gIH07XG59O1xuXG5jb25zdCBib29sZWFuT3B0aW9uOiBCb29sZWFuT3B0aW9uID0ge1xuICBjb250YWluZXJEZXNjcmlwdGlvbjogJycsXG4gIGNvbmRpdGlvbmFsSW5zdHJ1Y3Rpb25zOiAnJyxcbiAgbmFtZTogaTE4bl9uZXdPcHRpb24sXG4gIGlkOiB1dWlkdjQoKSxcbiAgaGVscDogJycsXG4gIGRlc2NyaXB0aW9uOiAnJyxcbiAgdmFsdWU6IGZhbHNlLFxufTtcblxuY29uc3Qgc3RyaW5nT3B0aW9uOiBTdHJpbmdPcHRpb24gPSB7XG4gIGNvbnRhaW5lckRlc2NyaXB0aW9uOiAnJyxcbiAgY29uZGl0aW9uYWxJbnN0cnVjdGlvbnM6ICcnLFxuICBuYW1lOiBpMThuX25ld09wdGlvbixcbiAgaWQ6IHV1aWR2NCgpLFxuICBoZWxwOiAnJyxcbiAgZGVzY3JpcHRpb246ICcnLFxuICB2YWx1ZTogaTE4bl9uZXdPcHRpb24sXG59O1xuXG5jb25zdCBuZXdGb3JtT3B0aW9uU2VsZWN0b3JTdHJpbmdPcHRpb246IEZvcm1PcHRpb25TZWxlY3RvcjxTdHJpbmdPcHRpb24+ID0ge1xuICBjb250YWluZXJEZXNjcmlwdGlvbjogJycsXG4gIGNvZGVWYWx1ZTogJycsXG4gIGFja25vd2xlZGdlbWVudDogdW5kZWZpbmVkLFxuICBkaXNhYmxlZEl0ZW1zOiBbXSxcbiAgZW5hYmxlZEl0ZW1zOiBbXSxcbiAgbXVsdGlTZWxlY3Q6IGZhbHNlLFxuICBvcHRpb246IHN0cmluZ09wdGlvbixcbiAgc2VsZWN0ZWQ6IGZhbHNlLFxuICBzZWxlY3Rpb25Db3VudDogMCxcbiAgdW5hdmFpbGFibGU6IGZhbHNlLFxufTtcblxuY29uc3QgbmV3Rm9ybU9wdGlvblNlbGVjdG9yQm9vbGVhbk9wdGlvbjogRm9ybU9wdGlvblNlbGVjdG9yPEJvb2xlYW5PcHRpb24+ID0ge1xuICBjb250YWluZXJEZXNjcmlwdGlvbjogJycsXG4gIGNvZGVWYWx1ZTogJycsXG4gIGFja25vd2xlZGdlbWVudDogdW5kZWZpbmVkLFxuICBkaXNhYmxlZEl0ZW1zOiBbXSxcbiAgZW5hYmxlZEl0ZW1zOiBbXSxcbiAgbXVsdGlTZWxlY3Q6IGZhbHNlLFxuICBvcHRpb246IGJvb2xlYW5PcHRpb24sXG4gIHNlbGVjdGVkOiBmYWxzZSxcbiAgc2VsZWN0aW9uQ291bnQ6IDAsXG4gIHVuYXZhaWxhYmxlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdCb29sZWFuSXRlbVRlbXBsYXRlID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkKTogQm9vbGVhbkl0ZW1UZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgY29kZU9wdGlvbjogdW5kZWZpbmVkLFxuICAgIG9wdGlvbjogbmV3Rm9ybU9wdGlvblNlbGVjdG9yQm9vbGVhbk9wdGlvbixcbiAgICBvcHRpb25UZW1wbGF0ZU1hcDoge30sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3Q2hlY2tib3hJdGVtVGVtcGxhdGUgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBDaGVja2JveEl0ZW1UZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgY29kZVZhbHVlVGVtcGxhdGVJbmxpbmU6IHt9LFxuICAgIGNvZGVWYWx1ZVRlbXBsYXRlTWFwOiB7fSxcbiAgICBtYXhTZWxlY3Rpb25zOiAxLFxuICAgIG1pblNlbGVjdGlvbnM6IDAsXG4gICAgb3B0aW9uU3Vic2V0czogW10sXG4gICAgb3B0aW9uVGVtcGxhdGVNYXA6IHt9LFxuICAgIG9wdGlvbnM6IFtuZXdGb3JtT3B0aW9uU2VsZWN0b3JTdHJpbmdPcHRpb25dLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5ld0RhdGVJdGVtVGVtcGxhdGUgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBEYXRlSXRlbVRlbXBsYXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlVGVtcGxhdGVJdGVtSW1wbChkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKSxcbiAgICBmb3JtYXQ6ICdZWVlZL01NL2RkJyxcbiAgICBsYWJlbDogW3sgZmFjZXRJZDogbGFuZ3VhZ2VJZCwgdmFsdWU6IGkxOG5fZGF0ZSB9XSxcbiAgICBwcmVzZXRWYWx1ZTogbmV3IERhdGUoKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdEZWNpbWFsQW5zd2VySXRlbVRlbXBsYXRlID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkKTogRGVjaW1hbEFuc3dlckl0ZW1UZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgbGFiZWw6IFt7IGZhY2V0SWQ6IGxhbmd1YWdlSWQsIHZhbHVlOiBpMThuX2RlY2ltYWxWYWx1ZSB9XSxcbiAgICBtYXhWYWx1ZTogMTAwLFxuICAgIG1pblZhbHVlOiAtMTAwLFxuICAgIHBvc2l0aXZlT25seTogZmFsc2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3RHJvcGRvd25JdGVtVGVtcGxhdGUgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBEcm9wZG93bkl0ZW1UZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgbGFiZWw6IFt7IGZhY2V0SWQ6IGxhbmd1YWdlSWQsIHZhbHVlOiBpMThuX2Ryb3Bkb3duIH1dLFxuICAgIGNvZGVWYWx1ZVRlbXBsYXRlSW5saW5lOiB7fSxcbiAgICBjb2RlVmFsdWVUZW1wbGF0ZU1hcDoge30sXG4gICAgb3B0aW9uVGVtcGxhdGVNYXA6IHt9LFxuICAgIG9wdGlvbnM6IFtuZXdGb3JtT3B0aW9uU2VsZWN0b3JTdHJpbmdPcHRpb25dLFxuICAgIG9wdGlvblN1YnNldHM6IFtdLFxuICAgIG1pblNlbGVjdGlvbnM6IDAsXG4gICAgbWF4U2VsZWN0aW9uczogMSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdGaWxlVXBsb2FkSXRlbVRlbXBsYXRlID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkKTogRmlsZVVwbG9hZEl0ZW1UZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgZG93bmxvYWRBbGxvd2VkOiBmYWxzZSxcbiAgICBmaWxlVHlwZUlkOiAnJyxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdJMThuUGFyYWdyYXBoQW5zd2VySXRlbVRlbXBsYXRlID0gKFxuICBkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLFxuICBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCxcbiAgbGFuZ3VhZ2VUYWdzOiBzdHJpbmdbXSA9IFtdXG4pOiBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgbGFiZWw6IFt7IGZhY2V0SWQ6IGxhbmd1YWdlSWQsIHZhbHVlOiBpMThuX2ludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VyIH1dLFxuICAgIGxhbmd1YWdlVGFncyxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VUZW1wbGF0ZUl0ZW1JbXBsKGRlc2lnbkJhc2UsIGxhbmd1YWdlSWQpLFxuICAgIGxhYmVsOiBbeyBmYWNldElkOiBsYW5ndWFnZUlkLCB2YWx1ZTogaTE4bl9wYXJhZ3JhcGhBbnN3ZXIgfV0sXG4gICAgbWluQ2hhckNvdW50OiAwLFxuICAgIG1heENoYXJDb3VudDogMTAwLCAvLyBUT0RPIGZpbmQgbWF4IGludCBhbmQgYWRkIGl0IGhlcmVcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdJMThuU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUgPSAoXG4gIGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsXG4gIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkLFxuICBsYW5ndWFnZVRhZ3M6IHN0cmluZ1tdID0gW11cbik6IEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VUZW1wbGF0ZUl0ZW1JbXBsKGRlc2lnbkJhc2UsIGxhbmd1YWdlSWQpLFxuICAgIGxhYmVsOiBbeyBmYWNldElkOiBsYW5ndWFnZUlkLCB2YWx1ZTogaTE4bl9pbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VyIH1dLFxuICAgIGxhbmd1YWdlVGFncyxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdTaG9ydEFuc3dlckl0ZW1UZW1wbGF0ZSA9IChkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCk6IFNob3J0QW5zd2VySXRlbVRlbXBsYXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlVGVtcGxhdGVJdGVtSW1wbChkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKSxcbiAgICBsYWJlbDogW3sgZmFjZXRJZDogbGFuZ3VhZ2VJZCwgdmFsdWU6IGkxOG5fc2hvcnRBbnN3ZXIgfV0sXG4gICAgbWluQ2hhckNvdW50OiAwLFxuICAgIG1heENoYXJDb3VudDogMTAwLCAvLyBUT0RPIGZpbmQgbWF4IGludCBhbmQgYWRkIGl0IGhlcmVcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdNdWx0aXBsZUNob2ljZUl0ZW1UZW1wbGF0ZSA9IChkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCk6IE11bHRpcGxlQ2hvaWNlSXRlbVRlbXBsYXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlVGVtcGxhdGVJdGVtSW1wbChkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKSxcbiAgICBjb2RlVmFsdWVUZW1wbGF0ZU1hcDoge30sXG4gICAgY29kZVZhbHVlVGVtcGxhdGVJbmxpbmU6IHt9LFxuICAgIG9wdGlvblRlbXBsYXRlTWFwOiB7fSxcbiAgICBvcHRpb25zOiBbbmV3Rm9ybU9wdGlvblNlbGVjdG9yU3RyaW5nT3B0aW9uXSxcbiAgICBvcHRpb25TdWJzZXRzOiBbXSxcbiAgICBtaW5TZWxlY3Rpb25zOiAwLFxuICAgIG1heFNlbGVjdGlvbnM6IDEsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3TnVtYmVyZWRMaXN0SXRlbVRlbXBsYXRlID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkKTogTnVtYmVyZWRMaXN0SXRlbVRlbXBsYXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlVGVtcGxhdGVJdGVtSW1wbChkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKSxcbiAgICBpdGVtczogW3sgZmFjZXRJZDogbGFuZ3VhZ2VJZCwgdmFsdWU6IFtpMThuX2V4YW1wbGVUZXh0XSB9XSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdCdWxsZXRlZExpc3RJdGVtVGVtcGxhdGUgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBCdWxsZXRlZExpc3RJdGVtVGVtcGxhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VUZW1wbGF0ZUl0ZW1JbXBsKGRlc2lnbkJhc2UsIGxhbmd1YWdlSWQpLFxuICAgIHZhbHVlczogW3sgZmFjZXRJZDogbGFuZ3VhZ2VJZCwgdmFsdWU6IFtpMThuX2V4YW1wbGVUZXh0XSB9XSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdXaG9sZU51bWJlckFuc3dlckl0ZW1UZW1wbGF0ZSA9IChkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCk6IFdob2xlTnVtYmVyQW5zd2VySXRlbVRlbXBsYXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlVGVtcGxhdGVJdGVtSW1wbChkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKSxcbiAgICBsYWJlbDogW3sgZmFjZXRJZDogbGFuZ3VhZ2VJZCwgdmFsdWU6IGkxOG5fd2hvbGVOdW1iZXJWYWx1ZSB9XSxcbiAgICBtYXhWYWx1ZTogMTAwLFxuICAgIG1pblZhbHVlOiAtMTAwLFxuICAgIHBvc2l0aXZlT25seTogZmFsc2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3T2Zmc2V0RGF0ZVJhbmdlSXRlbVRlbXBsYXRlID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkKTogT2Zmc2V0RGF0ZVJhbmdlVGVtcGxhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VUZW1wbGF0ZUl0ZW1JbXBsKGRlc2lnbkJhc2UsIGxhbmd1YWdlSWQpLFxuICAgIGZvcm1hdDogJ1lZWVkvTU0vZGQnLCAvLyBUT0RPXG4gICAgcmFuZ2VMaW1pdHM6IHtcbiAgICAgIHN0YXJ0OiBuZXcgRGF0ZSgpLFxuICAgICAgZW5kOiBuZXcgRGF0ZSgpLFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0WWVhclF1YXJ0ZXJSYW5nZUl0ZW1UZW1wbGF0ZSA9IChkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCk6IFllYXJRdWFydGVyUmFuZ2VUZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgcmFuZ2VMaW1pdHM6IHtcbiAgICAgIHN0YXJ0OiB7IHllYXI6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgcXVhcnRlcjogMCB9LFxuICAgICAgZW5kOiB7IHllYXI6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgcXVhcnRlcjogMyB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3VGV4dEl0ZW1UZW1wbGF0ZSA9IChkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCk6IFRleHRJdGVtVGVtcGxhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VUZW1wbGF0ZUl0ZW1JbXBsKGRlc2lnbkJhc2UsIGxhbmd1YWdlSWQpLFxuICAgIHZhbHVlOiBbeyBmYWNldElkOiBsYW5ndWFnZUlkLCB2YWx1ZTogJ1RleHQnIH1dLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5ld1RpbWVJdGVtVGVtcGxhdGUgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBUaW1lSXRlbVRlbXBsYXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlVGVtcGxhdGVJdGVtSW1wbChkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKSxcbiAgICBmb3JtYXQ6ICcnLCAvLyBUT0RPXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3VGl0bGVJdGVtVGVtcGxhdGUgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpOiBUaXRsZUl0ZW1UZW1wbGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVRlbXBsYXRlSXRlbUltcGwoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgdmFsdWU6IFt7IGZhY2V0SWQ6IGxhbmd1YWdlSWQsIHZhbHVlOiAnVGl0bGUnIH1dLFxuICAgIGxldmVsOiAxLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5ld1RlbXBsYXRlSXRlbUdyb3VwID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkKTogVGVtcGxhdGVJdGVtR3JvdXAgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VUZW1wbGF0ZUl0ZW0oZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gICAgaXRlbXM6IFtdLFxuICAgIGxheW91dDogJ0NPTFVNTicsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3VGVtcGxhdGVTZWN0aW9uID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkKTogVGVtcGxhdGVTZWN0aW9uID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5nZXROZXdUZW1wbGF0ZUl0ZW1Hcm91cChkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKSxcbiAgICB0aXRsZTogZ2V0TmV3VGl0bGVJdGVtVGVtcGxhdGUoZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCksXG4gIH07XG59O1xuXG4vLyBHZXQgdGhlIGZhY3RvcnkgdHlwZXNcbnR5cGUgU3RhbmRhcmRUZW1wbGF0ZUZhY3RvcnkgPSAoZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQpID0+IFRlbXBsYXRlSXRlbTtcblxudHlwZSBJMThuVGVtcGxhdGVGYWN0b3J5ID0gKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkLCBsYW5ndWFnZVRhZ3M6IHN0cmluZ1tdKSA9PiBUZW1wbGF0ZUl0ZW07XG5cbi8vIE1hcCBvZiBmYWN0b3JpZXMga2V5ZWQgYnkgaWRcbmludGVyZmFjZSBUZW1wbGF0ZUl0ZW1GYWN0b3JpZXMge1xuICBbQk9PTEVBTl9JVEVNX1RFTVBMQVRFX0lEXTogU3RhbmRhcmRUZW1wbGF0ZUZhY3Rvcnk7XG4gIFtCVUxMRVRFRF9MSVNUX0lURU1fVEVNUExBVEVfSURdOiBTdGFuZGFyZFRlbXBsYXRlRmFjdG9yeTtcbiAgW0NIRUNLQk9YX0lURU1fVEVNUExBVEVfSURdOiBTdGFuZGFyZFRlbXBsYXRlRmFjdG9yeTtcbiAgW0RBVEVfSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbREVDSU1BTF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbRFJPUERPV05fSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbRklMRV9VUExPQURfSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbTVVMVElQTEVfQ0hPSUNFX0lURU1fVEVNUExBVEVfSURdOiBTdGFuZGFyZFRlbXBsYXRlRmFjdG9yeTtcbiAgW05VTUJFUkVEX0xJU1RfSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbT0ZGU0VUX0RBVEVfUkFOR0VfSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEXTogU3RhbmRhcmRUZW1wbGF0ZUZhY3Rvcnk7XG4gIFtTSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbVEVNUExBVEVfSVRFTV9HUk9VUF9JTVBMX0lEXTogU3RhbmRhcmRUZW1wbGF0ZUZhY3Rvcnk7XG4gIFtURU1QTEFURV9TRUNUSU9OX0lNUExfSURdOiBTdGFuZGFyZFRlbXBsYXRlRmFjdG9yeTtcbiAgW1RFWFRfSVRFTV9URU1QTEFURV9JRF06IFN0YW5kYXJkVGVtcGxhdGVGYWN0b3J5O1xuICBbVElNRV9JVEVNX1RFTVBMQVRFX0lEXTogU3RhbmRhcmRUZW1wbGF0ZUZhY3Rvcnk7XG4gIFtUSVRMRV9JVEVNX1RFTVBMQVRFX0lEXTogU3RhbmRhcmRUZW1wbGF0ZUZhY3Rvcnk7XG4gIFtXSE9MRV9OVU1CRVJfQU5TV0VSX0lURU1fVEVNUExBVEVfSURdOiBTdGFuZGFyZFRlbXBsYXRlRmFjdG9yeTtcbiAgW1lFQVJfUVVBUlRFUl9SQU5HRV9JVEVNX1RFTVBMQVRFX0lEXTogU3RhbmRhcmRUZW1wbGF0ZUZhY3Rvcnk7XG59XG5cbmludGVyZmFjZSBJMThuVGVtcGxhdGVJdGVtRmFjdG9yaWVzIHtcbiAgW0lOVEVSTkFUSU9OQUxJWkVEX1BBUkFHUkFQSF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRF06IEkxOG5UZW1wbGF0ZUZhY3Rvcnk7XG4gIFtJTlRFUk5BVElPTkFMSVpFRF9TSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRF06IEkxOG5UZW1wbGF0ZUZhY3Rvcnk7XG59XG5cbmNvbnN0IHN0YW5kYXJkRmFjdG9yaWVzOiBUZW1wbGF0ZUl0ZW1GYWN0b3JpZXMgPSB7XG4gIFtCT09MRUFOX0lURU1fVEVNUExBVEVfSURdOiBnZXROZXdCb29sZWFuSXRlbVRlbXBsYXRlLFxuICBbQlVMTEVURURfTElTVF9JVEVNX1RFTVBMQVRFX0lEXTogZ2V0TmV3QnVsbGV0ZWRMaXN0SXRlbVRlbXBsYXRlLFxuICBbQ0hFQ0tCT1hfSVRFTV9URU1QTEFURV9JRF06IGdldE5ld0NoZWNrYm94SXRlbVRlbXBsYXRlLFxuICBbREFURV9JVEVNX1RFTVBMQVRFX0lEXTogZ2V0TmV3RGF0ZUl0ZW1UZW1wbGF0ZSxcbiAgW0RFQ0lNQUxfQU5TV0VSX0lURU1fVEVNUExBVEVfSURdOiBnZXROZXdEZWNpbWFsQW5zd2VySXRlbVRlbXBsYXRlLFxuICBbRFJPUERPV05fSVRFTV9URU1QTEFURV9JRF06IGdldE5ld0Ryb3Bkb3duSXRlbVRlbXBsYXRlLFxuICBbRklMRV9VUExPQURfSVRFTV9URU1QTEFURV9JRF06IGdldE5ld0ZpbGVVcGxvYWRJdGVtVGVtcGxhdGUsXG4gIFtNVUxUSVBMRV9DSE9JQ0VfSVRFTV9URU1QTEFURV9JRF06IGdldE5ld011bHRpcGxlQ2hvaWNlSXRlbVRlbXBsYXRlLFxuICBbTlVNQkVSRURfTElTVF9JVEVNX1RFTVBMQVRFX0lEXTogZ2V0TmV3TnVtYmVyZWRMaXN0SXRlbVRlbXBsYXRlLFxuICBbT0ZGU0VUX0RBVEVfUkFOR0VfSVRFTV9URU1QTEFURV9JRF06IGdldE5ld09mZnNldERhdGVSYW5nZUl0ZW1UZW1wbGF0ZSxcbiAgW1BBUkFHUkFQSF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRF06IGdldE5ld1BhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgW1NIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEXTogZ2V0TmV3U2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIFtURU1QTEFURV9JVEVNX0dST1VQX0lNUExfSURdOiBnZXROZXdUZW1wbGF0ZUl0ZW1Hcm91cCxcbiAgW1RFTVBMQVRFX1NFQ1RJT05fSU1QTF9JRF06IGdldE5ld1RlbXBsYXRlU2VjdGlvbixcbiAgW1RFWFRfSVRFTV9URU1QTEFURV9JRF06IGdldE5ld1RleHRJdGVtVGVtcGxhdGUsXG4gIFtUSU1FX0lURU1fVEVNUExBVEVfSURdOiBnZXROZXdUaW1lSXRlbVRlbXBsYXRlLFxuICBbVElUTEVfSVRFTV9URU1QTEFURV9JRF06IGdldE5ld1RpdGxlSXRlbVRlbXBsYXRlLFxuICBbV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEXTogZ2V0TmV3V2hvbGVOdW1iZXJBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIFtZRUFSX1FVQVJURVJfUkFOR0VfSVRFTV9URU1QTEFURV9JRF06IGdldFllYXJRdWFydGVyUmFuZ2VJdGVtVGVtcGxhdGUsXG59O1xuXG5jb25zdCBpMThuRmFjdG9yaWVzOiBJMThuVGVtcGxhdGVJdGVtRmFjdG9yaWVzID0ge1xuICBbSU5URVJOQVRJT05BTElaRURfUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEXTogZ2V0TmV3STE4blBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgW0lOVEVSTkFUSU9OQUxJWkVEX1NIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEXTogZ2V0TmV3STE4blNob3J0QW5zd2VySXRlbVRlbXBsYXRlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0luaXRUZW1wbGF0ZUl0ZW0oZGVzaWduQmFzZTogRGVzaWduQmFzZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQsIGxhbmd1YWdlVGFncz86IHN0cmluZ1tdKTogVGVtcGxhdGVJdGVtIHtcbiAgaWYgKGRlc2lnbkJhc2UudHlwZSBpbiBzdGFuZGFyZEZhY3Rvcmllcykge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBzdGFuZGFyZEZhY3Rvcmllc1tkZXNpZ25CYXNlLnR5cGUgYXMga2V5b2YgVGVtcGxhdGVJdGVtRmFjdG9yaWVzXTtcbiAgICByZXR1cm4gZmFjdG9yeShkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKTtcbiAgfVxuXG4gIGlmIChkZXNpZ25CYXNlLnR5cGUgaW4gaTE4bkZhY3Rvcmllcykge1xuICAgIGNvbnN0IGkxOG5GYWN0b3J5ID0gaTE4bkZhY3Rvcmllc1tkZXNpZ25CYXNlLnR5cGUgYXMga2V5b2YgSTE4blRlbXBsYXRlSXRlbUZhY3Rvcmllc107XG4gICAgcmV0dXJuIGkxOG5GYWN0b3J5KGRlc2lnbkJhc2UsIGxhbmd1YWdlSWQsIGxhbmd1YWdlVGFncyB8fCBbXSk7XG4gIH1cblxuICByZXR1cm4gYmFzZVRlbXBsYXRlSXRlbShkZXNpZ25CYXNlLCBsYW5ndWFnZUlkKTtcbn1cbiJdfQ==
@@ -168,9 +168,12 @@ export function determineSerializeFunctionToUse(formItem, managerService, custom
168
168
  else if (hasNestedFormItems(formItem)) {
169
169
  return serializeNestedOptionFormItems(formItem, managerService);
170
170
  }
171
- else if (isOffsetDateRangeItem(formItem) || isYearQuarterRangeItem(formItem)) {
171
+ else if (isOffsetDateRangeItem(formItem)) {
172
172
  return serializeRangeItem(formItem);
173
173
  }
174
+ else if (isYearQuarterRangeItem(formItem)) {
175
+ return serializeYearQuarterRangeItem(formItem);
176
+ }
174
177
  else {
175
178
  return serializeFormItem(formItem, managerService);
176
179
  }
@@ -193,6 +196,34 @@ export function serializeRangeItem(formItem) {
193
196
  }
194
197
  return group;
195
198
  }
199
+ export function serializeYearQuarterRangeItem(formItem) {
200
+ const validators = new Array();
201
+ if (formItem.required) {
202
+ validators.push(Validators.required);
203
+ }
204
+ let startYear = new FormControl(null, formItem.required ? Validators.required : null);
205
+ let startQtr = new FormControl(null, formItem.required ? Validators.required : null);
206
+ if (formItem.value && formItem.value.start) {
207
+ startYear = new FormControl(formItem.value.start.year, formItem.required ? Validators.required : null);
208
+ startQtr = new FormControl(formItem.value.start.quarter, formItem.required ? Validators.required : null);
209
+ }
210
+ const startGroup = new FormGroup({ year: startYear, quarter: startQtr });
211
+ let endYear = new FormControl(null, formItem.required ? Validators.required : null);
212
+ let endQtr = new FormControl(null, formItem.required ? Validators.required : null);
213
+ if (formItem.value && formItem.value.end) {
214
+ endYear = new FormControl(formItem.value.end.year, formItem.required ? Validators.required : null);
215
+ endQtr = new FormControl(formItem.value.end.quarter, formItem.required ? Validators.required : null);
216
+ }
217
+ const endGroup = new FormGroup({ year: endYear, quarter: endQtr });
218
+ const group = new FormGroup({
219
+ start: startGroup,
220
+ end: endGroup,
221
+ });
222
+ if (formItem.disabled) {
223
+ group.disable({ onlySelf: true, emitEvent: false });
224
+ }
225
+ return group;
226
+ }
196
227
  /**
197
228
  * Returns a Validator with a numeric value for a FormItem;
198
229
  * Returns as an array of length 1 or 0
@@ -397,4 +428,4 @@ function numValueLimit(type, limit) {
397
428
  function isEmptyString(value) {
398
429
  return typeof value === 'string' && !value.length;
399
430
  }
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUd0Qix3QkFBd0IsRUFHeEIsb0JBQW9CLEVBS3BCLDJCQUEyQixHQUc1QixNQUFNLG1CQUFtQixDQUFDO0FBSTNCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xRCxnRkFBZ0Y7QUFDaEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxnR0FBZ0c7QUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLDRGQUE0RjtBQUM1RixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUV2QyxnQ0FBZ0M7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFFBQWtELEVBQ2xELGNBQW9DLEVBQ3BDLDRCQUF5RCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQ3BFLHNCQUFtRTtJQUVuRSxN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aUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDdEUsQ0FBQyxDQUFDO2dCQUNFLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ04sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLO29CQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSztpQkFDdEI7YUFDRjtZQUNILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEludGVybmF0aW9uYWxpemVkU3RyaW5nIH0gZnJvbSAnQG10bmEvY29yZS1pMThuLXRzJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkLCBpc1ByZXNlbnQsIGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHtcbiAgQ0hFQ0tCT1hfSVRFTV9JRCxcbiAgQ2hlY2tib3hJdGVtLFxuICBDb25kaXRpb25hbEl0ZW0sXG4gIERhdGVSYW5nZSxcbiAgREVDSU1BTF9BTlNXRVJfSVRFTV9JRCxcbiAgRGVjaW1hbEFuc3dlckl0ZW0sXG4gIEZvcm0gYXMgV2ViRm9ybSxcbiAgRm9ybUl0ZW0sXG4gIEZvcm1JdGVtR3JvdXAsXG4gIEZvcm1JdGVtSW1wbCxcbiAgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQsXG4gIEkxOE5fU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW0sXG4gIGlzRm9ybSxcbiAgaXNGb3JtSXRlbUdyb3VwSW1wbCxcbiAgaXNPZmZzZXREYXRlUmFuZ2VJdGVtLFxuICBpc1Byb2dyZXNzaXZlRm9ybSxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgaXNXaG9sZU51bWJlckl0ZW0sXG4gIGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBQYXJhZ3JhcGhBbnN3ZXJJdGVtLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU0hPUlRfQU5TV0VSX0lURU1fSUQsXG4gIFNob3J0QW5zd2VySXRlbSxcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbiAgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lELFxuICBXaG9sZU51bWJlckFuc3dlckl0ZW0sXG4gIFllYXJRdWFydGVyLFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm0tbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IHZhbGlkYXRpb25SZXN1bHRWYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcblxuLyoqIFR5cGVzIG9mIFZhbGlkYXRvcnMgdGhhdCBjYW4gYmUgc2V0IG9uIGEgRm9ybUNvbnRyb2wgKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRvclR5cGUgPSAncmVxdWlyZWQnIHwgJ3JlcXVpcmVkVHJ1ZScgfCAnZW1haWwnO1xuZXhwb3J0IHR5cGUgVmFsaWRhdG9yV2l0aE51bWJlclR5cGUgPSAnbWluTGVuZ3RoJyB8ICdtYXhMZW5ndGgnIHwgJ21pbicgfCAnbWF4JztcblxuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlIG51bWJlciBpdGVtcyBjb250YWluIG9ubHkgbmVnYXRpdmUsIGRpZ2l0cywgb3IgZGVjaW1hbHMgKi9cbmNvbnN0IG51bU9ubHlXaXRob3V0Q29tbWEgPSAvXi0/XFxkKyhcXC5cXGQqKT8kLztcbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzIGluIGNvbW1hIGZvcm1hdCAqL1xuY29uc3QgbnVtT25seVdpdGhDb21tYSA9IC9eLT9cXGR7MSwzfSgsXFxkezN9KSooXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3Bvc2l0aXZlIG9ubHknIGl0ZW0gY29uYWlucyBub24tbmVnYXRpdmUgY2hhcmFjdGVycyAqL1xuY29uc3QgcG9zT25seSA9IC9eW14tXSokLztcbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSAnd2hvbGUgbnVtYmVyJyBpdGVtIGNvbnRhaW5zIG9ubHkgbmVnYXRpdmUsIGRpZ2l0cywgb3IgY29tbWEgZm9ybWF0ICovXG5jb25zdCB3aG9sZU51bWJlciA9IC9eLT9cXGQrKCxcXGR7M30pKiQvO1xuXG4vLyNyZWdpb24gRm9ybUNvbnRyb2wgR2VuZXJhdGlvblxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG5ldyBGb3JtR3JvdXAgd2l0aCBGb3JtQ29udHJvbHMgJiBwb3NzaWJsZSBuZXN0ZWQgRm9ybUdyb3Vwc1xuICogQHBhcmFtIGZvcm1JdGVtIFdlYkZvcm0sIFNlY3Rpb24sIEdyb3VwLCBvciBSZXBlYXRhYmxlSXRlbSB1c2VkIHRvIGNyZWF0ZSBhIEZvcm1Hcm91cFxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIEZvcm1Db250cm9sIGdlbmVyYXRvciBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1JdGVtcyhcbiAgZm9ybUl0ZW06IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGZvcm06IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB7fTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgZm9ybUl0ZW0uaXRlbXMpIHtcbiAgICBjb25zdCBjb250cm9sID0gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgIGl0ZW0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+LFxuICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tQ29udHJvbEdlbmVyYXRvclxuICAgICk7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIGZvcm1baXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlcXVpcmVkID0gaXNGb3JtKGZvcm1JdGVtKSA/IHRydWUgOiBmb3JtSXRlbS5yZXF1aXJlZDtcbiAgY29uc3QgZ3JvdXAgPSByZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAoZm9ybSwgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGZvcm0pO1xuICBpZiAoJ2Rpc2FibGVkJyBpbiBmb3JtSXRlbSAmJiBmb3JtSXRlbS5kaXNhYmxlZCkge1xuICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHRhaWxvcmVkIEZvcm1Db250cm9sIHdpdGggdmFsaWRhdG9ycyBmb3IgYSBGb3JtSXRlbVxuICogQHBhcmFtIGZvcm1JdGVtIFRoZSBGb3JtSXRlbSByZXF1ZXN0aW5nIGEgdGFpbG9yZWQgRm9ybUNvbnRyb2xcbiAqIEBpbnRlcm5hbCBDcmVhdGluZyB0aGUgZm9ybSBjb250cm9sIGFuZCB0aGVuIGNhbGxpbmcgc2V0VmFsaWRhdG9ycyBmb3JjZSBhIHZhbGlkYXRpb24gcGFzcyxcbiAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTYyMiNpc3N1ZWNvbW1lbnQtMzQxNTQ3ODg0XG4gKiBCZXR0ZXIgdG8gZ2F0aGVyIHRoZSB2YWxpZGF0b3JzIGFuZCBwdXQgdGhlbSBpbiB0aGUgY29uc3RydWN0b3Igb2YgdGhlIGZvcm0gY29udHJvbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1JdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4sIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSk6IEFic3RyYWN0Q29udHJvbCB7XG4gIGNvbnN0IHZhbGlkYXRvcnMgPSBuZXcgQXJyYXk8VmFsaWRhdG9yRm4+KHZhbGlkYXRpb25SZXN1bHRWYWxpZGF0b3IoZm9ybUl0ZW0uaW5zdGFuY2VJZCwgbWFuYWdlclNlcnZpY2UpKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG4gIHN3aXRjaCAoZm9ybUl0ZW0uaXRlbUlkKSB7XG4gICAgY2FzZSBDSEVDS0JPWF9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBjaGVja2JveEl0ZW0gPSBmb3JtSXRlbSBhcyBDaGVja2JveEl0ZW07XG4gICAgICBjb25zdCB2YWx1ZSA9IGNoZWNrYm94SXRlbS52YWx1ZSB8fCBbXTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChudW1DaGVja2JveGVzVmFsaWRhdG9yKCdNSU4nLCBjaGVja2JveEl0ZW0ubWluU2VsZWN0aW9ucyksIG51bUNoZWNrYm94ZXNWYWxpZGF0b3IoJ01BWCcsIGNoZWNrYm94SXRlbS5tYXhTZWxlY3Rpb25zKSk7XG4gICAgICBjb25zdCBhcnIgPSBuZXcgRm9ybUFycmF5KFxuICAgICAgICBjaGVja2JveEl0ZW0ub3B0aW9ucy5tYXAoXG4gICAgICAgICAgKG8pID0+XG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woe1xuICAgICAgICAgICAgICB2YWx1ZTogby5zZWxlY3RlZCB8fCB2YWx1ZS5zb21lKCh2KSA9PiB2ID09PSBvLm9wdGlvbi5pZCksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBjaGVja2JveEl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycylcbiAgICAgICk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgICBjYXNlIERFQ0lNQUxfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBXSE9MRV9OVU1CRVJfQU5TV0VSX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBmb3JtSXRlbSBhcyBEZWNpbWFsQW5zd2VySXRlbSB8IFdob2xlTnVtYmVyQW5zd2VySXRlbTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChudW1lcmljYWxWYWx1ZUNoZWNrKCkpO1xuICAgICAgaWYgKGlzV2hvbGVOdW1iZXJJdGVtKGl0ZW0pKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCh3aG9sZU51bWJlclBhdHRlcm4oKSk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5wb3NpdGl2ZU9ubHkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHBvc2l0aXZlTnVtYmVyUGF0dGVybigpKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlbS5taW5WYWx1ZSkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bVZhbHVlTGltaXQoJ21pbicsIGl0ZW0ubWluVmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlbS5tYXhWYWx1ZSkpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKG51bVZhbHVlTGltaXQoJ21heCcsIGl0ZW0ubWF4VmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRDpcbiAgICBjYXNlIFNIT1JUX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBzaG9ydEFuc3dlckl0ZW0gPSBmb3JtSXRlbSBhcyBTaG9ydEFuc3dlckl0ZW0gfCBQYXJhZ3JhcGhBbnN3ZXJJdGVtO1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmdldE51bWVyaWNWYWxpZGF0b3IoJ21pbkxlbmd0aCcsIHNob3J0QW5zd2VySXRlbS5taW5DaGFyQ291bnQpKTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5nZXROdW1lcmljVmFsaWRhdG9yKCdtYXhMZW5ndGgnLCBzaG9ydEFuc3dlckl0ZW0ubWF4Q2hhckNvdW50KSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBJMThOX1BBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRDpcbiAgICBjYXNlIEkxOE5fU0hPUlRfQU5TV0VSX0lURU1fSUQ6IHtcbiAgICAgIGNvbnN0IGkxOG5JdGVtID0gZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtIHwgSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW07XG4gICAgICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe30sIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSk7XG4gICAgICBmb3IgKGNvbnN0IGxhbmd1YWdlIG9mIGkxOG5JdGVtLmxhbmd1YWdlVGFncykge1xuICAgICAgICAvLyBGSVhNRSBpZiB0aGVyZSBpcyBub3RoaWduIHRoZXJlIGluIHRoZSB2YWx1ZSBzaG91bGQgSSBzZXQgYSBuZXcgaW50ZXJuYXRpb25hbGl6ZWQgc3RyaW5nP1xuICAgICAgICBncm91cC5jb250cm9sc1tsYW5ndWFnZV0gPSBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGkxOG5JdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZm9ybUl0ZW0udmFsdWUsIGRpc2FibGVkOiAhIWZvcm1JdGVtLmRpc2FibGVkIH0sIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGNvbnRyb2xzIGZvciBhbnkgZm9ybSBpdGVtcyBuZXN0ZWQgaW5zaWRlIGEgcGFyZW50IGl0ZW1zIG9wdGlvbnNcbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gd2l0aCBhbiAnb3B0aW9ucycgcHJvcGVydHlcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGNvbmRpdGlvbmFsIGZ1bmN0aW9uIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnJvbSBwYXJlbnQgJ3NlcmlhbGl6ZUZvcm1JdGVtcycgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU5lc3RlZE9wdGlvbkZvcm1JdGVtcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXSBhcyBGb3JtSXRlbUltcGw8dW5rbm93bj47XG4gICAgICBjb25zdCBjb250cm9sID0gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShzdWJJdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sc1tzdWJJdGVtLmluc3RhbmNlSWRdID0gY29udHJvbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb250cm9sc1tmb3JtSXRlbS5pbnN0YW5jZUlkXSA9IHNlcmlhbGl6ZUZvcm1JdGVtKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSk7XG4gIGNvbnN0IGdyb3VwID0gZm9ybUl0ZW0ucmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAoY29udHJvbHMpO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEJ1aWxkIEZvcm1Db250cm9scyBmb3IgYSBUYWJsZUl0ZW1cbiAqIEBwYXJhbSBpdGVtIFRhYmxlSXRlbSByZXF1aXJpbmcgRm9ybUNvbnRyb2xzXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmdW5jdGlvbiBmb3IgY3VzdG9tIGFueSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Db250cm9sR2VuZXJhdG9yIEZvcm1Db250cm9sIGdlbmVyYXRvciBmb3IgY3VzdG9tIGFueSBGb3JtSXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVRhYmxlSXRlbShcbiAgaXRlbTogVGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB0YWJsZUNvbnRyb2w6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0gPSB7fTtcbiAgZm9yIChjb25zdCByb3cgb2YgaXRlbS50YWJsZVJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvd0l0ZW0gb2Ygcm93Lml0ZW1zLmZpbHRlcigoaSkgPT4gISFpKSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIHJvd0l0ZW0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+LFxuICAgICAgICBtYW5hZ2VyU2VydmljZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tQ29udHJvbEdlbmVyYXRvclxuICAgICAgKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIHRhYmxlQ29udHJvbFtyb3dJdGVtLmluc3RhbmNlSWRdID0gY29udHJvbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZ3JvdXAgPSBpdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cCh0YWJsZUNvbnRyb2wsIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cCh0YWJsZUNvbnRyb2wpO1xuICBpZiAoaXRlbS5kaXNhYmxlZCkge1xuICAgIGdyb3VwLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gZm9yIHRoZSBjYWxsZXIgdG8gdXNlLlxuICpcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgc2VyaWFsaXphdGlvblxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBTZXJpYWxpemVyIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDx1bmtub3duPiB8IFdlYkZvcm0sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xuICBpZiAoXG4gICAgaXNGb3JtKGZvcm1JdGVtKSB8fFxuICAgIGlzUHJvZ3Jlc3NpdmVGb3JtKGZvcm1JdGVtKSB8fFxuICAgIGlzUmVwZWF0YWJsZUl0ZW0oZm9ybUl0ZW0pIHx8XG4gICAgaXNTZWN0aW9uKGZvcm1JdGVtKSB8fFxuICAgIGlzRm9ybUl0ZW1Hcm91cEltcGwoZm9ybUl0ZW0pXG4gICkge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbXMoZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlLCBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLCBjdXN0b21Db250cm9sR2VuZXJhdG9yKTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplVGFibGVJdGVtKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gIH0gZWxzZSBpZiAoY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbChmb3JtSXRlbSkgJiYgISFjdXN0b21Db250cm9sR2VuZXJhdG9yKSB7XG4gICAgcmV0dXJuIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IoZm9ybUl0ZW0pO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplTmVzdGVkT3B0aW9uRm9ybUl0ZW1zKGZvcm1JdGVtIGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgbWFuYWdlclNlcnZpY2UpO1xuICB9IGVsc2UgaWYgKGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbShmb3JtSXRlbSkgfHwgaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW0oZm9ybUl0ZW0sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIEZvcm1Hcm91cCBmb3IgYSByYW5nZSBpdGVtXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gZm9yIGEgRGF0ZVJhbmdlIG9mIERhdGUgfCBZZWFyUXVhcnRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUmFuZ2VJdGVtKGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8RGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj4+KTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdmFsaWRhdG9ycyA9IG5ldyBBcnJheTxWYWxpZGF0b3JGbj4oKTtcbiAgaWYgKGZvcm1JdGVtLnJlcXVpcmVkKSB7XG4gICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9XG4gIGNvbnN0IGdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICB7XG4gICAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuc3RhcnQgOiBudWxsKSxcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlID8gZm9ybUl0ZW0udmFsdWUuZW5kIDogbnVsbCksXG4gICAgfSxcbiAgICBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycylcbiAgKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgVmFsaWRhdG9yIHdpdGggYSBudW1lcmljIHZhbHVlIGZvciBhIEZvcm1JdGVtO1xuICogUmV0dXJucyBhcyBhbiBhcnJheSBvZiBsZW5ndGggMSBvciAwXG4gKiBAcGFyYW0gcGFyYW0wIGB0eXBlYCAtIHR5cGUgb2YgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgnO1xuICogYHZhbHVlYCAtIHBhcmFtZXRlciBmb3IgdGhlIHZhbGlkYXRvciwgZS5nLiAnbWluTGVuZ3RoKHZhbHVlKSdcbiAqL1xuZnVuY3Rpb24gZ2V0TnVtZXJpY1ZhbGlkYXRvcih0eXBlOiBWYWxpZGF0b3JXaXRoTnVtYmVyVHlwZSwgdmFsdWU6IG51bWJlcik6IFZhbGlkYXRvckZuW10ge1xuICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IFtWYWxpZGF0b3JzW3R5cGVdKHZhbHVlKV0gOiBbXTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiBNdG5hRm9ybSB2YWx1ZSBpbnNlcnRpb25cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIEZvcm1pdGVtcyB3aXRoIG5ldyB2YWx1ZXMgaW5zZXJ0ZWQuXG4gKlxuICogQHBhcmFtIHNlY3Rpb24gVGhlIG9sZCBGb3JtIG9yIEZvcm0gU2VjdGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSBKU09OIHZhbHVlc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbXNcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgZnVuY3Rpb24gdG8gaGFuZGxlIGN1c3RvbSBGb3JtSXRlbXNcbiAqIEByZXR1cm5zIG5ldyBGb3JtSXRlbSBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBBcnJheTxGb3JtSXRlbT4ge1xuICByZXR1cm4gc2VjdGlvbi5pdGVtc1xuICAgIC5tYXAoKGl0ZW0pID0+XG4gICAgICBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICBpdGVtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZVtpdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICApXG4gICAgLmZpbHRlcihpc1ByZXNlbnQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb3BpZWQgVGFibGVJdGVtLCB3aXRoIGVhY2ggcm93IEZvcm1JdGVtIGhhdmluZyBuZXcgaW5zZXJ0ZWQgdmFsdWVzLlxuICogQHBhcmFtIGl0ZW0gVGFibGVJdGVtIHRvIGluc2VydCB2YWx1ZXNcbiAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSBuZ0Zvcm0gdmFsdWUgb2YgdGhlIFRhYmxlSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgYm9vbGVhbiBmdW5jdGlvbiBmb3IgYW55IGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtIHZhbHVlIGluc2VydGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICBpdGVtOiBUYWJsZUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsXG4pOiBUYWJsZUl0ZW0ge1xuICBjb25zdCB0YWJsZVJvd3MgPSBpdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiAoe1xuICAgIC4uLnJvdyxcbiAgICBpdGVtczogcm93Lml0ZW1zXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudClcbiAgICAgIC5tYXAoKGZvcm1JdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICAgIGZvcm1JdGVtLFxuICAgICAgICAgIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzUHJlc2VudCksXG4gIH0pKTtcbiAgcmV0dXJuIHsgLi4uaXRlbSwgdGFibGVSb3dzLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoaXRlbSwgZGlzYWJsZWRTdGF0ZSkgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IEZvcm1JdGVtIGFmdGVyIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHZhbHVlIGluc2VydGlvblxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZm9yIGEgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIFZhbHVlIGluc2VydGlvbiBmdW5jdGlvbiBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBkaXNhYmxlZFN0YXRlIE1hcCBvZiBpdGVtcycgZGlzYWJsZWQgc3RhdGVcbiAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IG9mIHRoZSBGb3JtSXRlbSwgdXNlZCB0byBwYXNzIHRvIHRoZSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgZm9ybUl0ZW06IEZvcm1JdGVtLFxuICBuZ0Zvcm1WYWx1ZTogdW5rbm93bixcbiAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyPzogKFxuICAgIHNlY3Rpb246IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW0gfCB1bmRlZmluZWQsXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgcmZWYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgKSA9PiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsLFxuICBwYXJlbnQ/OiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtXG4pOiBGb3JtSXRlbSB8IG51bGwge1xuICBpZiAoaXNTZWN0aW9uKGZvcm1JdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKSB8fCBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICAgIHJldHVybiB7IC4uLmZvcm1JdGVtLCBpdGVtcywgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbTtcbiAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0VGFibGVJdGVtVmFsdWVzKFxuICAgICAgZm9ybUl0ZW0sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsKGZvcm1JdGVtKSAmJiAhIWN1c3RvbUZvcm1JdGVtQnVpbGRlcikge1xuICAgIHJldHVybiBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIocGFyZW50LCBmb3JtSXRlbSwgbmdGb3JtVmFsdWUsIGRpc2FibGVkU3RhdGUpO1xuICB9IGVsc2UgaWYgKGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gaW5zZXJ0TmVzdGVkRm9ybUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICBuZ0Zvcm1WYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pIHx8IGlzWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBpc1R5cGU8eyBzdGFydDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnc3RhcnQnKSA/IG5nRm9ybVZhbHVlLnN0YXJ0IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVuZCA9IGlzVHlwZTx7IGVuZDogWWVhclF1YXJ0ZXIgfCBEYXRlIH0+KG5nRm9ybVZhbHVlLCAnZW5kJykgPyBuZ0Zvcm1WYWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIHZhbHVlOiB7IHN0YXJ0LCBlbmQgfSwgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtLCBkaXNhYmxlZFN0YXRlKSB9IGFzIEZvcm1JdGVtSW1wbDxcbiAgICAgIERhdGVSYW5nZTxEYXRlIHwgWWVhclF1YXJ0ZXI+XG4gICAgPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZm9ybUl0ZW0sXG4gICAgICB2YWx1ZTogZmluZEl0ZW1WYWx1ZShmb3JtSXRlbSwgbmdGb3JtVmFsdWUpLFxuICAgICAgZGlzYWJsZWQ6IF9pc0Rpc2FibGVkKGZvcm1JdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPiwgZGlzYWJsZWRTdGF0ZSksXG4gICAgfSBhcyBGb3JtSXRlbTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgbmdGb3JtIHZhbHVlIGZvciBhIEZvcm1JdGVtLlxuICpcbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgYSB2YWx1ZVxuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZVxuICovXG5mdW5jdGlvbiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtOiBGb3JtSXRlbSwgbmdGb3JtVmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgY29uc3QgaXRlbUlkID0gZm9ybUl0ZW0uaXRlbUlkLnNwbGl0KCcuJykucG9wKCk7XG4gIHN3aXRjaCAoaXRlbUlkPy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgLy8gRklYTUU6IGNhbiB3ZSBwdXQgdGhlc2UgSURzIGluIGNvbnN0YW50cyBhbmQgcmVmZXIgdG8gdGhlbSBpbnN0ZWFkP1xuICAgIGNhc2UgJ0RBVEVJVEVNJzpcbiAgICAgIHJldHVybiAhIW5nRm9ybVZhbHVlICYmIHR5cGVvZiBuZ0Zvcm1WYWx1ZSAhPT0gJ3N0cmluZycgPyAobmdGb3JtVmFsdWUgYXMgTW9tZW50KS50b0lTT1N0cmluZygpIDogKG5nRm9ybVZhbHVlIGFzIHN0cmluZyk7XG4gICAgY2FzZSAnQ0hFQ0tCT1hJVEVNJzpcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobmdGb3JtVmFsdWUpICYmIEFycmF5LmlzQXJyYXkobmdGb3JtVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IG5nRm9ybVZhbHVlIGFzIEFycmF5PGJvb2xlYW4+O1xuICAgICAgICByZXR1cm4gKGZvcm1JdGVtIGFzIENoZWNrYm94SXRlbSkub3B0aW9ucy5maWx0ZXIoKG8sIGluZGV4KSA9PiAhIWFycltpbmRleF0pLm1hcCgobykgPT4gby5vcHRpb24uaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIGNhc2UgJ0lOVEVSTkFUSU9OQUxJWkVEUEFSQUdSQVBIQU5TV0VSSVRFTSc6XG4gICAgY2FzZSAnSU5URVJOQVRJT05BTElaRURTSE9SVEFOU1dFUklURU0nOiB7XG4gICAgICBjb25zdCBsYW5ndWFnZXMgPVxuICAgICAgICBpdGVtSWQ/LnRvVXBwZXJDYXNlKCkgPT09ICdJTlRFUk5BVElPTkFMSVpFRFBBUkFHUkFQSEFOU1dFUklURU0nXG4gICAgICAgICAgPyAoZm9ybUl0ZW0gYXMgSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtKS5sYW5ndWFnZVRhZ3NcbiAgICAgICAgICA6IChmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbSkubGFuZ3VhZ2VUYWdzO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IGxhbmd1YWdlcy5yZWR1Y2UoKHZhbHVlOiBJbnRlcm5hdGlvbmFsaXplZFN0cmluZ1tdLCBsYW5ndWFnZSkgPT4ge1xuICAgICAgICBpZiAobmdGb3JtVmFsdWUgJiYgdHlwZW9mIG5nRm9ybVZhbHVlID09PSAnb2JqZWN0JyAmJiBsYW5ndWFnZSBpbiBuZ0Zvcm1WYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gKG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtsYW5ndWFnZV07XG4gICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKHsgdmFsdWU6IGlucHV0IGFzIHN0cmluZywgZmFjZXRJZDogbGFuZ3VhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZ0Zvcm1WYWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgZm9ybUl0ZW06IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEZvcm1JdGVtIHtcbiAgY29uc3Qgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBpbiBmb3JtSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBmb3JtSXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gZGV0ZXJtaW5lSW5zZXJ0RnVuY3Rpb25Ub1VzZShcbiAgICAgICAgc3ViSXRlbSxcbiAgICAgICAgbmdGb3JtVmFsdWVbc3ViSXRlbS5pbnN0YW5jZUlkXSxcbiAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgICAgY3VzdG9tRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmZvcm1JdGVtLFxuICAgIG9wdGlvbkl0ZW1NYXAsXG4gICAgdmFsdWU6IGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW0sIG5nRm9ybVZhbHVlW2Zvcm1JdGVtLmluc3RhbmNlSWRdKSxcbiAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpLFxuICB9IGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+Pjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIEZvcm1JdGVtIGhhcyBhbiBPcHRpb25JdGVtTWFwIHdpdGggYXQgbGVhc3QgMSBpdGVtLCB3aGljaCByZXF1aXJlIHRoZWlyIG93biBGb3JtQ29udHJvbChzKVxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHRvIGNoZWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW06IHVua25vd24pOiBmb3JtSXRlbSBpcyB7IG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0ge1xuICByZXR1cm4gKFxuICAgIGlzVHlwZTx7XG4gICAgICBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9Pihmb3JtSXRlbSwgJ29wdGlvbkl0ZW1NYXAnKSAmJiBPYmplY3Qua2V5cyhmb3JtSXRlbS5vcHRpb25JdGVtTWFwKS5sZW5ndGggPiAwXG4gICk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgbWluL21heCBzZWxlY3Rpb25zIGxpbWl0c1xuICogQHBhcmFtIHR5cGVDaGVjayBXaGljaCBsaW1pdCB0byB2YWxpZGF0ZS4gJ01JTicgfCAnTUFYJ1xuICogQHBhcmFtIGxpbWl0IHVwcGVyIG9yIGxvd2VyIGxpbWl0IHRvIGNoZWNrIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gbnVtQ2hlY2tib3hlc1ZhbGlkYXRvcih0eXBlQ2hlY2s6ICdNSU4nIHwgJ01BWCcsIGxpbWl0ID0gMSk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICBsZXQgdG90YWxTZWxlY3RlZCA9IDA7XG4gICAgaWYgKGlzRm9ybUFycmF5KGNvbnRyb2wpKSB7XG4gICAgICB0b3RhbFNlbGVjdGVkID0gY29udHJvbC5jb250cm9scy5tYXAoKGMpID0+IGMudmFsdWUpLnJlZHVjZSgodG90YWwsIG5leHQpID0+IChuZXh0ID8gdG90YWwgKyBuZXh0IDogdG90YWwpLCAwKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVDaGVjaykge1xuICAgICAgY2FzZSAnTUlOJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPj0gbGltaXQgPyBudWxsIDogeyBtaW5TZWxlY3RlZDogJGxvY2FsaXplYFNlbGVjdCBhdCBsZWFzdCAke2xpbWl0fWAgfTtcbiAgICAgIGNhc2UgJ01BWCc6XG4gICAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkIDw9IGxpbWl0ID8gbnVsbCA6IHsgbWF4U2VsZWN0ZWQ6ICRsb2NhbGl6ZWBTZWxlY3Qgbm8gbW9yZSB0aGFuICR7bGltaXR9YCB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogY29udHJvbCBpcyBGb3JtQXJyYXkge1xuICByZXR1cm4gaXNUeXBlPEZvcm1BcnJheT4oY29udHJvbCwgJ2NvbnRyb2xzJyk7XG59XG5cbmZ1bmN0aW9uIF9pc0Rpc2FibGVkKGl0ZW06IENvbmRpdGlvbmFsSXRlbSwgZGlzYWJsZWRTdGF0ZTogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkU3RhdGVbaXRlbS5pbnN0YW5jZUlkXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGRpc2FibGVkKSA/IGl0ZW0uZGlzYWJsZWQgOiBkaXNhYmxlZDtcbn1cblxuZnVuY3Rpb24gd2hvbGVOdW1iZXJQYXR0ZXJuKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB3aG9sZU51bWJlci50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHsgd2hvbGVOdW1iZXI6IHRydWUgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbnVtZXJpY2FsVmFsdWVDaGVjaygpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bU9ubHlXaXRob3V0Q29tbWEudGVzdChjb250cm9sLnZhbHVlKSB8fCBudW1Pbmx5V2l0aENvbW1hLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBub25EaWdpdDogdHJ1ZSB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwb3NPbmx5LnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBwb3NpdGl2ZTogdHJ1ZSB9O1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgd29ya3MgYXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYW5ndWxhciAnbWluJy8nbWF4JyBWYWxpZGF0b3JzLiBVc2luZyB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yc1xuICogYXBwZWFycyB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjdXN0b20gdmFsaWRhdG9ycywgcmVnYXJkbGVzcyBvZiBvcmRlciBpbiB0aGUgYXJyYXkuIFVzaW5nIHRoaXMgZnVuY3Rpb25cbiAqIGVuc3VyZXMgdmFsaWRhdG9ycyBzZXQgYmVmb3JlIHRoaXMgb25lIG1haW50YWluIHByaW9yaXR5LiBGb3IgaW5zdGFuY2UsIHRoZSBpbnB1dCB2YWx1ZSBmYWlsaW5nIG51bWVyaWNhbCB2YWxpZGF0aW9uXG4gKiBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHRoZSB2YWx1ZSBiZWluZyB3aXRoaW4gbWluLW1heCByYW5nZS5cbiAqL1xuZnVuY3Rpb24gbnVtVmFsdWVMaW1pdCh0eXBlOiAnbWluJyB8ICdtYXgnLCBsaW1pdDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiAodHlwZSA9PT0gJ21pbicgPyB2YWx1ZSA8IGxpbWl0IDogdmFsdWUgPiBsaW1pdClcbiAgICAgID8ge1xuICAgICAgICAgIFt0eXBlXToge1xuICAgICAgICAgICAgW3R5cGVdOiBsaW1pdCxcbiAgICAgICAgICAgIGFjdHVhbDogY29udHJvbC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLmxlbmd0aDtcbn1cbiJdfQ==
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zZXJpYWxpemVyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUNMLGdCQUFnQixFQUloQixzQkFBc0IsRUFNdEIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUd6QixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUd0Qix3QkFBd0IsRUFHeEIsb0JBQW9CLEVBS3BCLDJCQUEyQixHQUc1QixNQUFNLG1CQUFtQixDQUFDO0FBSTNCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xRCxnRkFBZ0Y7QUFDaEYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxnR0FBZ0c7QUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLDRGQUE0RjtBQUM1RixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUV2QyxnQ0FBZ0M7QUFFaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFFBQWtELEVBQ2xELGNBQW9DLEVBQ3BDLDRCQUF5RCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQ3BFLHNCQUFtRTtJQUVuRSxN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QUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RixJQUFJLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzFDLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkcsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxRztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUV6RSxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEYsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25GLElBQUksUUFBUSxDQUFD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QUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3RFLENBQUMsQ0FBQztnQkFDRSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNOLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSztvQkFDYixNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUs7aUJBQ3RCO2FBQ0Y7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXplZFN0cmluZyB9IGZyb20gJ0BtdG5hL2NvcmUtaTE4bi10cyc7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCwgaXNQcmVzZW50LCBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7XG4gIENIRUNLQk9YX0lURU1fSUQsXG4gIENoZWNrYm94SXRlbSxcbiAgQ29uZGl0aW9uYWxJdGVtLFxuICBEYXRlUmFuZ2UsXG4gIERFQ0lNQUxfQU5TV0VSX0lURU1fSUQsXG4gIERlY2ltYWxBbnN3ZXJJdGVtLFxuICBGb3JtIGFzIFdlYkZvcm0sXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwLFxuICBGb3JtSXRlbUltcGwsXG4gIEkxOE5fUEFSQUdSQVBIX0FOU1dFUl9JVEVNX0lELFxuICBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0sXG4gIEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtLFxuICBpc0Zvcm0sXG4gIGlzRm9ybUl0ZW1Hcm91cEltcGwsXG4gIGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbSxcbiAgaXNQcm9ncmVzc2l2ZUZvcm0sXG4gIGlzUmVwZWF0YWJsZUl0ZW0sXG4gIGlzU2VjdGlvbixcbiAgaXNUYWJsZUl0ZW0sXG4gIGlzV2hvbGVOdW1iZXJJdGVtLFxuICBpc1llYXJRdWFydGVyUmFuZ2VJdGVtLFxuICBPcHRpb24sXG4gIE9wdGlvbkdyb3VwSXRlbUltcGwsXG4gIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9JRCxcbiAgUGFyYWdyYXBoQW5zd2VySXRlbSxcbiAgUmVwZWF0YWJsZUl0ZW0sXG4gIFNIT1JUX0FOU1dFUl9JVEVNX0lELFxuICBTaG9ydEFuc3dlckl0ZW0sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVSb3dJdGVtLFxuICBWYWx1ZUl0ZW0sXG4gIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9JRCxcbiAgV2hvbGVOdW1iZXJBbnN3ZXJJdGVtLFxuICBZZWFyUXVhcnRlcixcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTXRuYVdmTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbi8qKiBUeXBlcyBvZiBWYWxpZGF0b3JzIHRoYXQgY2FuIGJlIHNldCBvbiBhIEZvcm1Db250cm9sICovXG5leHBvcnQgdHlwZSBWYWxpZGF0b3JUeXBlID0gJ3JlcXVpcmVkJyB8ICdyZXF1aXJlZFRydWUnIHwgJ2VtYWlsJztcbmV4cG9ydCB0eXBlIFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlID0gJ21pbkxlbmd0aCcgfCAnbWF4TGVuZ3RoJyB8ICdtaW4nIHwgJ21heCc7XG5cbi8qKiBSZWdFeCB0byB2YWxpZGF0ZSBudW1iZXIgaXRlbXMgY29udGFpbiBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGRlY2ltYWxzICovXG5jb25zdCBudW1Pbmx5V2l0aG91dENvbW1hID0gL14tP1xcZCsoXFwuXFxkKik/JC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgbnVtYmVyIGl0ZW1zIGNvbnRhaW4gb25seSBuZWdhdGl2ZSwgZGlnaXRzLCBvciBkZWNpbWFscyBpbiBjb21tYSBmb3JtYXQgKi9cbmNvbnN0IG51bU9ubHlXaXRoQ29tbWEgPSAvXi0/XFxkezEsM30oLFxcZHszfSkqKFxcLlxcZCopPyQvO1xuLyoqIFJlZ0V4IHRvIHZhbGlkYXRlICdwb3NpdGl2ZSBvbmx5JyBpdGVtIGNvbmFpbnMgbm9uLW5lZ2F0aXZlIGNoYXJhY3RlcnMgKi9cbmNvbnN0IHBvc09ubHkgPSAvXlteLV0qJC87XG4vKiogUmVnRXggdG8gdmFsaWRhdGUgJ3dob2xlIG51bWJlcicgaXRlbSBjb250YWlucyBvbmx5IG5lZ2F0aXZlLCBkaWdpdHMsIG9yIGNvbW1hIGZvcm1hdCAqL1xuY29uc3Qgd2hvbGVOdW1iZXIgPSAvXi0/XFxkKygsXFxkezN9KSokLztcblxuLy8jcmVnaW9uIEZvcm1Db250cm9sIEdlbmVyYXRpb25cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgRm9ybUdyb3VwIHdpdGggRm9ybUNvbnRyb2xzICYgcG9zc2libGUgbmVzdGVkIEZvcm1Hcm91cHNcbiAqIEBwYXJhbSBmb3JtSXRlbSBXZWJGb3JtLCBTZWN0aW9uLCBHcm91cCwgb3IgUmVwZWF0YWJsZUl0ZW0gdXNlZCB0byBjcmVhdGUgYSBGb3JtR3JvdXBcbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIGJvb2xlYW4gZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZnVuY3Rpb24gZm9yIGFueSBjdXN0b20gRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBGb3JtR3JvdXAge1xuICBjb25zdCBmb3JtOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGZvcm1JdGVtLml0ZW1zKSB7XG4gICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICBpdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgIG1hbmFnZXJTZXJ2aWNlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICApO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBmb3JtW2l0ZW0uaW5zdGFuY2VJZF0gPSBjb250cm9sO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXF1aXJlZCA9IGlzRm9ybShmb3JtSXRlbSkgPyB0cnVlIDogZm9ybUl0ZW0ucmVxdWlyZWQ7XG4gIGNvbnN0IGdyb3VwID0gcmVxdWlyZWQgPyBuZXcgRm9ybUdyb3VwKGZvcm0sIFZhbGlkYXRvcnMucmVxdWlyZWQpIDogbmV3IEZvcm1Hcm91cChmb3JtKTtcbiAgaWYgKCdkaXNhYmxlZCcgaW4gZm9ybUl0ZW0gJiYgZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB0YWlsb3JlZCBGb3JtQ29udHJvbCB3aXRoIHZhbGlkYXRvcnMgZm9yIGEgRm9ybUl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBUaGUgRm9ybUl0ZW0gcmVxdWVzdGluZyBhIHRhaWxvcmVkIEZvcm1Db250cm9sXG4gKiBAaW50ZXJuYWwgQ3JlYXRpbmcgdGhlIGZvcm0gY29udHJvbCBhbmQgdGhlbiBjYWxsaW5nIHNldFZhbGlkYXRvcnMgZm9yY2UgYSB2YWxpZGF0aW9uIHBhc3MsXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTk2MjIjaXNzdWVjb21tZW50LTM0MTU0Nzg4NFxuICogQmV0dGVyIHRvIGdhdGhlciB0aGUgdmFsaWRhdG9ycyBhbmQgcHV0IHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+LCBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPih2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yKGZvcm1JdGVtLmluc3RhbmNlSWQsIG1hbmFnZXJTZXJ2aWNlKSk7XG4gIGlmIChmb3JtSXRlbS5yZXF1aXJlZCkge1xuICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuICBzd2l0Y2ggKGZvcm1JdGVtLml0ZW1JZCkge1xuICAgIGNhc2UgQ0hFQ0tCT1hfSVRFTV9JRDoge1xuICAgICAgY29uc3QgY2hlY2tib3hJdGVtID0gZm9ybUl0ZW0gYXMgQ2hlY2tib3hJdGVtO1xuICAgICAgY29uc3QgdmFsdWUgPSBjaGVja2JveEl0ZW0udmFsdWUgfHwgW107XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtQ2hlY2tib3hlc1ZhbGlkYXRvcignTUlOJywgY2hlY2tib3hJdGVtLm1pblNlbGVjdGlvbnMpLCBudW1DaGVja2JveGVzVmFsaWRhdG9yKCdNQVgnLCBjaGVja2JveEl0ZW0ubWF4U2VsZWN0aW9ucykpO1xuICAgICAgY29uc3QgYXJyID0gbmV3IEZvcm1BcnJheShcbiAgICAgICAgY2hlY2tib3hJdGVtLm9wdGlvbnMubWFwKFxuICAgICAgICAgIChvKSA9PlxuICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICAgICAgdmFsdWU6IG8uc2VsZWN0ZWQgfHwgdmFsdWUuc29tZSgodikgPT4gdiA9PT0gby5vcHRpb24uaWQpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogY2hlY2tib3hJdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgY2FzZSBERUNJTUFMX0FOU1dFUl9JVEVNX0lEOlxuICAgIGNhc2UgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpdGVtID0gZm9ybUl0ZW0gYXMgRGVjaW1hbEFuc3dlckl0ZW0gfCBXaG9sZU51bWJlckFuc3dlckl0ZW07XG4gICAgICB2YWxpZGF0b3JzLnB1c2gobnVtZXJpY2FsVmFsdWVDaGVjaygpKTtcbiAgICAgIGlmIChpc1dob2xlTnVtYmVySXRlbShpdGVtKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2god2hvbGVOdW1iZXJQYXR0ZXJuKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0ucG9zaXRpdmVPbmx5KSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChwb3NpdGl2ZU51bWJlclBhdHRlcm4oKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWluVmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtaW4nLCBpdGVtLm1pblZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZW0ubWF4VmFsdWUpKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1WYWx1ZUxpbWl0KCdtYXgnLCBpdGVtLm1heFZhbHVlKSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBTSE9SVF9BTlNXRVJfSVRFTV9JRDoge1xuICAgICAgY29uc3Qgc2hvcnRBbnN3ZXJJdGVtID0gZm9ybUl0ZW0gYXMgU2hvcnRBbnN3ZXJJdGVtIHwgUGFyYWdyYXBoQW5zd2VySXRlbTtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5nZXROdW1lcmljVmFsaWRhdG9yKCdtaW5MZW5ndGgnLCBzaG9ydEFuc3dlckl0ZW0ubWluQ2hhckNvdW50KSk7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4uZ2V0TnVtZXJpY1ZhbGlkYXRvcignbWF4TGVuZ3RoJywgc2hvcnRBbnN3ZXJJdGVtLm1heENoYXJDb3VudCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgSTE4Tl9QQVJBR1JBUEhfQU5TV0VSX0lURU1fSUQ6XG4gICAgY2FzZSBJMThOX1NIT1JUX0FOU1dFUl9JVEVNX0lEOiB7XG4gICAgICBjb25zdCBpMThuSXRlbSA9IGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbSB8IEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtO1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xuICAgICAgZm9yIChjb25zdCBsYW5ndWFnZSBvZiBpMThuSXRlbS5sYW5ndWFnZVRhZ3MpIHtcbiAgICAgICAgLy8gRklYTUUgaWYgdGhlcmUgaXMgbm90aGlnbiB0aGVyZSBpbiB0aGUgdmFsdWUgc2hvdWxkIEkgc2V0IGEgbmV3IGludGVybmF0aW9uYWxpemVkIHN0cmluZz9cbiAgICAgICAgZ3JvdXAuY29udHJvbHNbbGFuZ3VhZ2VdID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpMThuSXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZvcm1JdGVtLnZhbHVlLCBkaXNhYmxlZDogISFmb3JtSXRlbS5kaXNhYmxlZCB9LCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb250cm9scyBmb3IgYW55IGZvcm0gaXRlbXMgbmVzdGVkIGluc2lkZSBhIHBhcmVudCBpdGVtcyBvcHRpb25zXG4gKiBAcGFyYW0gZm9ybUl0ZW0gVGhlIEZvcm1JdGVtIHdpdGggYW4gJ29wdGlvbnMnIHByb3BlcnR5XG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBjb25kaXRpb25hbCBmdW5jdGlvbiBmcm9tIHBhcmVudCAnc2VyaWFsaXplRm9ybUl0ZW1zJyBmdW5jdGlvblxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgRm9ybUNvbnRyb2wgZ2VuZXJhdG9yIGZyb20gcGFyZW50ICdzZXJpYWxpemVGb3JtSXRlbXMnIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVOZXN0ZWRPcHRpb25Gb3JtSXRlbXMoXG4gIGZvcm1JdGVtOiBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gIG1hbmFnZXJTZXJ2aWNlOiBNdG5hV2ZNYW5hZ2VyU2VydmljZSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3I/OiAoaXRlbTogRm9ybUl0ZW0pID0+IEFic3RyYWN0Q29udHJvbCB8IG51bGxcbik6IEZvcm1Hcm91cCB7XG4gIGNvbnN0IGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3QgaWQgaW4gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICBjb25zdCBzdWJJdGVtID0gZm9ybUl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+O1xuICAgICAgY29uc3QgY29udHJvbCA9IGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2Uoc3ViSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbHNbc3ViSXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udHJvbHNbZm9ybUl0ZW0uaW5zdGFuY2VJZF0gPSBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICBjb25zdCBncm91cCA9IGZvcm1JdGVtLnJlcXVpcmVkID8gbmV3IEZvcm1Hcm91cChjb250cm9scywgVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgaWYgKGZvcm1JdGVtLmRpc2FibGVkKSB7XG4gICAgZ3JvdXAuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBCdWlsZCBGb3JtQ29udHJvbHMgZm9yIGEgVGFibGVJdGVtXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gcmVxdWlyaW5nIEZvcm1Db250cm9sc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwgZnVuY3Rpb24gZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKiBAcGFyYW0gY3VzdG9tQ29udHJvbEdlbmVyYXRvciBGb3JtQ29udHJvbCBnZW5lcmF0b3IgZm9yIGN1c3RvbSBhbnkgRm9ybUl0ZW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVUYWJsZUl0ZW0oXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbWFuYWdlclNlcnZpY2U6IE10bmFXZk1hbmFnZXJTZXJ2aWNlLFxuICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZSxcbiAgY3VzdG9tQ29udHJvbEdlbmVyYXRvcj86IChpdGVtOiBGb3JtSXRlbSkgPT4gQWJzdHJhY3RDb250cm9sIHwgbnVsbFxuKTogRm9ybUdyb3VwIHtcbiAgY29uc3QgdGFibGVDb250cm9sOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9ID0ge307XG4gIGZvciAoY29uc3Qgcm93IG9mIGl0ZW0udGFibGVSb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3dJdGVtIG9mIHJvdy5pdGVtcy5maWx0ZXIoKGkpID0+ICEhaSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZXRlcm1pbmVTZXJpYWxpemVGdW5jdGlvblRvVXNlKFxuICAgICAgICByb3dJdGVtIGFzIEZvcm1JdGVtSW1wbDx1bmtub3duPixcbiAgICAgICAgbWFuYWdlclNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3JcbiAgICAgICk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICB0YWJsZUNvbnRyb2xbcm93SXRlbS5pbnN0YW5jZUlkXSA9IGNvbnRyb2w7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGdyb3VwID0gaXRlbS5yZXF1aXJlZCA/IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSA6IG5ldyBGb3JtR3JvdXAodGFibGVDb250cm9sKTtcbiAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGZvciB0aGUgY2FsbGVyIHRvIHVzZS5cbiAqXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsIENvbmRpdGlvbmFsIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IgU2VyaWFsaXplciBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gIGZvcm1JdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4gfCBXZWJGb3JtLFxuICBtYW5hZ2VyU2VydmljZTogTXRuYVdmTWFuYWdlclNlcnZpY2UsXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Db250cm9sR2VuZXJhdG9yPzogKGl0ZW06IEZvcm1JdGVtKSA9PiBBYnN0cmFjdENvbnRyb2wgfCBudWxsXG4pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgaWYgKFxuICAgIGlzRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1Byb2dyZXNzaXZlRm9ybShmb3JtSXRlbSkgfHxcbiAgICBpc1JlcGVhdGFibGVJdGVtKGZvcm1JdGVtKSB8fFxuICAgIGlzU2VjdGlvbihmb3JtSXRlbSkgfHxcbiAgICBpc0Zvcm1JdGVtR3JvdXBJbXBsKGZvcm1JdGVtKVxuICApIHtcbiAgICByZXR1cm4gc2VyaWFsaXplRm9ybUl0ZW1zKGZvcm1JdGVtLCBtYW5hZ2VyU2VydmljZSwgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCwgY3VzdG9tQ29udHJvbEdlbmVyYXRvcik7XG4gIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVRhYmxlSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UsIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsIGN1c3RvbUNvbnRyb2xHZW5lcmF0b3IpO1xuICB9IGVsc2UgaWYgKGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwoZm9ybUl0ZW0pICYmICEhY3VzdG9tQ29udHJvbEdlbmVyYXRvcikge1xuICAgIHJldHVybiBjdXN0b21Db250cm9sR2VuZXJhdG9yKGZvcm1JdGVtKTtcbiAgfSBlbHNlIGlmIChoYXNOZXN0ZWRGb3JtSXRlbXMoZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZU5lc3RlZE9wdGlvbkZvcm1JdGVtcyhmb3JtSXRlbSBhcyBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sIG1hbmFnZXJTZXJ2aWNlKTtcbiAgfSBlbHNlIGlmIChpc09mZnNldERhdGVSYW5nZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZVJhbmdlSXRlbShmb3JtSXRlbSk7XG4gIH0gZWxzZSBpZiAoaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzZXJpYWxpemVGb3JtSXRlbShmb3JtSXRlbSwgbWFuYWdlclNlcnZpY2UpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgRm9ybUdyb3VwIGZvciBhIHJhbmdlIGl0ZW1cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSBmb3IgYSBEYXRlUmFuZ2Ugb2YgRGF0ZSB8IFllYXJRdWFydGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVSYW5nZUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDxEYXRlUmFuZ2U8RGF0ZSB8IFllYXJRdWFydGVyPj4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPigpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cbiAgY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKFxuICAgIHtcbiAgICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5zdGFydCA6IG51bGwpLFxuICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUgPyBmb3JtSXRlbS52YWx1ZS5lbmQgOiBudWxsKSxcbiAgICB9LFxuICAgIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKVxuICApO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplWWVhclF1YXJ0ZXJSYW5nZUl0ZW0oZm9ybUl0ZW06IEZvcm1JdGVtSW1wbDxEYXRlUmFuZ2U8YW55Pj4pOiBGb3JtR3JvdXAge1xuICBjb25zdCB2YWxpZGF0b3JzID0gbmV3IEFycmF5PFZhbGlkYXRvckZuPigpO1xuICBpZiAoZm9ybUl0ZW0ucmVxdWlyZWQpIHtcbiAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cblxuICBsZXQgc3RhcnRZZWFyID0gbmV3IEZvcm1Db250cm9sKG51bGwsIGZvcm1JdGVtLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpO1xuICBsZXQgc3RhcnRRdHIgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gIGlmIChmb3JtSXRlbS52YWx1ZSAmJiBmb3JtSXRlbS52YWx1ZS5zdGFydCkge1xuICAgIHN0YXJ0WWVhciA9IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZS5zdGFydC55ZWFyLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgICBzdGFydFF0ciA9IG5ldyBGb3JtQ29udHJvbChmb3JtSXRlbS52YWx1ZS5zdGFydC5xdWFydGVyLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgfVxuICBjb25zdCBzdGFydEdyb3VwID0gbmV3IEZvcm1Hcm91cCh7IHllYXI6IHN0YXJ0WWVhciwgcXVhcnRlcjogc3RhcnRRdHIgfSk7XG5cbiAgbGV0IGVuZFllYXIgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gIGxldCBlbmRRdHIgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgZm9ybUl0ZW0ucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCk7XG4gIGlmIChmb3JtSXRlbS52YWx1ZSAmJiBmb3JtSXRlbS52YWx1ZS5lbmQpIHtcbiAgICBlbmRZZWFyID0gbmV3IEZvcm1Db250cm9sKGZvcm1JdGVtLnZhbHVlLmVuZC55ZWFyLCBmb3JtSXRlbS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKTtcbiAgICBlbmRRdHIgPSBuZXcgRm9ybUNvbnRyb2woZm9ybUl0ZW0udmFsdWUuZW5kLnF1YXJ0ZXIsIGZvcm1JdGVtLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpO1xuICB9XG4gIGNvbnN0IGVuZEdyb3VwID0gbmV3IEZvcm1Hcm91cCh7IHllYXI6IGVuZFllYXIsIHF1YXJ0ZXI6IGVuZFF0ciB9KTtcblxuICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBzdGFydEdyb3VwLFxuICAgIGVuZDogZW5kR3JvdXAsXG4gIH0pO1xuICBpZiAoZm9ybUl0ZW0uZGlzYWJsZWQpIHtcbiAgICBncm91cC5kaXNhYmxlKHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBWYWxpZGF0b3Igd2l0aCBhIG51bWVyaWMgdmFsdWUgZm9yIGEgRm9ybUl0ZW07XG4gKiBSZXR1cm5zIGFzIGFuIGFycmF5IG9mIGxlbmd0aCAxIG9yIDBcbiAqIEBwYXJhbSBwYXJhbTAgYHR5cGVgIC0gdHlwZSBvZiB2YWxpZGF0b3IsIGUuZy4gJ21pbkxlbmd0aCc7XG4gKiBgdmFsdWVgIC0gcGFyYW1ldGVyIGZvciB0aGUgdmFsaWRhdG9yLCBlLmcuICdtaW5MZW5ndGgodmFsdWUpJ1xuICovXG5mdW5jdGlvbiBnZXROdW1lcmljVmFsaWRhdG9yKHR5cGU6IFZhbGlkYXRvcldpdGhOdW1iZXJUeXBlLCB2YWx1ZTogbnVtYmVyKTogVmFsaWRhdG9yRm5bXSB7XG4gIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpID8gW1ZhbGlkYXRvcnNbdHlwZV0odmFsdWUpXSA6IFtdO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIE10bmFGb3JtIHZhbHVlIGluc2VydGlvblxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgRm9ybWl0ZW1zIHdpdGggbmV3IHZhbHVlcyBpbnNlcnRlZC5cbiAqXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgb2xkIEZvcm0gb3IgRm9ybSBTZWN0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIEpTT04gdmFsdWVzXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtc1xuICogQHBhcmFtIGN1c3RvbUZvcm1JdGVtQnVpbGRlciBmdW5jdGlvbiB0byBoYW5kbGUgY3VzdG9tIEZvcm1JdGVtc1xuICogQHJldHVybnMgbmV3IEZvcm1JdGVtIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IEFycmF5PEZvcm1JdGVtPiB7XG4gIHJldHVybiBzZWN0aW9uLml0ZW1zXG4gICAgLm1hcCgoaXRlbSkgPT5cbiAgICAgIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIG5nRm9ybVZhbHVlW2l0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgIGRpc2FibGVkU3RhdGUsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlcixcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIClcbiAgICAuZmlsdGVyKGlzUHJlc2VudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvcGllZCBUYWJsZUl0ZW0sIHdpdGggZWFjaCByb3cgRm9ybUl0ZW0gaGF2aW5nIG5ldyBpbnNlcnRlZCB2YWx1ZXMuXG4gKiBAcGFyYW0gaXRlbSBUYWJsZUl0ZW0gdG8gaW5zZXJ0IHZhbHVlc1xuICogQHBhcmFtIG5nRm9ybVZhbHVlIG5nRm9ybSB2YWx1ZSBvZiB0aGUgVGFibGVJdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBib29sZWFuIGZ1bmN0aW9uIGZvciBhbnkgY3VzdG9tIEZvcm1JdGVtXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1CdWlsZGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBjdXN0b20gRm9ybUl0ZW0gdmFsdWUgaW5zZXJ0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gIGl0ZW06IFRhYmxlSXRlbSxcbiAgbmdGb3JtVmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGxcbik6IFRhYmxlSXRlbSB7XG4gIGNvbnN0IHRhYmxlUm93cyA9IGl0ZW0udGFibGVSb3dzLm1hcCgocm93OiBUYWJsZVJvd0l0ZW0pID0+ICh7XG4gICAgLi4ucm93LFxuICAgIGl0ZW1zOiByb3cuaXRlbXNcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KVxuICAgICAgLm1hcCgoZm9ybUl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRldGVybWluZUluc2VydEZ1bmN0aW9uVG9Vc2UoXG4gICAgICAgICAgZm9ybUl0ZW0sXG4gICAgICAgICAgbmdGb3JtVmFsdWVbZm9ybUl0ZW0uaW5zdGFuY2VJZF0sXG4gICAgICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICAgICApO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaXNQcmVzZW50KSxcbiAgfSkpO1xuICByZXR1cm4geyAuLi5pdGVtLCB0YWJsZVJvd3MsIGRpc2FibGVkOiBfaXNEaXNhYmxlZChpdGVtLCBkaXNhYmxlZFN0YXRlKSB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgRm9ybUl0ZW0gYWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmb3JtSXRlbSBGb3JtSXRlbSByZXF1aXJpbmcgdmFsdWUgaW5zZXJ0aW9uXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKiBAcGFyYW0gY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCBDb25kaXRpb25hbCBmb3IgYSBjdXN0b20gRm9ybUl0ZW1cbiAqIEBwYXJhbSBjdXN0b21Gb3JtSXRlbUJ1aWxkZXIgVmFsdWUgaW5zZXJ0aW9uIGZ1bmN0aW9uIGZvciBhIGN1c3RvbSBGb3JtSXRlbVxuICogQHBhcmFtIGRpc2FibGVkU3RhdGUgTWFwIG9mIGl0ZW1zJyBkaXNhYmxlZCBzdGF0ZVxuICogQHBhcmFtIHBhcmVudCBQYXJlbnQgb2YgdGhlIEZvcm1JdGVtLCB1c2VkIHRvIHBhc3MgdG8gdGhlIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICBmb3JtSXRlbTogRm9ybUl0ZW0sXG4gIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICBkaXNhYmxlZFN0YXRlOiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH0sXG4gIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlLFxuICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXI/OiAoXG4gICAgc2VjdGlvbjogV2ViRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICByZlZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfVxuICApID0+IFZhbHVlSXRlbTx1bmtub3duPiB8IG51bGwsXG4gIHBhcmVudD86IFdlYkZvcm0gfCBGb3JtSXRlbUdyb3VwIHwgUmVwZWF0YWJsZUl0ZW1cbik6IEZvcm1JdGVtIHwgbnVsbCB7XG4gIGlmIChpc1NlY3Rpb24oZm9ybUl0ZW0pIHx8IGlzRm9ybUl0ZW1Hcm91cEltcGwoZm9ybUl0ZW0pIHx8IGlzUmVwZWF0YWJsZUl0ZW0oZm9ybUl0ZW0pKSB7XG4gICAgY29uc3QgaXRlbXMgPSBpbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtLFxuICAgICAgbmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbCxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQnVpbGRlclxuICAgICk7XG4gICAgcmV0dXJuIHsgLi4uZm9ybUl0ZW0sIGl0ZW1zLCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpIH0gYXMgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtO1xuICB9IGVsc2UgaWYgKGlzVGFibGVJdGVtKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBpbnNlcnRUYWJsZUl0ZW1WYWx1ZXMoXG4gICAgICBmb3JtSXRlbSxcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICB9IGVsc2UgaWYgKGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwoZm9ybUl0ZW0pICYmICEhY3VzdG9tRm9ybUl0ZW1CdWlsZGVyKSB7XG4gICAgcmV0dXJuIGN1c3RvbUZvcm1JdGVtQnVpbGRlcihwYXJlbnQsIGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZSwgZGlzYWJsZWRTdGF0ZSk7XG4gIH0gZWxzZSBpZiAoaGFzTmVzdGVkRm9ybUl0ZW1zKGZvcm1JdGVtKSkge1xuICAgIHJldHVybiBpbnNlcnROZXN0ZWRGb3JtSXRlbVZhbHVlcyhcbiAgICAgIGZvcm1JdGVtIGFzIE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgIG5nRm9ybVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZGlzYWJsZWRTdGF0ZSxcbiAgICAgIGN1c3RvbUZvcm1JdGVtQ29uZGl0aW9uYWwsXG4gICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICApO1xuICB9IGVsc2UgaWYgKGlzT2Zmc2V0RGF0ZVJhbmdlSXRlbShmb3JtSXRlbSkgfHwgaXNZZWFyUXVhcnRlclJhbmdlSXRlbShmb3JtSXRlbSkpIHtcbiAgICBjb25zdCBzdGFydCA9IGlzVHlwZTx7IHN0YXJ0OiBZZWFyUXVhcnRlciB8IERhdGUgfT4obmdGb3JtVmFsdWUsICdzdGFydCcpID8gbmdGb3JtVmFsdWUuc3RhcnQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW5kID0gaXNUeXBlPHsgZW5kOiBZZWFyUXVhcnRlciB8IERhdGUgfT4obmdGb3JtVmFsdWUsICdlbmQnKSA/IG5nRm9ybVZhbHVlLmVuZCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyAuLi5mb3JtSXRlbSwgdmFsdWU6IHsgc3RhcnQsIGVuZCB9LCBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0sIGRpc2FibGVkU3RhdGUpIH0gYXMgRm9ybUl0ZW1JbXBsPFxuICAgICAgRGF0ZVJhbmdlPERhdGUgfCBZZWFyUXVhcnRlcj5cbiAgICA+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5mb3JtSXRlbSxcbiAgICAgIHZhbHVlOiBmaW5kSXRlbVZhbHVlKGZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZSksXG4gICAgICBkaXNhYmxlZDogX2lzRGlzYWJsZWQoZm9ybUl0ZW0gYXMgRm9ybUl0ZW1JbXBsPHVua25vd24+LCBkaXNhYmxlZFN0YXRlKSxcbiAgICB9IGFzIEZvcm1JdGVtO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBuZ0Zvcm0gdmFsdWUgZm9yIGEgRm9ybUl0ZW0uXG4gKlxuICogQHBhcmFtIGZvcm1JdGVtIEZvcm1JdGVtIHJlcXVpcmluZyBhIHZhbHVlXG4gKiBAcGFyYW0gbmdGb3JtVmFsdWUgbmdGb3JtIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGZpbmRJdGVtVmFsdWUoZm9ybUl0ZW06IEZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBjb25zdCBpdGVtSWQgPSBmb3JtSXRlbS5pdGVtSWQuc3BsaXQoJy4nKS5wb3AoKTtcbiAgc3dpdGNoIChpdGVtSWQ/LnRvVXBwZXJDYXNlKCkpIHtcbiAgICAvLyBGSVhNRTogY2FuIHdlIHB1dCB0aGVzZSBJRHMgaW4gY29uc3RhbnRzIGFuZCByZWZlciB0byB0aGVtIGluc3RlYWQ/XG4gICAgY2FzZSAnREFURUlURU0nOlxuICAgICAgcmV0dXJuICEhbmdGb3JtVmFsdWUgJiYgdHlwZW9mIG5nRm9ybVZhbHVlICE9PSAnc3RyaW5nJyA/IChuZ0Zvcm1WYWx1ZSBhcyBNb21lbnQpLnRvSVNPU3RyaW5nKCkgOiAobmdGb3JtVmFsdWUgYXMgc3RyaW5nKTtcbiAgICBjYXNlICdDSEVDS0JPWElURU0nOlxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChuZ0Zvcm1WYWx1ZSkgJiYgQXJyYXkuaXNBcnJheShuZ0Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgYXJyID0gbmdGb3JtVmFsdWUgYXMgQXJyYXk8Ym9vbGVhbj47XG4gICAgICAgIHJldHVybiAoZm9ybUl0ZW0gYXMgQ2hlY2tib3hJdGVtKS5vcHRpb25zLmZpbHRlcigobywgaW5kZXgpID0+ICEhYXJyW2luZGV4XSkubWFwKChvKSA9PiBvLm9wdGlvbi5pZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgY2FzZSAnSU5URVJOQVRJT05BTElaRURQQVJBR1JBUEhBTlNXRVJJVEVNJzpcbiAgICBjYXNlICdJTlRFUk5BVElPTkFMSVpFRFNIT1JUQU5TV0VSSVRFTSc6IHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlcyA9XG4gICAgICAgIGl0ZW1JZD8udG9VcHBlckNhc2UoKSA9PT0gJ0lOVEVSTkFUSU9OQUxJWkVEUEFSQUdSQVBIQU5TV0VSSVRFTSdcbiAgICAgICAgICA/IChmb3JtSXRlbSBhcyBJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW0pLmxhbmd1YWdlVGFnc1xuICAgICAgICAgIDogKGZvcm1JdGVtIGFzIEludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtKS5sYW5ndWFnZVRhZ3M7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gbGFuZ3VhZ2VzLnJlZHVjZSgodmFsdWU6IEludGVybmF0aW9uYWxpemVkU3RyaW5nW10sIGxhbmd1YWdlKSA9PiB7XG4gICAgICAgIGlmIChuZ0Zvcm1WYWx1ZSAmJiB0eXBlb2YgbmdGb3JtVmFsdWUgPT09ICdvYmplY3QnICYmIGxhbmd1YWdlIGluIG5nRm9ybVZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSAobmdGb3JtVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2xhbmd1YWdlXTtcbiAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHZhbHVlLnB1c2goeyB2YWx1ZTogaW5wdXQgYXMgc3RyaW5nLCBmYWNldElkOiBsYW5ndWFnZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSwgW10pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5nRm9ybVZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5lc3RlZEZvcm1JdGVtVmFsdWVzKFxuICBmb3JtSXRlbTogT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICBuZ0Zvcm1WYWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGRpc2FibGVkU3RhdGU6IHsgW2luc3RhbmNlSWQ6IHN0cmluZ106IGJvb2xlYW4gfSxcbiAgY3VzdG9tRm9ybUl0ZW1Db25kaXRpb25hbDogKGl0ZW06IEZvcm1JdGVtKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2UsXG4gIGN1c3RvbUZvcm1JdGVtQnVpbGRlcj86IChcbiAgICBzZWN0aW9uOiBXZWJGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIHJmVmFsdWU6IHVua25vd24sXG4gICAgZGlzYWJsZWRTdGF0ZTogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9XG4gICkgPT4gVmFsdWVJdGVtPHVua25vd24+IHwgbnVsbFxuKTogRm9ybUl0ZW0ge1xuICBjb25zdCBvcHRpb25JdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IGlkIGluIGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgY29uc3Qgc3ViSXRlbSA9IGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdO1xuICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSBkZXRlcm1pbmVJbnNlcnRGdW5jdGlvblRvVXNlKFxuICAgICAgICBzdWJJdGVtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZVtzdWJJdGVtLmluc3RhbmNlSWRdLFxuICAgICAgICBkaXNhYmxlZFN0YXRlLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUNvbmRpdGlvbmFsLFxuICAgICAgICBjdXN0b21Gb3JtSXRlbUJ1aWxkZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZm9ybUl0ZW0sXG4gICAgb3B0aW9uSXRlbU1hcCxcbiAgICB2YWx1ZTogZmluZEl0ZW1WYWx1ZShmb3JtSXRlbSwgbmdGb3JtVmFsdWVbZm9ybUl0ZW0uaW5zdGFuY2VJZF0pLFxuICAgIGRpc2FibGVkOiBfaXNEaXNhYmxlZChmb3JtSXRlbSwgZGlzYWJsZWRTdGF0ZSksXG4gIH0gYXMgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgRm9ybUl0ZW0gaGFzIGFuIE9wdGlvbkl0ZW1NYXAgd2l0aCBhdCBsZWFzdCAxIGl0ZW0sIHdoaWNoIHJlcXVpcmUgdGhlaXIgb3duIEZvcm1Db250cm9sKHMpXG4gKiBAcGFyYW0gZm9ybUl0ZW0gRm9ybUl0ZW0gdG8gY2hlY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc05lc3RlZEZvcm1JdGVtcyhmb3JtSXRlbTogdW5rbm93bik6IGZvcm1JdGVtIGlzIHsgb3B0aW9uSXRlbU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB7XG4gIHJldHVybiAoXG4gICAgaXNUeXBlPHtcbiAgICAgIG9wdGlvbkl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIH0+KGZvcm1JdGVtLCAnb3B0aW9uSXRlbU1hcCcpICYmIE9iamVjdC5rZXlzKGZvcm1JdGVtLm9wdGlvbkl0ZW1NYXApLmxlbmd0aCA+IDBcbiAgKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBtaW4vbWF4IHNlbGVjdGlvbnMgbGltaXRzXG4gKiBAcGFyYW0gdHlwZUNoZWNrIFdoaWNoIGxpbWl0IHRvIHZhbGlkYXRlLiAnTUlOJyB8ICdNQVgnXG4gKiBAcGFyYW0gbGltaXQgdXBwZXIgb3IgbG93ZXIgbGltaXQgdG8gY2hlY2sgYWdhaW5zdFxuICovXG5mdW5jdGlvbiBudW1DaGVja2JveGVzVmFsaWRhdG9yKHR5cGVDaGVjazogJ01JTicgfCAnTUFYJywgbGltaXQgPSAxKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgIGxldCB0b3RhbFNlbGVjdGVkID0gMDtcbiAgICBpZiAoaXNGb3JtQXJyYXkoY29udHJvbCkpIHtcbiAgICAgIHRvdGFsU2VsZWN0ZWQgPSBjb250cm9sLmNvbnRyb2xzLm1hcCgoYykgPT4gYy52YWx1ZSkucmVkdWNlKCh0b3RhbCwgbmV4dCkgPT4gKG5leHQgPyB0b3RhbCArIG5leHQgOiB0b3RhbCksIDApO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZUNoZWNrKSB7XG4gICAgICBjYXNlICdNSU4nOlxuICAgICAgICByZXR1cm4gdG90YWxTZWxlY3RlZCA+PSBsaW1pdCA/IG51bGwgOiB7IG1pblNlbGVjdGVkOiAkbG9jYWxpemVgU2VsZWN0IGF0IGxlYXN0ICR7bGltaXR9YCB9O1xuICAgICAgY2FzZSAnTUFYJzpcbiAgICAgICAgcmV0dXJuIHRvdGFsU2VsZWN0ZWQgPD0gbGltaXQgPyBudWxsIDogeyBtYXhTZWxlY3RlZDogJGxvY2FsaXplYFNlbGVjdCBubyBtb3JlIHRoYW4gJHtsaW1pdH1gIH07XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0Zvcm1BcnJheShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBjb250cm9sIGlzIEZvcm1BcnJheSB7XG4gIHJldHVybiBpc1R5cGU8Rm9ybUFycmF5Pihjb250cm9sLCAnY29udHJvbHMnKTtcbn1cblxuZnVuY3Rpb24gX2lzRGlzYWJsZWQoaXRlbTogQ29uZGl0aW9uYWxJdGVtLCBkaXNhYmxlZFN0YXRlOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpc2FibGVkID0gZGlzYWJsZWRTdGF0ZVtpdGVtLmluc3RhbmNlSWRdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZGlzYWJsZWQpID8gaXRlbS5kaXNhYmxlZCA6IGRpc2FibGVkO1xufVxuXG5mdW5jdGlvbiB3aG9sZU51bWJlclBhdHRlcm4oKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbC52YWx1ZSkgfHwgaXNFbXB0eVN0cmluZyhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdob2xlTnVtYmVyLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyB3aG9sZU51bWJlcjogdHJ1ZSB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBudW1lcmljYWxWYWx1ZUNoZWNrKCk6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRyb2wudmFsdWUpIHx8IGlzRW1wdHlTdHJpbmcoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVtT25seVdpdGhvdXRDb21tYS50ZXN0KGNvbnRyb2wudmFsdWUpIHx8IG51bU9ubHlXaXRoQ29tbWEudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IG5vbkRpZ2l0OiB0cnVlIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvc2l0aXZlTnVtYmVyUGF0dGVybigpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBvc09ubHkudGVzdChjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7IHBvc2l0aXZlOiB0cnVlIH07XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyB3b3JrcyBhcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBhbmd1bGFyICdtaW4nLydtYXgnIFZhbGlkYXRvcnMuIFVzaW5nIHRoZSBidWlsdC1pbiB2YWxpZGF0b3JzXG4gKiBhcHBlYXJzIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyIGN1c3RvbSB2YWxpZGF0b3JzLCByZWdhcmRsZXNzIG9mIG9yZGVyIGluIHRoZSBhcnJheS4gVXNpbmcgdGhpcyBmdW5jdGlvblxuICogZW5zdXJlcyB2YWxpZGF0b3JzIHNldCBiZWZvcmUgdGhpcyBvbmUgbWFpbnRhaW4gcHJpb3JpdHkuIEZvciBpbnN0YW5jZSwgdGhlIGlucHV0IHZhbHVlIGZhaWxpbmcgbnVtZXJpY2FsIHZhbGlkYXRpb25cbiAqIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gdGhlIHZhbHVlIGJlaW5nIHdpdGhpbiBtaW4tbWF4IHJhbmdlLlxuICovXG5mdW5jdGlvbiBudW1WYWx1ZUxpbWl0KHR5cGU6ICdtaW4nIHwgJ21heCcsIGxpbWl0OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sLnZhbHVlKSB8fCBpc0VtcHR5U3RyaW5nKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpO1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpICYmICh0eXBlID09PSAnbWluJyA/IHZhbHVlIDwgbGltaXQgOiB2YWx1ZSA+IGxpbWl0KVxuICAgICAgPyB7XG4gICAgICAgICAgW3R5cGVdOiB7XG4gICAgICAgICAgICBbdHlwZV06IGxpbWl0LFxuICAgICAgICAgICAgYWN0dWFsOiBjb250cm9sLnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eVN0cmluZyh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhdmFsdWUubGVuZ3RoO1xufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { instanceOfModelDesignProperty } from '@mtna/designer-ts';
2
+ import { getItemMapperFromDesign, mapperItemToDesign } from '../models/design/design-mapper/mapping-logic-core';
3
+ import { getNewInitTemplateItem } from './new-base-designs.util';
4
+ export function getNewTemplateItem(designBase, languageId, languageIds) {
5
+ return getNewInitTemplateItem(designBase, languageId, languageIds);
6
+ }
7
+ export function toTemplateItem(design, context) {
8
+ const model = getItemMapperFromDesign(design, context).getModel();
9
+ return model;
10
+ }
11
+ export function getTemplateItemPotentialDesigns(design, property) {
12
+ return getItemMapperFromDesign(design).getPotentialDesigns(property);
13
+ }
14
+ export function itemToDesign(item, languageId, parent, context) {
15
+ const design = mapperItemToDesign(item, languageId, parent, context);
16
+ return Object.assign(Object.assign({}, design), { parent });
17
+ }
18
+ export function getTemplateItems(design, sectionId, propertyIds, context) {
19
+ const values = {};
20
+ const section = design.sections.find((designSection) => designSection.display === sectionId);
21
+ if (section) {
22
+ for (const propertyId of propertyIds) {
23
+ const property = section.properties.find((designProperty) => designProperty.property === propertyId);
24
+ if (property && instanceOfModelDesignProperty(property)) {
25
+ values[propertyId] = [];
26
+ for (const value of property.values) {
27
+ values[propertyId].push(toTemplateItem(value, context));
28
+ }
29
+ }
30
+ }
31
+ }
32
+ return values;
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGVzaWduLWNvcmUtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi91dGlsaXRpZXMvdGVtcGxhdGUtZGVzaWduLWNvcmUtdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQStDLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHL0csT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDaEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFVBQXNCLEVBQUUsVUFBMEIsRUFBRSxXQUFxQjtJQUMxRyxPQUFPLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBYyxFQUFFLE9BQWlCO0lBQzlELE1BQU0sS0FBSyxHQUFHLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsK0JBQStCLENBQUMsTUFBYyxFQUFFLFFBQXdCO0lBQ3RGLE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBa0IsRUFBRSxVQUEwQixFQUFFLE1BQW1CLEVBQUUsT0FBaUI7SUFDakgsTUFBTSxNQUFNLEdBQVcsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0UsdUNBQVksTUFBTSxLQUFFLE1BQU0sSUFBRztBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixNQUFjLEVBQ2QsU0FBaUIsRUFDakIsV0FBcUIsRUFDckIsT0FBaUI7SUFFakIsTUFBTSxNQUFNLEdBQXNDLEVBQUUsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQztJQUM3RixJQUFJLE9BQU8sRUFBRTtRQUNYLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1lBQ3JHLElBQUksUUFBUSxJQUFJLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN2RCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7b0JBQ25DLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUN6RDthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZXh0LCBEZXNpZ24sIERlc2lnbkJhc2UsIERlc2lnblByb3BlcnR5LCBpbnN0YW5jZU9mTW9kZWxEZXNpZ25Qcm9wZXJ0eSB9IGZyb20gJ0BtdG5hL2Rlc2lnbmVyLXRzJztcbmltcG9ydCB7IFRlbXBsYXRlSXRlbSB9IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcbmltcG9ydCB7IE10bmFMYW5ndWFnZUlkIH0gZnJvbSAnQG10bmEvY29yZS1pMThuLWFuZ3VsYXInO1xuaW1wb3J0IHsgZ2V0SXRlbU1hcHBlckZyb21EZXNpZ24sIG1hcHBlckl0ZW1Ub0Rlc2lnbiB9IGZyb20gJy4uL21vZGVscy9kZXNpZ24vZGVzaWduLW1hcHBlci9tYXBwaW5nLWxvZ2ljLWNvcmUnO1xuaW1wb3J0IHsgZ2V0TmV3SW5pdFRlbXBsYXRlSXRlbSB9IGZyb20gJy4vbmV3LWJhc2UtZGVzaWducy51dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld1RlbXBsYXRlSXRlbShkZXNpZ25CYXNlOiBEZXNpZ25CYXNlLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCwgbGFuZ3VhZ2VJZHM6IHN0cmluZ1tdKTogVGVtcGxhdGVJdGVtIHtcbiAgcmV0dXJuIGdldE5ld0luaXRUZW1wbGF0ZUl0ZW0oZGVzaWduQmFzZSwgbGFuZ3VhZ2VJZCwgbGFuZ3VhZ2VJZHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9UZW1wbGF0ZUl0ZW0oZGVzaWduOiBEZXNpZ24sIGNvbnRleHQ/OiBDb250ZXh0KTogVGVtcGxhdGVJdGVtIHtcbiAgY29uc3QgbW9kZWwgPSBnZXRJdGVtTWFwcGVyRnJvbURlc2lnbihkZXNpZ24sIGNvbnRleHQpLmdldE1vZGVsKCk7XG4gIHJldHVybiBtb2RlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBsYXRlSXRlbVBvdGVudGlhbERlc2lnbnMoZGVzaWduOiBEZXNpZ24sIHByb3BlcnR5OiBEZXNpZ25Qcm9wZXJ0eSk6IERlc2lnbkJhc2VbXSB7XG4gIHJldHVybiBnZXRJdGVtTWFwcGVyRnJvbURlc2lnbihkZXNpZ24pLmdldFBvdGVudGlhbERlc2lnbnMocHJvcGVydHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlbVRvRGVzaWduKGl0ZW06IFRlbXBsYXRlSXRlbSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQsIHBhcmVudD86IERlc2lnbkJhc2UsIGNvbnRleHQ/OiBDb250ZXh0KTogRGVzaWduIHtcbiAgY29uc3QgZGVzaWduOiBEZXNpZ24gPSBtYXBwZXJJdGVtVG9EZXNpZ24oaXRlbSwgbGFuZ3VhZ2VJZCwgcGFyZW50LCBjb250ZXh0KTtcbiAgcmV0dXJuIHsgLi4uZGVzaWduLCBwYXJlbnQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBsYXRlSXRlbXMoXG4gIGRlc2lnbjogRGVzaWduLFxuICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgcHJvcGVydHlJZHM6IHN0cmluZ1tdLFxuICBjb250ZXh0PzogQ29udGV4dFxuKTogeyBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZUl0ZW1bXSB9IHtcbiAgY29uc3QgdmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IFRlbXBsYXRlSXRlbVtdIH0gPSB7fTtcbiAgY29uc3Qgc2VjdGlvbiA9IGRlc2lnbi5zZWN0aW9ucy5maW5kKChkZXNpZ25TZWN0aW9uKSA9PiBkZXNpZ25TZWN0aW9uLmRpc3BsYXkgPT09IHNlY3Rpb25JZCk7XG4gIGlmIChzZWN0aW9uKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eUlkIG9mIHByb3BlcnR5SWRzKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHNlY3Rpb24ucHJvcGVydGllcy5maW5kKChkZXNpZ25Qcm9wZXJ0eSkgPT4gZGVzaWduUHJvcGVydHkucHJvcGVydHkgPT09IHByb3BlcnR5SWQpO1xuICAgICAgaWYgKHByb3BlcnR5ICYmIGluc3RhbmNlT2ZNb2RlbERlc2lnblByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICB2YWx1ZXNbcHJvcGVydHlJZF0gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBwcm9wZXJ0eS52YWx1ZXMpIHtcbiAgICAgICAgICB2YWx1ZXNbcHJvcGVydHlJZF0ucHVzaCh0b1RlbXBsYXRlSXRlbSh2YWx1ZSwgY29udGV4dCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG4iXX0=