@colijnit/transaction 12.1.25 → 12.1.27

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 (271) hide show
  1. package/bundles/colijnit-transaction.umd.js +7718 -5048
  2. package/bundles/colijnit-transaction.umd.js.map +1 -1
  3. package/colijnit-transaction.d.ts +207 -166
  4. package/colijnit-transaction.metadata.json +1 -1
  5. package/esm2015/colijnit-transaction.js +208 -167
  6. package/esm2015/lib/assets/dictionary/text.properties.js +13 -7
  7. package/esm2015/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +33 -37
  8. package/esm2015/lib/component/checkout/checkout-overview-payment/checkout-overview-payment.component.js +92 -0
  9. package/esm2015/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +170 -396
  10. package/esm2015/lib/component/checkout/checkout.component.js +25 -16
  11. package/esm2015/lib/component/checkout/checkout.module.js +47 -9
  12. package/esm2015/lib/component/confirmation-dialog/confirmation-dialog.component.js +16 -12
  13. package/esm2015/lib/component/core/base/components/transaction-header-block/transaction-header-block.component.js +24 -15
  14. package/esm2015/lib/component/core/base/transaction-base.component.js +15 -27
  15. package/esm2015/lib/component/core/base/transaction-filter-content-base.component.js +5 -1
  16. package/esm2015/lib/component/delivery-type-tile/delivery-type-tile.component.js +15 -6
  17. package/esm2015/lib/component/dialog/transaction-line/dialog-transaction-line-base.component.js +30 -0
  18. package/esm2015/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/dialog-transaction-line-commission-code.component.js +30 -0
  19. package/esm2015/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/dialog-transaction-line-commission-code.module.js +25 -0
  20. package/esm2015/lib/component/discount/discount.component.js +31 -28
  21. package/esm2015/lib/component/payment/payment.component.js +61 -13
  22. package/esm2015/lib/component/payment-qr-code/payment-qr-code.component.js +2 -21
  23. package/esm2015/lib/component/relation/relation-address/relation-address.component.js +129 -0
  24. package/esm2015/lib/component/relation/relation-address/relation-address.module.js +29 -0
  25. package/esm2015/lib/component/relation/relation-address-select/relation-address-select.component.js +148 -0
  26. package/esm2015/lib/component/relation/relation-address-select/relation-address-select.module.js +33 -0
  27. package/esm2015/lib/component/relation/relation-address-tile/relation-address-tile.component.js +61 -0
  28. package/esm2015/lib/component/relation/relation-address-tile/relation-address-tile.module.js +32 -0
  29. package/esm2015/lib/component/relation/relation-addresses/relation-addresses.component.js +95 -0
  30. package/esm2015/lib/component/relation/relation-addresses/relation-addresses.module.js +30 -0
  31. package/esm2015/lib/component/relation/relation-base.component.js +31 -0
  32. package/esm2015/lib/component/relation/relation-contact-details/relation-contact-details.component.js +63 -0
  33. package/esm2015/lib/component/relation/relation-contact-details/relation-contact-details.module.js +24 -0
  34. package/esm2015/lib/component/relation/relation-general/relation-general.component.js +195 -0
  35. package/esm2015/lib/component/relation/relation-general/relation-general.module.js +27 -0
  36. package/esm2015/lib/component/relation/relation-preferences/relation-preferences.component.js +65 -0
  37. package/esm2015/lib/component/relation/relation-preferences/relation-preferences.module.js +21 -0
  38. package/esm2015/lib/component/relation/relation-suggestions-list/relation-suggestions-list.component.js +30 -0
  39. package/esm2015/lib/component/relation/relation-suggestions-list/relation-suggestions-list.module.js +21 -0
  40. package/esm2015/lib/component/relation/relation-suggestions-list-item/relation-suggestions-list-item.component.js +31 -0
  41. package/esm2015/lib/component/relation/relation-suggestions-list-item/relation-suggestions-list-item.module.js +19 -0
  42. package/esm2015/lib/component/relation/relation-type/relation-type.component.js +48 -0
  43. package/esm2015/lib/component/relation/relation-type/relation-type.module.js +23 -0
  44. package/esm2015/lib/component/shared/transaction-article-text/transaction-article-text.component.js +31 -32
  45. package/esm2015/lib/component/shared/transaction-article-text-overview/transaction-article-text-overview.component.js +20 -22
  46. package/esm2015/lib/component/transaction-grid/transaction-lines-grid/transaction-lines-grid.component.js +18 -3
  47. package/esm2015/lib/component/transaction-grid/transaction-lines-grid/transaction-lines-grid.module.js +4 -2
  48. package/esm2015/lib/component/transaction-header/transaction-header/transaction-header.component.js +2 -2
  49. package/esm2015/lib/component/transaction-header/transaction-header-delivery/transaction-header-delivery.component.js +25 -3
  50. package/esm2015/lib/component/transaction-header/transaction-header-delivery/transaction-header-delivery.module.js +19 -6
  51. package/esm2015/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.component.js +22 -3
  52. package/esm2015/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.module.js +6 -2
  53. package/esm2015/lib/component/transaction-header/transaction-header-relation/transaction-header-relation.component.js +110 -8
  54. package/esm2015/lib/component/transaction-header/transaction-header-relation/transaction-header-relation.module.js +25 -2
  55. package/esm2015/lib/component/transaction-header-fields/transaction-header-administrative-relation.component.js +58 -0
  56. package/esm2015/lib/component/transaction-header-fields/transaction-header-administrative-relation.module.js +23 -0
  57. package/esm2015/lib/component/transaction-header-fields/transaction-header-branch.component.js +60 -0
  58. package/esm2015/lib/component/transaction-header-fields/transaction-header-branch.module.js +23 -0
  59. package/esm2015/lib/component/transaction-header-fields/transaction-header-definitive.component.js +44 -0
  60. package/esm2015/lib/component/transaction-header-fields/transaction-header-definitive.module.js +23 -0
  61. package/esm2015/lib/component/transaction-header-fields/transaction-header-delivery-date.component.js +3 -3
  62. package/esm2015/lib/component/transaction-header-fields/transaction-header-delivery-date.module.js +23 -0
  63. package/esm2015/lib/component/transaction-header-fields/transaction-header-delivery-method.component.js +69 -0
  64. package/esm2015/lib/component/transaction-header-fields/transaction-header-delivery-method.module.js +25 -0
  65. package/esm2015/lib/component/transaction-header-fields/transaction-header-delivery-options.component.js +69 -0
  66. package/esm2015/lib/component/transaction-header-fields/transaction-header-delivery-options.module.js +23 -0
  67. package/esm2015/lib/component/transaction-header-fields/transaction-header-downpayment-amount.component.js +81 -0
  68. package/esm2015/lib/component/transaction-header-fields/transaction-header-downpayment-amount.module.js +23 -0
  69. package/esm2015/lib/component/transaction-header-fields/transaction-header-downpayment-percentage.component.js +81 -0
  70. package/esm2015/lib/component/transaction-header-fields/transaction-header-downpayment-percentage.module.js +23 -0
  71. package/esm2015/lib/component/transaction-header-fields/transaction-header-marketing.component.js +54 -0
  72. package/esm2015/lib/component/transaction-header-fields/transaction-header-marketing.module.js +23 -0
  73. package/esm2015/lib/component/transaction-header-fields/transaction-header-partial-delivery.component.js +44 -0
  74. package/esm2015/lib/component/transaction-header-fields/transaction-header-partial-delivery.module.js +23 -0
  75. package/esm2015/lib/component/transaction-header-fields/transaction-header-preferred-delivery-date.component.js +80 -0
  76. package/esm2015/lib/component/transaction-header-fields/transaction-header-preferred-delivery-date.module.js +23 -0
  77. package/esm2015/lib/component/transaction-header-fields/transaction-header-reference.component.js +80 -0
  78. package/esm2015/lib/component/transaction-header-fields/transaction-header-reference.module.js +23 -0
  79. package/esm2015/lib/component/transaction-header-fields/transaction-header-relation-reference.component.js +80 -0
  80. package/esm2015/lib/component/transaction-header-fields/transaction-header-relation-reference.module.js +23 -0
  81. package/esm2015/lib/component/transaction-header-fields/transaction-header-remarks.component.js +80 -0
  82. package/esm2015/lib/component/transaction-header-fields/transaction-header-remarks.module.js +23 -0
  83. package/esm2015/lib/component/transaction-line/transaction-line.component.js +2 -2
  84. package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.component.js +32 -9
  85. package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.module.js +4 -3
  86. package/esm2015/lib/component/transaction-line-fields/transaction-line-fields-base.component.js +3 -1
  87. package/esm2015/lib/component/transaction-search/transaction-search-grid/transaction-search-sales-order-grid/transaction-search-sales-order-grid.component.js +1 -4
  88. package/esm2015/lib/component/transaction-search/transaction-search-result/transaction-search-result.component.js +4 -1
  89. package/esm2015/lib/component/transaction-search/transaction-search.component.js +86 -25
  90. package/esm2015/lib/component/transaction-search/transaction-search.module.js +4 -3
  91. package/esm2015/lib/service/collection-cache.service.js +14 -12
  92. package/esm2015/lib/service/dialog.service.js +7 -1
  93. package/esm2015/lib/service/payment.service.js +23 -7
  94. package/esm2015/lib/service/pending-reason.service.js +22 -20
  95. package/esm2015/lib/service/transaction-connector.service.js +240 -2
  96. package/esm2015/lib/service/transaction.service.js +240 -37
  97. package/esm2015/public_api.js +4 -3
  98. package/fesm2015/colijnit-transaction.js +3781 -1418
  99. package/fesm2015/colijnit-transaction.js.map +1 -1
  100. package/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.d.ts +1 -0
  101. package/lib/component/checkout/checkout-overview-delivery-edit/style/material.scss +2 -2
  102. package/lib/component/checkout/checkout-overview-payment/checkout-overview-payment.component.d.ts +17 -0
  103. package/lib/component/checkout/checkout-overview-payment/style/_layout.scss +47 -0
  104. package/lib/component/checkout/checkout-overview-payment/style/_material-definition.scss +18 -0
  105. package/lib/component/checkout/checkout-overview-payment/style/_theme.scss +21 -0
  106. package/lib/component/checkout/checkout-overview-payment/style/material.scss +4 -0
  107. package/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.d.ts +12 -56
  108. package/lib/component/checkout/checkout-overview-relation-edit/style/_layout.scss +9 -42
  109. package/lib/component/checkout/checkout-overview-relation-edit/style/material.scss +1 -2
  110. package/lib/component/checkout/checkout.component.d.ts +4 -2
  111. package/lib/component/checkout/style/_layout.scss +3 -0
  112. package/lib/component/checkout/style/material.scss +1 -1
  113. package/lib/component/confirmation-dialog/style/_layout.scss +0 -1
  114. package/lib/component/core/base/components/transaction-header-block/style/_layout.scss +25 -0
  115. package/lib/component/core/base/components/transaction-header-block/style/_material-definition.scss +2 -1
  116. package/lib/component/core/base/components/transaction-header-block/style/_theme.scss +6 -0
  117. package/lib/component/core/base/components/transaction-header-block/transaction-header-block.component.d.ts +3 -1
  118. package/lib/component/core/base/transaction-base.component.d.ts +0 -6
  119. package/lib/component/core/base/transaction-filter-content-base.component.d.ts +1 -0
  120. package/lib/component/delivery-type-tile/delivery-type-tile.component.d.ts +3 -1
  121. package/lib/component/dialog/transaction-line/dialog-transaction-line-base.component.d.ts +9 -0
  122. package/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/dialog-transaction-line-commission-code.component.d.ts +6 -0
  123. package/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/dialog-transaction-line-commission-code.module.d.ts +2 -0
  124. package/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/style/_layout.scss +15 -0
  125. package/lib/component/{checkout/checkout-relation-suggestions-list → dialog/transaction-line/dialog-transaction-line-commission-code}/style/_material-definition.scss +0 -0
  126. package/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/style/_theme.scss +4 -0
  127. package/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/style/material.scss +4 -0
  128. package/lib/component/payment/payment.component.d.ts +14 -2
  129. package/lib/component/payment/style/_layout.scss +1 -1
  130. package/lib/component/payment-qr-code/payment-qr-code.component.d.ts +2 -11
  131. package/lib/component/{relation-address → relation/relation-address}/relation-address.component.d.ts +6 -6
  132. package/lib/component/{relation-address → relation/relation-address}/relation-address.module.d.ts +0 -0
  133. package/lib/component/{relation-address → relation/relation-address}/style/_layout.scss +0 -2
  134. package/lib/component/{relation-address → relation/relation-address}/style/_material-definition.scss +0 -0
  135. package/lib/component/{relation-address → relation/relation-address}/style/_theme.scss +0 -3
  136. package/lib/component/relation/relation-address/style/material.scss +5 -0
  137. package/lib/component/{relation-address-select → relation/relation-address-select}/relation-address-select.component.d.ts +4 -3
  138. package/lib/component/{relation-address-select → relation/relation-address-select}/relation-address-select.module.d.ts +0 -0
  139. package/lib/component/{relation-address-select → relation/relation-address-select}/style/_layout.scss +0 -2
  140. package/lib/component/{relation-address-select → relation/relation-address-select}/style/_material-definition.scss +0 -0
  141. package/lib/component/{relation-address-select → relation/relation-address-select}/style/_theme.scss +0 -2
  142. package/lib/component/{relation-address-select → relation/relation-address-select}/style/material.scss +1 -0
  143. package/lib/component/{relation-address-tile → relation/relation-address-tile}/relation-address-tile.component.d.ts +1 -1
  144. package/lib/component/{relation-address-tile → relation/relation-address-tile}/relation-address-tile.module.d.ts +0 -0
  145. package/lib/component/{relation-address-tile → relation/relation-address-tile}/style/_layout.scss +0 -2
  146. package/lib/component/{relation-address-tile → relation/relation-address-tile}/style/_material-definition.scss +0 -0
  147. package/lib/component/{relation-address-tile → relation/relation-address-tile}/style/_theme.scss +0 -2
  148. package/lib/component/relation/relation-address-tile/style/material.scss +5 -0
  149. package/lib/component/relation/relation-addresses/relation-addresses.component.d.ts +23 -0
  150. package/lib/component/relation/relation-addresses/relation-addresses.module.d.ts +2 -0
  151. package/lib/component/relation/relation-addresses/style/_layout.scss +19 -0
  152. package/lib/component/relation/relation-addresses/style/_material-definition.scss +0 -0
  153. package/lib/component/relation/relation-addresses/style/_theme.scss +4 -0
  154. package/lib/component/relation/relation-addresses/style/material.scss +4 -0
  155. package/lib/component/relation/relation-base.component.d.ts +11 -0
  156. package/lib/component/relation/relation-contact-details/relation-contact-details.component.d.ts +11 -0
  157. package/lib/component/relation/relation-contact-details/relation-contact-details.module.d.ts +2 -0
  158. package/lib/component/relation/relation-contact-details/style/_layout.scss +6 -0
  159. package/lib/component/relation/relation-contact-details/style/_material-definition.scss +0 -0
  160. package/lib/component/relation/relation-contact-details/style/_theme.scss +6 -0
  161. package/lib/component/relation/relation-contact-details/style/material.scss +4 -0
  162. package/lib/component/relation/relation-general/relation-general.component.d.ts +25 -0
  163. package/lib/component/relation/relation-general/relation-general.module.d.ts +2 -0
  164. package/lib/component/relation/relation-general/style/_layout.scss +37 -0
  165. package/lib/component/relation/relation-general/style/_material-definition.scss +2 -0
  166. package/lib/component/relation/relation-general/style/_theme.scss +4 -0
  167. package/lib/component/relation/relation-general/style/material.scss +5 -0
  168. package/lib/component/relation/relation-preferences/relation-preferences.component.d.ts +14 -0
  169. package/lib/component/relation/relation-preferences/relation-preferences.module.d.ts +2 -0
  170. package/lib/component/relation/relation-preferences/style/_layout.scss +17 -0
  171. package/lib/component/relation/relation-preferences/style/_material-definition.scss +0 -0
  172. package/lib/component/relation/relation-preferences/style/_theme.scss +4 -0
  173. package/lib/component/relation/relation-preferences/style/material.scss +4 -0
  174. package/lib/component/{checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.d.ts → relation/relation-suggestions-list/relation-suggestions-list.component.d.ts} +1 -1
  175. package/lib/component/relation/relation-suggestions-list/relation-suggestions-list.module.d.ts +2 -0
  176. package/lib/component/relation/relation-suggestions-list/style/_layout.scss +6 -0
  177. package/lib/component/relation/relation-suggestions-list/style/_material-definition.scss +0 -0
  178. package/lib/component/relation/relation-suggestions-list/style/_theme.scss +4 -0
  179. package/lib/component/relation/relation-suggestions-list/style/material.scss +5 -0
  180. package/lib/component/{checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.d.ts → relation/relation-suggestions-list-item/relation-suggestions-list-item.component.d.ts} +1 -1
  181. package/lib/component/relation/relation-suggestions-list-item/relation-suggestions-list-item.module.d.ts +2 -0
  182. package/lib/component/relation/relation-suggestions-list-item/style/_layout.scss +32 -0
  183. package/lib/component/relation/relation-suggestions-list-item/style/_material-definition.scss +8 -0
  184. package/lib/component/relation/relation-suggestions-list-item/style/_theme.scss +4 -0
  185. package/lib/component/relation/relation-suggestions-list-item/style/material.scss +4 -0
  186. package/lib/component/relation/relation-type/relation-type.component.d.ts +10 -0
  187. package/lib/component/relation/relation-type/relation-type.module.d.ts +2 -0
  188. package/lib/component/relation/relation-type/style/_layout.scss +11 -0
  189. package/lib/component/relation/relation-type/style/_material-definition.scss +0 -0
  190. package/lib/component/relation/relation-type/style/_theme.scss +4 -0
  191. package/lib/component/relation/relation-type/style/material.scss +4 -0
  192. package/lib/component/transaction-grid/transaction-lines-grid/transaction-lines-grid.component.d.ts +4 -1
  193. package/lib/component/transaction-header/style/material.scss +3 -3
  194. package/lib/component/transaction-header/transaction-header-delivery/style/_layout.scss +13 -0
  195. package/lib/component/transaction-header/transaction-header-delivery/style/_material-definition.scss +4 -0
  196. package/lib/component/transaction-header/transaction-header-delivery/style/_theme.scss +4 -0
  197. package/lib/component/transaction-header/transaction-header-delivery/transaction-header-delivery.component.d.ts +2 -0
  198. package/lib/component/transaction-header/transaction-header-payment/style/_layout.scss +17 -0
  199. package/lib/component/transaction-header/transaction-header-payment/style/_material-definition.scss +2 -2
  200. package/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.component.d.ts +1 -0
  201. package/lib/component/transaction-header/transaction-header-relation/style/_layout.scss +43 -0
  202. package/lib/component/transaction-header/transaction-header-relation/style/_material-definition.scss +10 -0
  203. package/lib/component/transaction-header/transaction-header-relation/style/_theme.scss +7 -0
  204. package/lib/component/transaction-header/transaction-header-relation/style/material.scss +11 -0
  205. package/lib/component/transaction-header/transaction-header-relation/transaction-header-relation.component.d.ts +22 -0
  206. package/lib/component/transaction-header-fields/transaction-header-administrative-relation.component.d.ts +13 -0
  207. package/lib/component/transaction-header-fields/transaction-header-administrative-relation.module.d.ts +2 -0
  208. package/lib/component/transaction-header-fields/transaction-header-branch.component.d.ts +13 -0
  209. package/lib/component/transaction-header-fields/transaction-header-branch.module.d.ts +2 -0
  210. package/lib/component/transaction-header-fields/transaction-header-definitive.component.d.ts +8 -0
  211. package/lib/component/transaction-header-fields/transaction-header-definitive.module.d.ts +2 -0
  212. package/lib/component/transaction-header-fields/transaction-header-delivery-date.module.d.ts +2 -0
  213. package/lib/component/transaction-header-fields/transaction-header-delivery-method.component.d.ts +15 -0
  214. package/lib/component/transaction-header-fields/transaction-header-delivery-method.module.d.ts +2 -0
  215. package/lib/component/transaction-header-fields/transaction-header-delivery-options.component.d.ts +20 -0
  216. package/lib/component/transaction-header-fields/transaction-header-delivery-options.module.d.ts +2 -0
  217. package/lib/component/transaction-header-fields/transaction-header-downpayment-amount.component.d.ts +17 -0
  218. package/lib/component/transaction-header-fields/transaction-header-downpayment-amount.module.d.ts +2 -0
  219. package/lib/component/transaction-header-fields/transaction-header-downpayment-percentage.component.d.ts +17 -0
  220. package/lib/component/transaction-header-fields/transaction-header-downpayment-percentage.module.d.ts +2 -0
  221. package/lib/component/transaction-header-fields/transaction-header-marketing.component.d.ts +13 -0
  222. package/lib/component/transaction-header-fields/transaction-header-marketing.module.d.ts +2 -0
  223. package/lib/component/transaction-header-fields/transaction-header-partial-delivery.component.d.ts +8 -0
  224. package/lib/component/transaction-header-fields/transaction-header-partial-delivery.module.d.ts +2 -0
  225. package/lib/component/transaction-header-fields/transaction-header-preferred-delivery-date.component.d.ts +17 -0
  226. package/lib/component/transaction-header-fields/transaction-header-preferred-delivery-date.module.d.ts +2 -0
  227. package/lib/component/transaction-header-fields/transaction-header-reference.component.d.ts +17 -0
  228. package/lib/component/transaction-header-fields/transaction-header-reference.module.d.ts +2 -0
  229. package/lib/component/transaction-header-fields/transaction-header-relation-reference.component.d.ts +17 -0
  230. package/lib/component/transaction-header-fields/transaction-header-relation-reference.module.d.ts +2 -0
  231. package/lib/component/transaction-header-fields/transaction-header-remarks.component.d.ts +17 -0
  232. package/lib/component/transaction-header-fields/transaction-header-remarks.module.d.ts +2 -0
  233. package/lib/component/transaction-line/style/_layout.scss +12 -28
  234. package/lib/component/transaction-line/style/material.scss +1 -0
  235. package/lib/component/transaction-line-fields/transaction-line-commission-code.component.d.ts +10 -0
  236. package/lib/component/transaction-line-fields/transaction-line-fields-base.component.d.ts +1 -0
  237. package/lib/component/transaction-search/style/_layout.scss +56 -11
  238. package/lib/component/transaction-search/style/_material-definition.scss +1 -2
  239. package/lib/component/transaction-search/style/_theme.scss +4 -1
  240. package/lib/component/transaction-search/transaction-search-grid/transaction-search-sales-order-grid/transaction-search-sales-order-grid.component.d.ts +0 -1
  241. package/lib/component/transaction-search/transaction-search-result/style/_layout.scss +4 -0
  242. package/lib/component/transaction-search/transaction-search.component.d.ts +18 -4
  243. package/lib/service/dialog.service.d.ts +4 -1
  244. package/lib/service/payment.service.d.ts +6 -2
  245. package/lib/service/pending-reason.service.d.ts +3 -2
  246. package/lib/service/transaction-connector.service.d.ts +17 -0
  247. package/lib/service/transaction.service.d.ts +14 -3
  248. package/package.json +3 -3
  249. package/public_api.d.ts +3 -2
  250. package/colijnit-transaction-12.1.25.tgz +0 -0
  251. package/esm2015/lib/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +0 -30
  252. package/esm2015/lib/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +0 -31
  253. package/esm2015/lib/component/relation-address/relation-address.component.js +0 -125
  254. package/esm2015/lib/component/relation-address/relation-address.module.js +0 -28
  255. package/esm2015/lib/component/relation-address-select/relation-address-select.component.js +0 -146
  256. package/esm2015/lib/component/relation-address-select/relation-address-select.module.js +0 -33
  257. package/esm2015/lib/component/relation-address-tile/relation-address-tile.component.js +0 -61
  258. package/esm2015/lib/component/relation-address-tile/relation-address-tile.module.js +0 -32
  259. package/esm2015/lib/component/transaction-header/transaction-header.component.js +0 -41
  260. package/esm2015/lib/component/transaction-header/transaction-header.module.js +0 -29
  261. package/lib/component/checkout/checkout-relation-suggestions-list/style/_layout.scss +0 -8
  262. package/lib/component/checkout/checkout-relation-suggestions-list/style/_theme.scss +0 -6
  263. package/lib/component/checkout/checkout-relation-suggestions-list/style/material.scss +0 -4
  264. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/_layout.scss +0 -34
  265. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/_material-definition.scss +0 -8
  266. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/_theme.scss +0 -6
  267. package/lib/component/checkout/checkout-relation-suggestions-list-item/style/material.scss +0 -3
  268. package/lib/component/relation-address/style/material.scss +0 -4
  269. package/lib/component/relation-address-tile/style/material.scss +0 -4
  270. package/lib/component/transaction-header/transaction-header.component.d.ts +0 -10
  271. package/lib/component/transaction-header/transaction-header.module.d.ts +0 -2
@@ -1,285 +1,195 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Component, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from "@angular/core";
2
+ import { Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from "@angular/core";
3
3
  import { NULL_RELATION_OBJECT } from "@colijnit/transactionapi/build/model/nul-relation-object";
4
- import { CommunicationType } from "@colijnit/transactionapi/build/enum/communication-type.enum";
5
- import { ContactOption } from "@colijnit/transactionapi/build/model/contact-option.bo";
6
- import { isNill } from "@colijnit/transactionapi/build/utils/function/is-nill.function";
7
- import { RelationNameKind } from "@colijnit/transactionapi/build/enum/relation-name-kind.enum";
8
4
  import { AddressType } from "@colijnit/transactionapi/build/enum/address-type.enum";
9
- import { GenderType } from "@colijnit/transactionapi/build/enum/gender-type.enum";
10
5
  import { TransactionService } from "../../../service/transaction.service";
11
- import { BusinessObjectUtils } from "@colijnit/transactionapi/build/utils/business-object-utils";
12
- import { FormComponent, FormMasterService } from "@colijnit/corecomponents_v12";
13
- import { FunctionUtils } from "@colijnit/transactionapi/build/utils/function-utils";
14
- import { ObjectUtils } from "@colijnit/transactionapi/build/utils/object-utils";
15
- import { Address } from "@colijnit/transactionapi/build/model/address.bo";
6
+ import { FormMasterService } from "@colijnit/corecomponents_v12";
16
7
  import { animate, state, style, transition, trigger } from "@angular/animations";
17
8
  import { BusinessObjectFactory } from "../../../factory/business-object-factory";
18
9
  import { Icon } from "../../../enum/icon.enum";
19
10
  export class CheckoutOverviewRelationEditComponent {
20
- constructor(_service, _formMaster, _boFactory) {
21
- this._service = _service;
11
+ constructor(_formMaster, _boFactory, service) {
22
12
  this._formMaster = _formMaster;
23
13
  this._boFactory = _boFactory;
14
+ this.service = service;
24
15
  this.icons = Icon;
16
+ this.addressType = AddressType;
25
17
  this.validSubmit = new EventEmitter();
26
18
  this.invalidSubmit = new EventEmitter();
19
+ this.deliveryAddressChange = new EventEmitter();
20
+ this.invoiceAddressChange = new EventEmitter();
27
21
  this.relationChange = new EventEmitter();
28
- this.accountPassword = "";
29
- this.hide = true;
30
- this.gender = GenderType.Unspecified;
31
- this.emailAddress = new ContactOption();
32
- this.phoneNumber = new ContactOption();
33
- this.relationSuggestions = [];
34
- this.showRelationSidebar = false;
35
- this.inviteToAccount = false;
36
- this.addresses = [];
22
+ // public formRelation: FormGroup;
23
+ // public accountPassword: string = "";
24
+ // public hide: boolean = true;
25
+ // public gender: GenderType = GenderType.Unspecified;
26
+ // public privacySettings: RelationPrivacySetting[];
27
+ // public addresses: Address[] = [];
28
+ this._relation = NULL_RELATION_OBJECT;
37
29
  this.deliveryAddressIdx = 0;
38
30
  this.invoiceAddressIdx = 0;
39
- this.invoiceAddressSameAsDeliveryAddress = true;
40
31
  this.editAddressType = AddressType.DeliveryAddress;
41
- this.showSelectAddressDialog = false;
42
- this.showCreateAddressDialog = false;
43
- this.relType = RelationNameKind;
44
- this.genderType = GenderType;
45
- this._relation = NULL_RELATION_OBJECT;
46
- // fetches relation suggestions
47
- this._relationNameChangeHandler = FunctionUtils.Throttle(() => {
48
- return this._relationNameChangedHandlerFn();
49
- // eslint-disable-next-line no-magic-numbers
50
- }, 600);
51
32
  }
33
+ // @ViewChild(FormComponent, {static: true})
34
+ // public relationForm: FormComponent;
52
35
  set relation(value) {
53
36
  this._relation = value;
54
- this.preparePrimaryEmail();
55
- this.preparePrimaryPhone();
56
- }
57
- showClass() {
58
- return true;
37
+ if (this._relation) {
38
+ this.address = this._relation.getFirstAddressOrCreateNew();
39
+ }
59
40
  }
60
41
  get relation() {
61
42
  return this._relation;
62
43
  }
63
- get relationAsCustomer() {
64
- return this._relation && this._relation;
65
- }
66
- get editFirstAddress() {
67
- const firstAddress = this._service.getFirstAddress(this.relation);
68
- if (firstAddress) {
69
- return firstAddress;
44
+ set deliveryAddressNawNr(value) {
45
+ if (value && this.relation && this.relation.addresses) {
46
+ this.deliveryAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === value);
70
47
  }
71
- else if (this._relation) {
72
- const address = new Address();
73
- address.addressType = AddressType.DeliveryAddress;
74
- address.startDate = new Date();
75
- address.sequence = this._relation.getNextAddressSequence();
76
- this._relation.addresses.push(address);
77
- return address;
48
+ }
49
+ set invoiceAddressNawNr(value) {
50
+ if (value && this.relation && this.relation.addresses) {
51
+ this.invoiceAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === value);
78
52
  }
79
53
  }
54
+ showClass() {
55
+ return true;
56
+ }
57
+ // public addressToEdit: Address;
58
+ // public showSelectAddressDialog: boolean = false;
59
+ // public showCreateAddressDialog: boolean = false;
60
+ // public readonly relType: typeof RelationNameKind = RelationNameKind;
61
+ // public readonly genderType: typeof GenderType = GenderType;
62
+ // public get editFirstAddress(): Address {
63
+ // const firstAddress: Address = this.service.getFirstAddress(this.relation);
64
+ // if (firstAddress) {
65
+ // return firstAddress;
66
+ // } else if (this._relation) {
67
+ // const address: Address = new Address();
68
+ // address.addressType = AddressType.DeliveryAddress;
69
+ // address.startDate = new Date();
70
+ // address.sequence = this._relation.getNextAddressSequence();
71
+ // this._relation.addresses.push(address);
72
+ // return address;
73
+ // }
74
+ // }
80
75
  get applicationUser() {
81
- return this._service.applicationUser;
76
+ return this.service.applicationUser;
82
77
  }
83
78
  ngOnInit() {
84
79
  return __awaiter(this, void 0, void 0, function* () {
85
- this._initForm();
86
- this._relation.type = this.relType.Private;
87
- this._relation.gender = this.gender;
88
- yield this.loadPrivacySettings();
80
+ if (this._relation) {
81
+ this.address = this._relation.getFirstAddressOrCreateNew();
82
+ }
83
+ // this._initForm();
84
+ // this._relation.type = this.relType.Private;
85
+ // this._relation.gender = this.gender;
86
+ // await this.loadPrivacySettings();
89
87
  });
90
88
  }
89
+ updateRelation(rel) {
90
+ this._relation = rel;
91
+ this.relationChange.emit(this._relation);
92
+ }
91
93
  submit() {
92
94
  // return this.relationForm.submit();
93
95
  return this._formMaster.submitSlaves();
94
96
  }
95
- showNewAddressDialog(deliveryAddress = true) {
96
- this.editAddressType = deliveryAddress ? AddressType.DeliveryAddress : AddressType.BillingAddress;
97
- this.showCreateAddressDialog = true;
98
- }
99
- showEditAddressDialog(deliveryAddress = true) {
100
- this.editAddressType = deliveryAddress ? AddressType.DeliveryAddress : AddressType.BillingAddress;
101
- this.showSelectAddressDialog = true;
102
- }
97
+ // public showNewAddressDialog(deliveryAddress: boolean = true): void {
98
+ // this.editAddressType = deliveryAddress ? AddressType.DeliveryAddress : AddressType.BillingAddress;
99
+ // this.showCreateAddressDialog = true;
100
+ // }
101
+ // public showEditAddressDialog(deliveryAddress: boolean = true): void {
102
+ // this.editAddressType = deliveryAddress ? AddressType.DeliveryAddress : AddressType.BillingAddress;
103
+ // this.showSelectAddressDialog = true;
104
+ // }
103
105
  setIndexDeliveryAddress(idx) {
104
106
  this.deliveryAddressIdx = idx;
105
107
  this.editAddressType = AddressType.DeliveryAddress;
106
- this.selectAddress(this.relation.addresses[idx]);
107
108
  }
108
109
  setIndexInvoiceAddress(idx) {
109
110
  this.invoiceAddressIdx = idx;
110
111
  this.editAddressType = AddressType.BillingAddress;
111
- this.selectAddress(this.relation.addresses[idx]);
112
- }
113
- editAddress(addr) {
114
- this.addressToEdit = this._boFactory.makeWithRawBackendData(Address, addr);
115
- this.showEditAddressDialog();
112
+ // this.selectAddress(this.relation.addresses[idx]);
116
113
  }
114
+ // public editAddress(addr: Address): void {
115
+ // this.addressToEdit = <Address><unknown>this._boFactory.makeWithRawBackendData(Address, addr);
116
+ // this.showEditAddressDialog()
117
+ // }
117
118
  checkSameAddress(checked) {
118
119
  if (checked) {
119
120
  this.editAddressType = AddressType.DeliveryAddress;
120
- this.selectAddress(this.deliveryAddress);
121
- }
122
- }
123
- saveNewAddress(address) {
124
- address.addressType = this.editAddressType;
125
- this.relation.addresses.push(address);
126
- this.selectAddress(address);
127
- this.showCreateAddressDialog = false;
128
- }
129
- saveAddress(address) {
130
- const idx = this.relation.addresses.findIndex(a => a.nawNr === address.nawNr);
131
- if (idx > -1) {
132
- this.relation.addresses[idx] = this._boFactory.makeWithRawBackendData(Address, address);
133
- }
134
- this.showSelectAddressDialog = false;
135
- }
136
- selectAddress(address) {
137
- // if (!this.deliveryOptionsRequest) {
138
- // return;
139
- // }
140
- // if (!address) {
141
- // address = this._service.getFirstAddress(this.relation);
142
- // }
143
- // if (!address) {
144
- // return;
145
- // }
146
- // this._setCountryNameToAddress(address);
147
- // if (this.editAddressType === AddressType.DeliveryAddress) {
148
- // this.deliveryOptionsRequest.transactionAddress = address.nawNr;
149
- // this.deliveryAddress = address;
150
- // this.deliveryAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === this.deliveryAddress.nawNr);
151
- // }
152
- // if (this.invoiceAddressSameAsDeliveryAddress || this.editAddressType !== AddressType.DeliveryAddress) {
153
- // this.deliveryOptionsRequest.invoiceAddress = address.nawNr;
154
- // this.invoiceAddress = address;
155
- // this.invoiceAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === this.invoiceAddress.nawNr);
156
- // }
157
- this.showSelectAddressDialog = false;
158
- }
159
- preparePrimaryEmail() {
160
- if (this._relation) {
161
- this.emailAddress = this._relation.getLowestSequenceOfContactOptionsWithType(CommunicationType.Email);
162
- if (isNill(this.emailAddress)) {
163
- this.emailAddress = new ContactOption();
164
- this.emailAddress.type = CommunicationType.Email;
165
- this.emailAddress.sequence = 0;
166
- this._relation.addContactOption(this.emailAddress);
167
- }
168
- // if (this._transactionService.emailAddress) {
169
- // this.emailAddress.value = this._transactionService.emailAddress;
170
- // }
171
- }
172
- }
173
- preparePrimaryPhone() {
174
- if (this._relation) {
175
- this.phoneNumber = this._relation.getLowestSequenceOfContactOptionsWithType(CommunicationType.Telephone);
176
- if (isNill(this.phoneNumber)) {
177
- this.phoneNumber = new ContactOption();
178
- this.phoneNumber.type = CommunicationType.Telephone;
179
- this.phoneNumber.sequence = 0;
180
- this._relation.addContactOption(this.phoneNumber);
181
- }
182
- }
183
- }
184
- loadPrivacySettings() {
185
- return __awaiter(this, void 0, void 0, function* () {
186
- this.privacySettings = yield this._service.getRelationPrivacySettings();
187
- });
188
- }
189
- loadMarketing() {
190
- return __awaiter(this, void 0, void 0, function* () {
191
- yield this._service.getMarketingCodes();
192
- });
193
- }
194
- isShared(relationPrivacySetting) {
195
- const ownSetting = BusinessObjectUtils.FindItemById(this.relationAsCustomer.relationPrivacySettings, relationPrivacySetting.getId());
196
- if (ownSetting) {
197
- return ownSetting.allowToShare;
198
- }
199
- return false;
200
- }
201
- changeRelationType(value) {
202
- this.relation.type = value;
203
- }
204
- changeGenderType(value) {
205
- this.relation.gender = value;
206
- }
207
- firstNameChange(firstName) {
208
- if (this._relation) {
209
- this._relation.firstName = firstName;
210
- }
211
- this._relationNameChangeHandler.call(this);
212
- }
213
- familyNameChange(familyName) {
214
- if (this._relation) {
215
- this._relation.familyName = familyName;
216
- }
217
- this._relationNameChangeHandler.call(this);
218
- }
219
- checkVisibilitySuggestions() {
220
- if (this._relation.firstName && this._relation.familyName) {
221
- this.hideSidebar();
222
- }
223
- }
224
- onRelationSuggestionClick(relationSuggested) {
225
- return __awaiter(this, void 0, void 0, function* () {
226
- if (relationSuggested) {
227
- this.hideSidebar();
228
- // await this._service.addRelationToTransaction(relationSuggested.relationId);
229
- this.relation = yield this._service.getCustomerFullObjectByRelationId(relationSuggested.relationId);
230
- this.relationChange.next(this.relation);
231
- }
232
- });
233
- }
234
- changePrivacySetting(relationPrivacySetting, value) {
235
- const ownSetting = BusinessObjectUtils.FindItemById(this.relationAsCustomer.relationPrivacySettings, relationPrivacySetting.getId());
236
- if (ownSetting) {
237
- ownSetting.allowToShare = value;
238
- }
239
- else {
240
- this.relationAsCustomer.relationPrivacySettings.push(relationPrivacySetting);
121
+ // this.selectAddress(this.deliveryAddress);
241
122
  }
242
123
  }
243
- showSidebar() {
244
- this.showRelationSidebar = true;
245
- }
246
- // Hide sidebar with a little timeout to prevent missing the click
247
- hideSidebar() {
248
- setTimeout(() => {
249
- this.showRelationSidebar = false;
250
- }, 200);
251
- }
252
- _initForm() {
253
- if (this.relationForm) {
254
- this.formRelation = this.relationForm.formGroup;
255
- }
256
- }
257
- // load suggestions
258
- _relationNameChangedHandlerFn() {
259
- return __awaiter(this, void 0, void 0, function* () {
260
- const firstName = ObjectUtils.ValueOrDefault(this._relation.firstName);
261
- const secondName = ObjectUtils.ValueOrDefault(this._relation.familyName);
262
- if (!firstName && !secondName) {
263
- this.relationSuggestions = [];
264
- this.hideSidebar();
265
- return;
266
- }
267
- const relationRequest = {};
268
- relationRequest.relationType = this._relation.relationType;
269
- if (firstName) {
270
- relationRequest.firstName = firstName;
271
- }
272
- if (secondName) {
273
- relationRequest.familyName = secondName;
274
- }
275
- this.showSidebar();
276
- this.relationSuggestions = yield this._service.getRelationListObjects(relationRequest);
277
- });
278
- }
124
+ // public saveNewAddress(address: Address): void {
125
+ // address.addressType = this.editAddressType;
126
+ // this.relation.addresses.push(address);
127
+ // this.selectAddress(address);
128
+ // this.showCreateAddressDialog = false;
129
+ // }
130
+ // public saveAddress(address: Address): void {
131
+ // const idx: number = this.relation.addresses.findIndex(a => a.nawNr === address.nawNr);
132
+ // if (idx > -1) {
133
+ // this.relation.addresses[idx] = <Address><unknown>this._boFactory.makeWithRawBackendData(Address, address);
134
+ // }
135
+ // this.showSelectAddressDialog = false;
136
+ // }
137
+ // public selectAddress(address?: Address): void {
138
+ // // if (!this.deliveryOptionsRequest) {
139
+ // // return;
140
+ // // }
141
+ // // if (!address) {
142
+ // // address = this.service.getFirstAddress(this.relation);
143
+ // // }
144
+ // // if (!address) {
145
+ // // return;
146
+ // // }
147
+ // // this._setCountryNameToAddress(address);
148
+ // // if (this.editAddressType === AddressType.DeliveryAddress) {
149
+ // // this.deliveryOptionsRequest.transactionAddress = address.nawNr;
150
+ // // this.deliveryAddress = address;
151
+ // // this.deliveryAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === this.deliveryAddress.nawNr);
152
+ // // }
153
+ // // if (this.invoiceAddressSameAsDeliveryAddress || this.editAddressType !== AddressType.DeliveryAddress) {
154
+ // // this.deliveryOptionsRequest.invoiceAddress = address.nawNr;
155
+ // // this.invoiceAddress = address;
156
+ // // this.invoiceAddressIdx = this.relation.addresses.findIndex(a => a.nawNr === this.invoiceAddress.nawNr);
157
+ // // }
158
+ // this.showSelectAddressDialog = false;
159
+ // }
160
+ // public async loadPrivacySettings(): Promise<void> {
161
+ // this.privacySettings = await this.service.getRelationPrivacySettings();
162
+ // }
163
+ // public async loadMarketing(): Promise<void> {
164
+ // await this.service.getMarketingCodes();
165
+ // }
166
+ // public isShared(relationPrivacySetting: RelationPrivacySetting): boolean {
167
+ // const ownSetting: RelationPrivacySetting = BusinessObjectUtils.FindItemById(this.relationAsCustomer.relationPrivacySettings, relationPrivacySetting.getId());
168
+ // if (ownSetting) {
169
+ // return ownSetting.allowToShare;
170
+ // }
171
+ // return false;
172
+ // }
173
+ // public changeRelationType(value: RelationNameKind): void {
174
+ // this.relation.type = value;
175
+ // }
176
+ // public changePrivacySetting(relationPrivacySetting: RelationPrivacySetting, value: boolean): void {
177
+ // const ownSetting: RelationPrivacySetting = BusinessObjectUtils.FindItemById(this.relationAsCustomer.relationPrivacySettings, relationPrivacySetting.getId());
178
+ // if (ownSetting) {
179
+ // ownSetting.allowToShare = value;
180
+ // } else {
181
+ // this.relationAsCustomer.relationPrivacySettings.push(relationPrivacySetting);
182
+ // }
183
+ // }
184
+ // private _initForm(): void {
185
+ // if (this.relationForm) {
186
+ // this.formRelation = this.relationForm.formGroup;
187
+ // }
188
+ // }
279
189
  _setCountryNameToAddress(address) {
280
190
  return __awaiter(this, void 0, void 0, function* () {
281
191
  if (address.countryId && !address.countryName) {
282
- const country = yield this._service.getCountry(address.countryId);
192
+ const country = yield this.service.getCountry(address.countryId);
283
193
  address.countryName = country.description;
284
194
  }
285
195
  });
@@ -297,131 +207,40 @@ CheckoutOverviewRelationEditComponent.decorators = [
297
207
  <span class="label" [textContent]="'PERSONAL_DATA' | localize"></span>
298
208
  </div>
299
209
  <div class="checkout-data-column">
300
- <div class="checkout-data-row">
301
- <co-input-radio-button class="default-width"
302
- [name]="'type'"
303
- [label]="'PRIVATE_PERSON' | localize"
304
- [value]="relType.Private"
305
- [checked]="relation.type === relType.Private"
306
- (modelChange)="changeRelationType(relType.Private)"
307
- ></co-input-radio-button>
308
- <co-input-radio-button class="default-width"
309
- [name]="'type'"
310
- [label]="'COMPANY' | localize"
311
- [value]="relType.Company"
312
- [(model)]="relation.type"
313
- [checked]="relation.type === relType.Company"
314
- (modelChange)="changeRelationType(relType.Company)"
315
- ></co-input-radio-button>
316
- </div>
317
- <div class="checkout-data-row">
210
+ <co-relation-type
211
+ [relation]="relation"
212
+ ></co-relation-type>
213
+ <div class="default-data-row">
318
214
  <relation-customer-groups [(model)]="relation.customerGroup" required></relation-customer-groups>
319
215
  </div>
320
- <div *ngIf="relation.type === relType.Private" class="collapseable" @showHidePrivateRelationFields>
321
- <div class="checkout-data-row">
322
- <co-input-text
323
- class="checkout-first-name"
324
- [(model)]="relation.firstName"
325
- [placeholder]="'FIRST_NAME' | localize"
326
- (modelChange)="firstNameChange($event)"
327
- (blur)="checkVisibilitySuggestions()"
328
- [required]="true"
329
- ></co-input-text>
330
- <co-input-text
331
- class="checkout-prefix-name default-width"
332
- [(model)]="relation.prefix"
333
- [placeholder]="'PREFIX' | localize"
334
- ></co-input-text>
335
- <co-input-text
336
- class="checkout-last-name"
337
- [(model)]="relation.familyName"
338
- [placeholder]="'LAST_NAME' | localize"
339
- (modelChange)="familyNameChange($event)"
340
- (blur)="checkVisibilitySuggestions()"
341
- [required]="true"></co-input-text>
342
- </div>
343
- <div class="checkout-data-row">
344
- <co-input-radio-button class="default-width"
345
- [name]="'gender'"
346
- [label]="'MALE' | localize"
347
- [value]="genderType.Male"
348
- [checked]="relation.gender === genderType.Male"
349
- (modelChange)="changeGenderType(genderType.Male)"
350
- ></co-input-radio-button>
351
- <co-input-radio-button class="default-width"
352
- [name]="'gender'"
353
- [label]="'FEMALE' | localize "
354
- [value]="genderType.Female"
355
- [checked]="relation.gender === genderType.Female"
356
- (modelChange)="changeGenderType(genderType.Female)"
357
- ></co-input-radio-button>
358
- <co-input-radio-button class="default-width"
359
- [name]="'gender'"
360
- [label]="'UNKNOWN' | localize"
361
- [value]="genderType.Unspecified"
362
- [checked]="relation.gender === genderType.Unspecified"
363
- (modelChange)="changeGenderType(genderType.Unspecified)"
364
- ></co-input-radio-button>
365
- </div>
366
- <div class="checkout-data-row">
367
- <co-input-date [placeholder]="'DATE_OF_BIRTH' | localize " [(model)]="dateOfBirth" [required]="true"></co-input-date>
368
- </div>
369
- </div>
370
- <div *ngIf="relation?.type === relType.Company" class="checkout-data-row collapseable" @showHideCompanyRelationFields>
371
- <co-input-text [(model)]="relation.familyName" [placeholder]="'COMPANY_NAME' | localize" [required]="true"></co-input-text>
372
- </div>
373
- <co-relation-address [address]="editFirstAddress" [showButtons]="false"></co-relation-address>
216
+ <co-relation-general [relation]="relation" (relationChange)="updateRelation($event)"></co-relation-general>
217
+ <co-relation-address [address]="address" [showButtons]="false"></co-relation-address>
374
218
  </div>
375
219
  <div class="checkout-data-column">
376
- <div class="checkout-data-row">
377
- <co-carousel-3d *ngIf="relation.addresses && relation.addresses.length > 1"
378
- [tileWidth]="200"
379
- [tileHeight]="100"
380
- [selectedIndex]="deliveryAddressIdx"
381
- (indexSelected)="setIndexDeliveryAddress($event)">
382
- <co-relation-address-tile #carouselItem *ngFor="let address of relation.addresses; let index = index"
383
- [address]="address"
384
- [selected]="deliveryAddressIdx === index"
385
- (editAddressClicked)="editAddress($event)"
386
- ></co-relation-address-tile>
387
- </co-carousel-3d>
388
- </div>
389
- <div class="checkout-data-row">
390
- <div class="relation-address-new">
391
- <icon class="relation-address-icon" [icon]="icons.ArrowPointRight"></icon>
392
- <div [textContent]="'ADDRESS_ADD' | localize" (click)="showNewAddressDialog()"></div>
393
- </div>
394
- </div>
220
+ <co-relation-addresses
221
+ [addresses]="relation.addresses"
222
+ [type]="addressType.DeliveryAddress"
223
+ [selectedAddressIdx]="deliveryAddressIdx"
224
+ (selectedAddressChange)="setIndexDeliveryAddress($event)"
225
+ (selectedAddressNawNrChange)="deliveryAddressChange.emit($event)"
226
+ ></co-relation-addresses>
395
227
  </div>
396
-
397
228
  <div class="checkout-label-column">
398
229
  <span>02</span>
399
230
  <span class="label" [textContent]="'INVOICE_ADDRESS' | localize"></span>
400
231
  </div>
401
232
  <div class="checkout-data-column">
402
233
  <div class="checkout-data-row">
403
- <co-input-checkbox [(model)]="invoiceAddressSameAsDeliveryAddress" (modelChange)="checkSameAddress($event)" [label]="'SAME_AS_DELIVERY' | localize"></co-input-checkbox>
234
+ <co-input-checkbox [(model)]="service.invoiceAddressSameAsDelivery" (modelChange)="checkSameAddress($event)" [label]="'SAME_AS_DELIVERY' | localize"></co-input-checkbox>
404
235
  </div>
405
- <div class="overview-delivery-invoice-address" *ngIf="!invoiceAddressSameAsDeliveryAddress" @showHideInvoiceAddress>
406
- <div class="checkout-data-row">
407
- <co-carousel-3d *ngIf="relation.addresses && relation.addresses.length > 1"
408
- [tileWidth]="200"
409
- [tileHeight]="100"
410
- [selectedIndex]="invoiceAddressIdx"
411
- (indexSelected)="setIndexInvoiceAddress($event)">
412
- <co-relation-address-tile #carouselItem *ngFor="let address of relation.addresses; let index = index"
413
- [address]="address"
414
- [selected]="invoiceAddressIdx === index"
415
- (editAddressClicked)="editAddress($event)"
416
- ></co-relation-address-tile>
417
- </co-carousel-3d>
418
- </div>
419
- <div class="checkout-data-row">
420
- <div class="relation-address-new">
421
- <icon class="relation-address-icon" [icon]="icons.ArrowPointRight"></icon>
422
- <div [textContent]="'ADDRESS_ADD' | localize" (click)="showNewAddressDialog()"></div>
423
- </div>
424
- </div>
236
+ <div class="overview-delivery-invoice-address" *ngIf="!service.invoiceAddressSameAsDelivery" @showHideInvoiceAddress>
237
+ <co-relation-addresses
238
+ [addresses]="relation.addresses"
239
+ [type]="addressType.BillingAddress"
240
+ [selectedAddressIdx]="invoiceAddressIdx"
241
+ (selectedAddressChange)="setIndexInvoiceAddress($event)"
242
+ (selectedAddressNawNrChange)="invoiceAddressChange.emit($event)"
243
+ ></co-relation-addresses>
425
244
  </div>
426
245
  </div>
427
246
  <div class="checkout-label-column">
@@ -429,66 +248,18 @@ CheckoutOverviewRelationEditComponent.decorators = [
429
248
  <span class="label" [textContent]="'CONTACT_DETAILS' | localize"></span>
430
249
  </div>
431
250
  <div class="checkout-data-column">
432
- <div class="checkout-data-row">
433
- <co-input-text [(model)]="phoneNumber.value" [placeholder]="'PHONE_NO' | localize " [required]="true"></co-input-text>
434
- </div>
435
- <div class="checkout-data-row">
436
- <co-input-text [(model)]="emailAddress.value" [placeholder]="'EMAIL_ADDRESS' | localize " [type]="'email'" [required]="true"></co-input-text>
437
- </div>
438
- <!--
439
- </div>
440
- <div class="checkout-label-column">
441
- <span>04</span>
442
- <span class="label" [textContent]="'PASSWORD' | localize"></span>
443
- <span class="label-description" [textContent]="'ACCOUNT_EXPLANATION' | localize"></span>
444
- </div>
445
- <div class="checkout-data-column">
446
- -->
447
- <div class="checkout-data-row">
448
- <co-input-checkbox [label]="'INVITE_TO_ACCOUNT' | localize" [(model)]="inviteToAccount"></co-input-checkbox>
449
- </div>
251
+ <co-relation-contact-details [relation]="relation"></co-relation-contact-details>
450
252
  </div>
451
253
  <div class="checkout-label-column">
452
254
  <span>04</span>
453
255
  <span class="label" [textContent]="'PRIVACY_PREFERENCES' | localize"></span>
454
256
  </div>
455
257
  <div class="checkout-data-column">
456
- <div class="two-column-grid">
457
- <ng-container *ngFor="let privacySetting of privacySettings">
458
- <co-input-checkbox class="first-column"
459
- [label]="privacySetting.description"
460
- [model]="isShared(privacySetting)"
461
- (modelChange)="changePrivacySetting(privacySetting, $event)"
462
- ></co-input-checkbox>
463
- <span class="second-column" [textContent]="privacySetting.explanation"></span>
464
- </ng-container>
465
- </div>
258
+ <co-relation-preferences [relation]="relation"></co-relation-preferences>
466
259
  </div>
467
260
  </div>
468
261
  </co-form>
469
262
  </div>
470
- <div class="suggestions-sidebar" *ngIf="showRelationSidebar" @showHideSidebar>
471
- <div class="relation-sidebar-header">
472
- <label class="checkout-label-h3" [textContent]="'SUGGESTIONS' | localize"></label>
473
- </div>
474
- <co-checkout-relation-suggestions-list
475
- [suggestions]="relationSuggestions"
476
- (suggestionSelected)="onRelationSuggestionClick($event)"
477
- ></co-checkout-relation-suggestions-list>
478
- </div>
479
- <co-dialog *ngIf="showCreateAddressDialog">
480
- <co-relation-address
481
- (saveClick)="saveNewAddress($event)"
482
- (cancelClick)="showCreateAddressDialog = false"
483
- ></co-relation-address>
484
- </co-dialog>
485
- <co-dialog *ngIf="showSelectAddressDialog && addressToEdit">
486
- <co-relation-address
487
- [address]="addressToEdit"
488
- (saveClick)="saveAddress($event)"
489
- (cancelClick)="showSelectAddressDialog = false"
490
- ></co-relation-address>
491
- </co-dialog>
492
263
  `,
493
264
  providers: [
494
265
  FormMasterService
@@ -522,16 +293,19 @@ CheckoutOverviewRelationEditComponent.decorators = [
522
293
  },] }
523
294
  ];
524
295
  CheckoutOverviewRelationEditComponent.ctorParameters = () => [
525
- { type: TransactionService },
526
296
  { type: FormMasterService },
527
- { type: BusinessObjectFactory }
297
+ { type: BusinessObjectFactory },
298
+ { type: TransactionService }
528
299
  ];
529
300
  CheckoutOverviewRelationEditComponent.propDecorators = {
530
- relationForm: [{ type: ViewChild, args: [FormComponent, { static: true },] }],
531
301
  relation: [{ type: Input }],
302
+ deliveryAddressNawNr: [{ type: Input }],
303
+ invoiceAddressNawNr: [{ type: Input }],
532
304
  validSubmit: [{ type: Output }],
533
305
  invalidSubmit: [{ type: Output }],
306
+ deliveryAddressChange: [{ type: Output }],
307
+ invoiceAddressChange: [{ type: Output }],
534
308
  relationChange: [{ type: Output }],
535
309
  showClass: [{ type: HostBinding, args: ["class.co-checkout-overview-relation-edit",] }]
536
310
  };
537
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC9jaGVja291dC9jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0L2NoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFOUYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkRBQTZELENBQUM7QUFDOUYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN0RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw2REFBNkQsQ0FBQztBQUM3RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFFbEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDbEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1EQUFt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O3FCQUN2RCxDQUFDO29CQUNGLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRTt3QkFDaEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO3dCQUM3QyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7d0JBQzVDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7d0JBQ3JELFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7cUJBQ25ELENBQUM7aUJBQ0g7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OztZQXZQTyxrQkFBa0I7WUFFSCxpQkFBaUI7WUFRaEMscUJBQXFCOzs7MkJBaVAxQixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzt1QkFHdkMsS0FBSzswQkFRTCxNQUFNOzRCQUdOLE1BQU07NkJBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMsMENBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLWFueS10eXBlXCI7XG5pbXBvcnQge05VTExfUkVMQVRJT05fT0JKRUNUfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL251bC1yZWxhdGlvbi1vYmplY3RcIjtcbmltcG9ydCB7Q3VzdG9tZXJGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWZ1bGwtb2JqZWN0LmJvXCI7XG5pbXBvcnQge0NvbW11bmljYXRpb25UeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vY29tbXVuaWNhdGlvbi10eXBlLmVudW1cIjtcbmltcG9ydCB7Q29udGFjdE9wdGlvbn0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb250YWN0LW9wdGlvbi5ib1wiO1xuaW1wb3J0IHtpc05pbGx9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvZnVuY3Rpb24vaXMtbmlsbC5mdW5jdGlvblwiO1xuaW1wb3J0IHtSZWxhdGlvbk5hbWVLaW5kfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tbmFtZS1raW5kLmVudW1cIjtcbmltcG9ydCB7QWRkcmVzc1R5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9hZGRyZXNzLXR5cGUuZW51bVwiO1xuaW1wb3J0IHtSZWxhdGlvblByaXZhY3lTZXR0aW5nfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXByaXZhY3ktc2V0dGluZy5ib1wiO1xuaW1wb3J0IHtHZW5kZXJUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vZ2VuZGVyLXR5cGUuZW51bVwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL3RyYW5zYWN0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7QnVzaW5lc3NPYmplY3RVdGlsc30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9idXNpbmVzcy1vYmplY3QtdXRpbHNcIjtcbmltcG9ydCB7Rm9ybUNvbXBvbmVudCwgRm9ybU1hc3RlclNlcnZpY2V9IGZyb20gXCJAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjEyXCI7XG5pbXBvcnQge0Z1bmN0aW9uVXRpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvZnVuY3Rpb24tdXRpbHNcIjtcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvb2JqZWN0LXV0aWxzXCI7XG5pbXBvcnQge1JlbGF0aW9uTGlzdE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1saXN0LW9iamVjdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcmVxdWVzdFwiO1xuaW1wb3J0IHtBZGRyZXNzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FkZHJlc3MuYm9cIjtcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtGb3JtR3JvdXB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gXCIuLi8uLi8uLi9mYWN0b3J5L2J1c2luZXNzLW9iamVjdC1mYWN0b3J5XCI7XG5pbXBvcnQge0NvdW50cnl9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY291bnRyeS5ib1wiO1xuaW1wb3J0IHtJY29ufSBmcm9tIFwiLi4vLi4vLi4vZW51bS9pY29uLmVudW1cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvLWNoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXRcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpb24tZWRpdC1jb250ZW50XCI+XG4gICAgICA8Y28tZm9ybT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWZvcm0td3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sYWJlbC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxzcGFuPjAxPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIFt0ZXh0Q29udGVudF09XCInUEVSU09OQUxfREFUQScgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwiZGVmYXVsdC13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3R5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1BSSVZBVEVfUEVSU09OJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmVsVHlwZS5Qcml2YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWxhdGlvbi50eXBlID09PSByZWxUeXBlLlByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VSZWxhdGlvblR5cGUocmVsVHlwZS5Qcml2YXRlKVwiXG4gICAgICAgICAgICAgID48L2NvLWlucHV0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImRlZmF1bHQtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIid0eXBlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDT01QQU5ZJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmVsVHlwZS5Db21wYW55XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJyZWxhdGlvbi50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWxhdGlvbi50eXBlID09PSByZWxUeXBlLkNvbXBhbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VSZWxhdGlvblR5cGUocmVsVHlwZS5Db21wYW55KVwiXG4gICAgICAgICAgICAgID48L2NvLWlucHV0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgIDxyZWxhdGlvbi1jdXN0b21lci1ncm91cHMgWyhtb2RlbCldPVwicmVsYXRpb24uY3VzdG9tZXJHcm91cFwiIHJlcXVpcmVkPjwvcmVsYXRpb24tY3VzdG9tZXItZ3JvdXBzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicmVsYXRpb24udHlwZSA9PT0gcmVsVHlwZS5Qcml2YXRlXCIgY2xhc3M9XCJjb2xsYXBzZWFibGVcIiBAc2hvd0hpZGVQcml2YXRlUmVsYXRpb25GaWVsZHM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrb3V0LWZpcnN0LW5hbWVcIlxuICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwicmVsYXRpb24uZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRklSU1RfTkFNRScgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiZmlyc3ROYW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiY2hlY2tWaXNpYmlsaXR5U3VnZ2VzdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja291dC1wcmVmaXgtbmFtZSBkZWZhdWx0LXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInJlbGF0aW9uLnByZWZpeFwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BSRUZJWCcgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja291dC1sYXN0LW5hbWVcIlxuICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwicmVsYXRpb24uZmFtaWx5TmFtZVwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0xBU1RfTkFNRScgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiZmFtaWx5TmFtZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cImNoZWNrVmlzaWJpbGl0eVN1Z2dlc3Rpb25zKClcIlxuICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIj48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8Y28taW5wdXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwiZGVmYXVsdC13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInZ2VuZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ01BTEUnIHwgbG9jYWxpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdlbmRlclR5cGUuTWFsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWxhdGlvbi5nZW5kZXIgPT09IGdlbmRlclR5cGUuTWFsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiY2hhbmdlR2VuZGVyVHlwZShnZW5kZXJUeXBlLk1hbGUpXCJcbiAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgPGNvLWlucHV0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImRlZmF1bHQtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2dlbmRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGRU1BTEUnIHwgbG9jYWxpemUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZW5kZXJUeXBlLkZlbWFsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWxhdGlvbi5nZW5kZXIgPT09IGdlbmRlclR5cGUuRmVtYWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJjaGFuZ2VHZW5kZXJUeXBlKGdlbmRlclR5cGUuRmVtYWxlKVwiXG4gICAgICAgICAgICAgICAgPjwvY28taW5wdXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxjby1pbnB1dC1yYWRpby1idXR0b24gY2xhc3M9XCJkZWZhdWx0LXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidnZW5kZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVU5LTk9XTicgfCBsb2NhbGl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2VuZGVyVHlwZS5VbnNwZWNpZmllZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWxhdGlvbi5nZW5kZXIgPT09IGdlbmRlclR5cGUuVW5zcGVjaWZpZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImNoYW5nZUdlbmRlclR5cGUoZ2VuZGVyVHlwZS5VbnNwZWNpZmllZClcIlxuICAgICAgICAgICAgICAgID48L2NvLWlucHV0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxjby1pbnB1dC1kYXRlIFtwbGFjZWhvbGRlcl09XCInREFURV9PRl9CSVJUSCcgfCBsb2NhbGl6ZSBcIiBbKG1vZGVsKV09XCJkYXRlT2ZCaXJ0aFwiIFtyZXF1aXJlZF09XCJ0cnVlXCI+PC9jby1pbnB1dC1kYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJlbGF0aW9uPy50eXBlID09PSByZWxUeXBlLkNvbXBhbnlcIiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93IGNvbGxhcHNlYWJsZVwiIEBzaG93SGlkZUNvbXBhbnlSZWxhdGlvbkZpZWxkcz5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgWyhtb2RlbCldPVwicmVsYXRpb24uZmFtaWx5TmFtZVwiIFtwbGFjZWhvbGRlcl09XCInQ09NUEFOWV9OQU1FJyB8IGxvY2FsaXplXCIgW3JlcXVpcmVkXT1cInRydWVcIj48L2NvLWlucHV0LXRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzIFthZGRyZXNzXT1cImVkaXRGaXJzdEFkZHJlc3NcIiBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIj48L2NvLXJlbGF0aW9uLWFkZHJlc3M+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPGNvLWNhcm91c2VsLTNkICpuZ0lmPVwicmVsYXRpb24uYWRkcmVzc2VzICYmIHJlbGF0aW9uLmFkZHJlc3Nlcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aWxlV2lkdGhdPVwiMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aWxlSGVpZ2h0XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJbmRleF09XCJkZWxpdmVyeUFkZHJlc3NJZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4U2VsZWN0ZWQpPVwic2V0SW5kZXhEZWxpdmVyeUFkZHJlc3MoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzLXRpbGUgI2Nhcm91c2VsSXRlbSAqbmdGb3I9XCJsZXQgYWRkcmVzcyBvZiByZWxhdGlvbi5hZGRyZXNzZXM7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRyZXNzXT1cImFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImRlbGl2ZXJ5QWRkcmVzc0lkeCA9PT0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRBZGRyZXNzQ2xpY2tlZCk9XCJlZGl0QWRkcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9jby1yZWxhdGlvbi1hZGRyZXNzLXRpbGU+XG4gICAgICAgICAgICAgIDwvY28tY2Fyb3VzZWwtM2Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpb24tYWRkcmVzcy1uZXdcIj5cbiAgICAgICAgICAgICAgICA8aWNvbiBjbGFzcz1cInJlbGF0aW9uLWFkZHJlc3MtaWNvblwiIFtpY29uXT1cImljb25zLkFycm93UG9pbnRSaWdodFwiPjwvaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IFt0ZXh0Q29udGVudF09XCInQUREUkVTU19BREQnIHwgbG9jYWxpemVcIiAoY2xpY2spPVwic2hvd05ld0FkZHJlc3NEaWFsb2coKVwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgICAgPHNwYW4+MDI8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidJTlZPSUNFX0FERFJFU1MnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94IFsobW9kZWwpXT1cImludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnlBZGRyZXNzXCIgKG1vZGVsQ2hhbmdlKT1cImNoZWNrU2FtZUFkZHJlc3MoJGV2ZW50KVwiIFtsYWJlbF09XCInU0FNRV9BU19ERUxJVkVSWScgfCBsb2NhbGl6ZVwiPjwvY28taW5wdXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVydmlldy1kZWxpdmVyeS1pbnZvaWNlLWFkZHJlc3NcIiAqbmdJZj1cIiFpbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5QWRkcmVzc1wiIEBzaG93SGlkZUludm9pY2VBZGRyZXNzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8Y28tY2Fyb3VzZWwtM2QgKm5nSWY9XCJyZWxhdGlvbi5hZGRyZXNzZXMgJiYgcmVsYXRpb24uYWRkcmVzc2VzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGlsZVdpZHRoXT1cIjIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aWxlSGVpZ2h0XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEluZGV4XT1cImludm9pY2VBZGRyZXNzSWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4U2VsZWN0ZWQpPVwic2V0SW5kZXhJbnZvaWNlQWRkcmVzcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8Y28tcmVsYXRpb24tYWRkcmVzcy10aWxlICNjYXJvdXNlbEl0ZW0gKm5nRm9yPVwibGV0IGFkZHJlc3Mgb2YgcmVsYXRpb24uYWRkcmVzc2VzOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthZGRyZXNzXT1cImFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaW52b2ljZUFkZHJlc3NJZHggPT09IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRBZGRyZXNzQ2xpY2tlZCk9XCJlZGl0QWRkcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLWFkZHJlc3MtdGlsZT5cbiAgICAgICAgICAgICAgICA8L2NvLWNhcm91c2VsLTNkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aW9uLWFkZHJlc3MtbmV3XCI+XG4gICAgICAgICAgICAgICAgICA8aWNvbiBjbGFzcz1cInJlbGF0aW9uLWFkZHJlc3MtaWNvblwiIFtpY29uXT1cImljb25zLkFycm93UG9pbnRSaWdodFwiPjwvaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW3RleHRDb250ZW50XT1cIidBRERSRVNTX0FERCcgfCBsb2NhbGl6ZVwiIChjbGljayk9XCJzaG93TmV3QWRkcmVzc0RpYWxvZygpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgICAgPHNwYW4+MDM8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidDT05UQUNUX0RFVEFJTFMnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWRhdGEtY29sdW1uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgWyhtb2RlbCldPVwicGhvbmVOdW1iZXIudmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwiJ1BIT05FX05PJyB8IGxvY2FsaXplIFwiIFtyZXF1aXJlZF09XCJ0cnVlXCI+PC9jby1pbnB1dC10ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgWyhtb2RlbCldPVwiZW1haWxBZGRyZXNzLnZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cIidFTUFJTF9BRERSRVNTJyB8IGxvY2FsaXplIFwiIFt0eXBlXT1cIidlbWFpbCdcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPjwvY28taW5wdXQtdGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuPCEtLVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sYWJlbC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxzcGFuPjA0PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIFt0ZXh0Q29udGVudF09XCInUEFTU1dPUkQnIHwgbG9jYWxpemVcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWRlc2NyaXB0aW9uXCIgW3RleHRDb250ZW50XT1cIidBQ0NPVU5UX0VYUExBTkFUSU9OJyB8IGxvY2FsaXplXCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLWNvbHVtblwiPlxuLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94IFtsYWJlbF09XCInSU5WSVRFX1RPX0FDQ09VTlQnIHwgbG9jYWxpemVcIiBbKG1vZGVsKV09XCJpbnZpdGVUb0FjY291bnRcIj48L2NvLWlucHV0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgICAgPHNwYW4+MDQ8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidQUklWQUNZX1BSRUZFUkVOQ0VTJyB8IGxvY2FsaXplXCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLWNvbHVtblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3by1jb2x1bW4tZ3JpZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcml2YWN5U2V0dGluZyBvZiBwcml2YWN5U2V0dGluZ3NcIj5cbiAgICAgICAgICAgICAgICA8Y28taW5wdXQtY2hlY2tib3ggY2xhc3M9XCJmaXJzdC1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicHJpdmFjeVNldHRpbmcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiaXNTaGFyZWQocHJpdmFjeVNldHRpbmcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImNoYW5nZVByaXZhY3lTZXR0aW5nKHByaXZhY3lTZXR0aW5nLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY29uZC1jb2x1bW5cIiBbdGV4dENvbnRlbnRdPVwicHJpdmFjeVNldHRpbmcuZXhwbGFuYXRpb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jby1mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9ucy1zaWRlYmFyXCIgKm5nSWY9XCJzaG93UmVsYXRpb25TaWRlYmFyXCIgQHNob3dIaWRlU2lkZWJhcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGlvbi1zaWRlYmFyLWhlYWRlclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja291dC1sYWJlbC1oM1wiIFt0ZXh0Q29udGVudF09XCInU1VHR0VTVElPTlMnIHwgbG9jYWxpemVcIj48L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgICA8Y28tY2hlY2tvdXQtcmVsYXRpb24tc3VnZ2VzdGlvbnMtbGlzdFxuICAgICAgICBbc3VnZ2VzdGlvbnNdPVwicmVsYXRpb25TdWdnZXN0aW9uc1wiXG4gICAgICAgIChzdWdnZXN0aW9uU2VsZWN0ZWQpPVwib25SZWxhdGlvblN1Z2dlc3Rpb25DbGljaygkZXZlbnQpXCJcbiAgICAgID48L2NvLWNoZWNrb3V0LXJlbGF0aW9uLXN1Z2dlc3Rpb25zLWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGNvLWRpYWxvZyAqbmdJZj1cInNob3dDcmVhdGVBZGRyZXNzRGlhbG9nXCI+XG4gICAgICA8Y28tcmVsYXRpb24tYWRkcmVzc1xuICAgICAgICAoc2F2ZUNsaWNrKT1cInNhdmVOZXdBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAoY2FuY2VsQ2xpY2spPVwic2hvd0NyZWF0ZUFkZHJlc3NEaWFsb2cgPSBmYWxzZVwiXG4gICAgICA+PC9jby1yZWxhdGlvbi1hZGRyZXNzPlxuICAgIDwvY28tZGlhbG9nPlxuICAgIDxjby1kaWFsb2cgKm5nSWY9XCJzaG93U2VsZWN0QWRkcmVzc0RpYWxvZyAmJiBhZGRyZXNzVG9FZGl0XCI+XG4gICAgICA8Y28tcmVsYXRpb24tYWRkcmVzc1xuICAgICAgICBbYWRkcmVzc109XCJhZGRyZXNzVG9FZGl0XCJcbiAgICAgICAgKHNhdmVDbGljayk9XCJzYXZlQWRkcmVzcygkZXZlbnQpXCJcbiAgICAgICAgKGNhbmNlbENsaWNrKT1cInNob3dTZWxlY3RBZGRyZXNzRGlhbG9nID0gZmFsc2VcIlxuICAgICAgPjwvY28tcmVsYXRpb24tYWRkcmVzcz5cbiAgICA8L2NvLWRpYWxvZz5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRm9ybU1hc3RlclNlcnZpY2VcbiAgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoXCJzaG93SGlkZVByaXZhdGVSZWxhdGlvbkZpZWxkc1wiLCBbXG4gICAgICBzdGF0ZShcInZvaWRcIiwgc3R5bGUoe2hlaWdodDogMH0pKSxcbiAgICAgIHN0YXRlKFwiKlwiLCBzdHlsZSh7aGVpZ2h0OiBcIipcIn0pKSxcbiAgICAgIHRyYW5zaXRpb24oXCJ2b2lkID0+ICpcIiwgYW5pbWF0ZShcIjIwMG1zIGVhc2UtaW4tb3V0XCIpKSxcbiAgICAgIHRyYW5zaXRpb24oXCIqID0+IHZvaWRcIiwgYW5pbWF0ZShcIjIwMG1zIGVhc2Utb3V0XCIpKVxuICAgIF0pLFxuICAgIHRyaWdnZXIoXCJzaG93SGlkZUNvbXBhbnlSZWxhdGlvbkZpZWxkc1wiLCBbXG4gICAgICBzdGF0ZShcInZvaWRcIiwgc3R5bGUoe2hlaWdodDogMH0pKSxcbiAgICAgIHN0YXRlKFwiKlwiLCBzdHlsZSh7aGVpZ2h0OiBcIipcIn0pKSxcbiAgICAgIHRyYW5zaXRpb24oXCJ2b2lkID0+ICpcIiwgYW5pbWF0ZShcIjIwMG1zIGVhc2UtaW4tb3V0XCIpKSxcbiAgICAgIHRyYW5zaXRpb24oXCIqID0+IHZvaWRcIiwgYW5pbWF0ZShcIjIwMG1zIGVhc2Utb3V0XCIpKVxuICAgIF0pLFxuICAgIHRyaWdnZXIoXCJzaG93SGlkZVNpZGViYXJcIiwgW1xuICAgICAgc3RhdGUoXCJ2b2lkXCIsIHN0eWxlKHt0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgxMDAlKVwifSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHt0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwKVwifSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPD0+ICpcIiwgYW5pbWF0ZShcIjIwMG1zIGVhc2UtaW4tb3V0XCIpKVxuICAgIF0pLFxuICAgIHRyaWdnZXIoXCJzaG93SGlkZUludm9pY2VBZGRyZXNzXCIsIFtcbiAgICAgIHN0YXRlKFwidm9pZFwiLCBzdHlsZSh7aGVpZ2h0OiAwLCBvcGFjaXR5OiAwfSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHtoZWlnaHQ6IFwiKlwiLCBvcGFjaXR5OiAxfSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpLFxuICAgICAgdHJhbnNpdGlvbihcIiogPT4gdm9pZFwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1vdXRcIikpXG4gICAgXSlcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja291dE92ZXJ2aWV3UmVsYXRpb25FZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHJlYWRvbmx5IGljb25zOiB0eXBlb2YgSWNvbiA9IEljb247XG5cbiAgQFZpZXdDaGlsZChGb3JtQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHJlbGF0aW9uRm9ybTogRm9ybUNvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJlbGF0aW9uKHZhbHVlOiBSZWxhdGlvbkFueVR5cGUpIHtcbiAgICB0aGlzLl9yZWxhdGlvbiA9IHZhbHVlO1xuXG4gICAgdGhpcy5wcmVwYXJlUHJpbWFyeUVtYWlsKCk7XG4gICAgdGhpcy5wcmVwYXJlUHJpbWFyeVBob25lKCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIHZhbGlkU3VibWl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbnZhbGlkU3VibWl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWxhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFJlbGF0aW9uQW55VHlwZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlbGF0aW9uQW55VHlwZT4oKTtcblxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5jby1jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0XCIpXG4gIHB1YmxpYyBzaG93Q2xhc3MoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZm9ybVJlbGF0aW9uOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIGRhdGVPZkJpcnRoOiBEYXRlO1xuICBwdWJsaWMgYWNjb3VudFBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgaGlkZTogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBnZW5kZXI6IEdlbmRlclR5cGUgPSBHZW5kZXJUeXBlLlVuc3BlY2lmaWVkO1xuICBwdWJsaWMgZW1haWxBZGRyZXNzOiBDb250YWN0T3B0aW9uID0gbmV3IENvbnRhY3RPcHRpb24oKTtcbiAgcHVibGljIHBob25lTnVtYmVyOiBDb250YWN0T3B0aW9uID0gbmV3IENvbnRhY3RPcHRpb24oKTtcbiAgcHVibGljIHByaXZhY3lTZXR0aW5nczogUmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdO1xuICBwdWJsaWMgcmVsYXRpb25TdWdnZXN0aW9uczogUmVsYXRpb25MaXN0T2JqZWN0W10gPSBbXTtcbiAgcHVibGljIHNob3dSZWxhdGlvblNpZGViYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGludml0ZVRvQWNjb3VudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBhZGRyZXNzZXM6IEFkZHJlc3NbXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRBZGRyZXNzOiBBZGRyZXNzO1xuICBwdWJsaWMgZGVsaXZlcnlBZGRyZXNzOiBBZGRyZXNzO1xuICBwdWJsaWMgaW52b2ljZUFkZHJlc3M6IEFkZHJlc3M7XG4gIHB1YmxpYyBkZWxpdmVyeUFkZHJlc3NJZHg6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBpbnZvaWNlQWRkcmVzc0lkeDogbnVtYmVyID0gMDtcbiAgcHVibGljIGludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnlBZGRyZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGVkaXRBZGRyZXNzVHlwZTogQWRkcmVzc1R5cGUgPSBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3M7XG4gIHB1YmxpYyBhZGRyZXNzVG9FZGl0OiBBZGRyZXNzO1xuICBwdWJsaWMgc2hvd1NlbGVjdEFkZHJlc3NEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dDcmVhdGVBZGRyZXNzRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlbFR5cGU6IHR5cGVvZiBSZWxhdGlvbk5hbWVLaW5kID0gUmVsYXRpb25OYW1lS2luZDtcbiAgcHVibGljIHJlYWRvbmx5IGdlbmRlclR5cGU6IHR5cGVvZiBHZW5kZXJUeXBlID0gR2VuZGVyVHlwZTtcblxuICBwdWJsaWMgZ2V0IHJlbGF0aW9uKCk6IFJlbGF0aW9uQW55VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCByZWxhdGlvbkFzQ3VzdG9tZXIoKTogQ3VzdG9tZXJGdWxsT2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5fcmVsYXRpb24gJiYgdGhpcy5fcmVsYXRpb24gYXMgQ3VzdG9tZXJGdWxsT2JqZWN0O1xuICB9XG5cbiAgcHVibGljIGdldCBlZGl0Rmlyc3RBZGRyZXNzKCk6IEFkZHJlc3Mge1xuICAgIGNvbnN0IGZpcnN0QWRkcmVzczogQWRkcmVzcyA9IHRoaXMuX3NlcnZpY2UuZ2V0Rmlyc3RBZGRyZXNzKHRoaXMucmVsYXRpb24pO1xuICAgIGlmIChmaXJzdEFkZHJlc3MpIHtcbiAgICAgIHJldHVybiBmaXJzdEFkZHJlc3M7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgY29uc3QgYWRkcmVzczogQWRkcmVzcyA9IG5ldyBBZGRyZXNzKCk7XG4gICAgICBhZGRyZXNzLmFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzO1xuICAgICAgYWRkcmVzcy5zdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgYWRkcmVzcy5zZXF1ZW5jZSA9IHRoaXMuX3JlbGF0aW9uLmdldE5leHRBZGRyZXNzU2VxdWVuY2UoKTtcbiAgICAgIHRoaXMuX3JlbGF0aW9uLmFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIGFkZHJlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBhcHBsaWNhdGlvblVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2UuYXBwbGljYXRpb25Vc2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVsYXRpb246IFJlbGF0aW9uQW55VHlwZSA9IE5VTExfUkVMQVRJT05fT0JKRUNUO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFRyYW5zYWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9mb3JtTWFzdGVyOiBGb3JtTWFzdGVyU2VydmljZSxcbiAgICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeVxuICApIHtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2luaXRGb3JtKCk7XG4gICAgdGhpcy5fcmVsYXRpb24udHlwZSA9IHRoaXMucmVsVHlwZS5Qcml2YXRlO1xuICAgIHRoaXMuX3JlbGF0aW9uLmdlbmRlciA9IHRoaXMuZ2VuZGVyO1xuICAgIGF3YWl0IHRoaXMubG9hZFByaXZhY3lTZXR0aW5ncygpO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdCgpOiBib29sZWFuIHtcbiAgICAvLyByZXR1cm4gdGhpcy5yZWxhdGlvbkZvcm0uc3VibWl0KCk7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1NYXN0ZXIuc3VibWl0U2xhdmVzKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd05ld0FkZHJlc3NEaWFsb2coZGVsaXZlcnlBZGRyZXNzOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdEFkZHJlc3NUeXBlID0gZGVsaXZlcnlBZGRyZXNzID8gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzIDogQWRkcmVzc1R5cGUuQmlsbGluZ0FkZHJlc3M7XG4gICAgdGhpcy5zaG93Q3JlYXRlQWRkcmVzc0RpYWxvZyA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgc2hvd0VkaXRBZGRyZXNzRGlhbG9nKGRlbGl2ZXJ5QWRkcmVzczogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRBZGRyZXNzVHlwZSA9IGRlbGl2ZXJ5QWRkcmVzcyA/IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcyA6IEFkZHJlc3NUeXBlLkJpbGxpbmdBZGRyZXNzO1xuICAgIHRoaXMuc2hvd1NlbGVjdEFkZHJlc3NEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIHNldEluZGV4RGVsaXZlcnlBZGRyZXNzKGlkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NJZHggPSBpZHg7XG4gICAgdGhpcy5lZGl0QWRkcmVzc1R5cGUgPSBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3M7XG4gICAgdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMucmVsYXRpb24uYWRkcmVzc2VzW2lkeF0pO1xuICB9XG5cbiAgcHVibGljIHNldEluZGV4SW52b2ljZUFkZHJlc3MoaWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmludm9pY2VBZGRyZXNzSWR4ID0gaWR4O1xuICAgIHRoaXMuZWRpdEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuQmlsbGluZ0FkZHJlc3M7XG4gICAgdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMucmVsYXRpb24uYWRkcmVzc2VzW2lkeF0pO1xuICB9XG5cbiAgcHVibGljIGVkaXRBZGRyZXNzKGFkZHI6IEFkZHJlc3MpOiB2b2lkIHtcbiAgICB0aGlzLmFkZHJlc3NUb0VkaXQgPSA8QWRkcmVzcz48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBZGRyZXNzLCBhZGRyKTtcbiAgICB0aGlzLnNob3dFZGl0QWRkcmVzc0RpYWxvZygpXG4gIH1cblxuICBwdWJsaWMgY2hlY2tTYW1lQWRkcmVzcyhjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIHRoaXMuZWRpdEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzO1xuICAgICAgdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMuZGVsaXZlcnlBZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZU5ld0FkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIGFkZHJlc3MuYWRkcmVzc1R5cGUgPSB0aGlzLmVkaXRBZGRyZXNzVHlwZTtcbiAgICB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgIHRoaXMuc2VsZWN0QWRkcmVzcyhhZGRyZXNzKTtcbiAgICB0aGlzLnNob3dDcmVhdGVBZGRyZXNzRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy5yZWxhdGlvbi5hZGRyZXNzZXMuZmluZEluZGV4KGEgPT4gYS5uYXdOciA9PT0gYWRkcmVzcy5uYXdOcik7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlc1tpZHhdID0gPEFkZHJlc3M+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQWRkcmVzcywgYWRkcmVzcyk7XG4gICAgfVxuICAgIHRoaXMuc2hvd1NlbGVjdEFkZHJlc3NEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBZGRyZXNzKGFkZHJlc3M/OiBBZGRyZXNzKTogdm9pZCB7XG4gICAgLy8gaWYgKCF0aGlzLmRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QpIHtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgLy8gaWYgKCFhZGRyZXNzKSB7XG4gICAgLy8gICBhZGRyZXNzID0gdGhpcy5fc2VydmljZS5nZXRGaXJzdEFkZHJlc3ModGhpcy5yZWxhdGlvbik7XG4gICAgLy8gfVxuICAgIC8vIGlmICghYWRkcmVzcykge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLl9zZXRDb3VudHJ5TmFtZVRvQWRkcmVzcyhhZGRyZXNzKTtcbiAgICAvLyBpZiAodGhpcy5lZGl0QWRkcmVzc1R5cGUgPT09IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcykge1xuICAgIC8vICAgdGhpcy5kZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LnRyYW5zYWN0aW9uQWRkcmVzcyA9IGFkZHJlc3MubmF3TnI7XG4gICAgLy8gICB0aGlzLmRlbGl2ZXJ5QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgLy8gICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc0lkeCA9IHRoaXMucmVsYXRpb24uYWRkcmVzc2VzLmZpbmRJbmRleChhID0+IGEubmF3TnIgPT09IHRoaXMuZGVsaXZlcnlBZGRyZXNzLm5hd05yKTtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHRoaXMuaW52b2ljZUFkZHJlc3NTYW1lQXNEZWxpdmVyeUFkZHJlc3MgfHwgdGhpcy5lZGl0QWRkcmVzc1R5cGUgIT09IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcykge1xuICAgIC8vICAgdGhpcy5kZWxpdmVyeU9wdGlvbnNSZXF1ZXN0Lmludm9pY2VBZGRyZXNzID0gYWRkcmVzcy5uYXdOcjtcbiAgICAvLyAgIHRoaXMuaW52b2ljZUFkZHJlc3MgPSBhZGRyZXNzO1xuICAgIC8vICAgdGhpcy5pbnZvaWNlQWRkcmVzc0lkeCA9IHRoaXMucmVsYXRpb24uYWRkcmVzc2VzLmZpbmRJbmRleChhID0+IGEubmF3TnIgPT09IHRoaXMuaW52b2ljZUFkZHJlc3MubmF3TnIpO1xuICAgIC8vIH1cbiAgICB0aGlzLnNob3dTZWxlY3RBZGRyZXNzRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcHJlcGFyZVByaW1hcnlFbWFpbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgIHRoaXMuZW1haWxBZGRyZXNzID0gdGhpcy5fcmVsYXRpb24uZ2V0TG93ZXN0U2VxdWVuY2VPZkNvbnRhY3RPcHRpb25zV2l0aFR5cGUoQ29tbXVuaWNhdGlvblR5cGUuRW1haWwpO1xuICAgICAgaWYgKGlzTmlsbCh0aGlzLmVtYWlsQWRkcmVzcykpIHtcbiAgICAgICAgdGhpcy5lbWFpbEFkZHJlc3MgPSBuZXcgQ29udGFjdE9wdGlvbigpO1xuICAgICAgICB0aGlzLmVtYWlsQWRkcmVzcy50eXBlID0gQ29tbXVuaWNhdGlvblR5cGUuRW1haWw7XG4gICAgICAgIHRoaXMuZW1haWxBZGRyZXNzLnNlcXVlbmNlID0gMDtcbiAgICAgICAgdGhpcy5fcmVsYXRpb24uYWRkQ29udGFjdE9wdGlvbih0aGlzLmVtYWlsQWRkcmVzcyk7XG4gICAgICB9XG4gICAgICAvLyBpZiAodGhpcy5fdHJhbnNhY3Rpb25TZXJ2aWNlLmVtYWlsQWRkcmVzcykge1xuICAgICAgLy8gICB0aGlzLmVtYWlsQWRkcmVzcy52YWx1ZSA9IHRoaXMuX3RyYW5zYWN0aW9uU2VydmljZS5lbWFpbEFkZHJlc3M7XG4gICAgICAvLyB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZXBhcmVQcmltYXJ5UGhvbmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uKSB7XG4gICAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5fcmVsYXRpb24uZ2V0TG93ZXN0U2VxdWVuY2VPZkNvbnRhY3RPcHRpb25zV2l0aFR5cGUoQ29tbXVuaWNhdGlvblR5cGUuVGVsZXBob25lKTtcbiAgICAgIGlmIChpc05pbGwodGhpcy5waG9uZU51bWJlcikpIHtcbiAgICAgICAgdGhpcy5waG9uZU51bWJlciA9IG5ldyBDb250YWN0T3B0aW9uKCk7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIudHlwZSA9IENvbW11bmljYXRpb25UeXBlLlRlbGVwaG9uZTtcbiAgICAgICAgdGhpcy5waG9uZU51bWJlci5zZXF1ZW5jZSA9IDA7XG4gICAgICAgIHRoaXMuX3JlbGF0aW9uLmFkZENvbnRhY3RPcHRpb24odGhpcy5waG9uZU51bWJlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRQcml2YWN5U2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcml2YWN5U2V0dGluZ3MgPSBhd2FpdCB0aGlzLl9zZXJ2aWNlLmdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZE1hcmtldGluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9zZXJ2aWNlLmdldE1hcmtldGluZ0NvZGVzKCk7XG4gIH1cblxuICBwdWJsaWMgaXNTaGFyZWQocmVsYXRpb25Qcml2YWN5U2V0dGluZzogUmVsYXRpb25Qcml2YWN5U2V0dGluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG93blNldHRpbmc6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcgPSBCdXNpbmVzc09iamVjdFV0aWxzLkZpbmRJdGVtQnlJZCh0aGlzLnJlbGF0aW9uQXNDdXN0b21lci5yZWxhdGlvblByaXZhY3lTZXR0aW5ncywgcmVsYXRpb25Qcml2YWN5U2V0dGluZy5nZXRJZCgpKTtcbiAgICBpZiAob3duU2V0dGluZykge1xuICAgICAgcmV0dXJuIG93blNldHRpbmcuYWxsb3dUb1NoYXJlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUmVsYXRpb25UeXBlKHZhbHVlOiBSZWxhdGlvbk5hbWVLaW5kKTogdm9pZCB7XG4gICAgdGhpcy5yZWxhdGlvbi50eXBlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlR2VuZGVyVHlwZSh2YWx1ZTogR2VuZGVyVHlwZSk6IHZvaWQge1xuICAgIHRoaXMucmVsYXRpb24uZ2VuZGVyID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZmlyc3ROYW1lQ2hhbmdlKGZpcnN0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uKSB7XG4gICAgICB0aGlzLl9yZWxhdGlvbi5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgfVxuICAgIHRoaXMuX3JlbGF0aW9uTmFtZUNoYW5nZUhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBmYW1pbHlOYW1lQ2hhbmdlKGZhbWlseU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWxhdGlvbikge1xuICAgICAgdGhpcy5fcmVsYXRpb24uZmFtaWx5TmFtZSA9IGZhbWlseU5hbWU7XG4gICAgfVxuICAgIHRoaXMuX3JlbGF0aW9uTmFtZUNoYW5nZUhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1Zpc2liaWxpdHlTdWdnZXN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVsYXRpb24uZmlyc3ROYW1lICYmIHRoaXMuX3JlbGF0aW9uLmZhbWlseU5hbWUpIHtcbiAgICAgIHRoaXMuaGlkZVNpZGViYXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25SZWxhdGlvblN1Z2dlc3Rpb25DbGljayhyZWxhdGlvblN1Z2dlc3RlZDogUmVsYXRpb25MaXN0T2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHJlbGF0aW9uU3VnZ2VzdGVkKSB7XG4gICAgICB0aGlzLmhpZGVTaWRlYmFyKCk7XG4gICAgICAvLyBhd2FpdCB0aGlzLl9zZXJ2aWNlLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbihyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvbklkKTtcbiAgICAgIHRoaXMucmVsYXRpb24gPSBhd2FpdCB0aGlzLl9zZXJ2aWNlLmdldEN1c3RvbWVyRnVsbE9iamVjdEJ5UmVsYXRpb25JZChyZWxhdGlvblN1Z2dlc3RlZC5yZWxhdGlvbklkKTtcbiAgICAgIHRoaXMucmVsYXRpb25DaGFuZ2UubmV4dCh0aGlzLnJlbGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUHJpdmFjeVNldHRpbmcocmVsYXRpb25Qcml2YWN5U2V0dGluZzogUmVsYXRpb25Qcml2YWN5U2V0dGluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBvd25TZXR0aW5nOiBSZWxhdGlvblByaXZhY3lTZXR0aW5nID0gQnVzaW5lc3NPYmplY3RVdGlscy5GaW5kSXRlbUJ5SWQodGhpcy5yZWxhdGlvbkFzQ3VzdG9tZXIucmVsYXRpb25Qcml2YWN5U2V0dGluZ3MsIHJlbGF0aW9uUHJpdmFjeVNldHRpbmcuZ2V0SWQoKSk7XG4gICAgaWYgKG93blNldHRpbmcpIHtcbiAgICAgIG93blNldHRpbmcuYWxsb3dUb1NoYXJlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVsYXRpb25Bc0N1c3RvbWVyLnJlbGF0aW9uUHJpdmFjeVNldHRpbmdzLnB1c2gocmVsYXRpb25Qcml2YWN5U2V0dGluZyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNob3dTaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1JlbGF0aW9uU2lkZWJhciA9IHRydWU7XG4gIH1cblxuICAvLyBIaWRlIHNpZGViYXIgd2l0aCBhIGxpdHRsZSB0aW1lb3V0IHRvIHByZXZlbnQgbWlzc2luZyB0aGUgY2xpY2tcbiAgcHVibGljIGhpZGVTaWRlYmFyKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93UmVsYXRpb25TaWRlYmFyID0gZmFsc2U7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRGb3JtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbGF0aW9uRm9ybSkge1xuICAgICAgdGhpcy5mb3JtUmVsYXRpb24gPSB0aGlzLnJlbGF0aW9uRm9ybS5mb3JtR3JvdXA7XG4gICAgfVxuICB9XG5cbiAgLy8gZmV0Y2hlcyByZWxhdGlvbiBzdWdnZXN0aW9uc1xuICBwcml2YXRlIF9yZWxhdGlvbk5hbWVDaGFuZ2VIYW5kbGVyOiBGdW5jdGlvbiA9IEZ1bmN0aW9uVXRpbHMuVGhyb3R0bGUoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbk5hbWVDaGFuZ2VkSGFuZGxlckZuKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgfSwgNjAwKTtcblxuICAvLyBsb2FkIHN1Z2dlc3Rpb25zXG4gIHByaXZhdGUgYXN5bmMgX3JlbGF0aW9uTmFtZUNoYW5nZWRIYW5kbGVyRm4oKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBmaXJzdE5hbWU6IHN0cmluZyA9IE9iamVjdFV0aWxzLlZhbHVlT3JEZWZhdWx0KHRoaXMuX3JlbGF0aW9uLmZpcnN0TmFtZSk7XG4gICAgY29uc3Qgc2Vjb25kTmFtZTogc3RyaW5nID0gT2JqZWN0VXRpbHMuVmFsdWVPckRlZmF1bHQodGhpcy5fcmVsYXRpb24uZmFtaWx5TmFtZSk7XG5cbiAgICBpZiAoIWZpcnN0TmFtZSAmJiAhc2Vjb25kTmFtZSkge1xuICAgICAgdGhpcy5yZWxhdGlvblN1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLmhpZGVTaWRlYmFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRpb25SZXF1ZXN0OiBSZWxhdGlvblJlcXVlc3QgPSB7fTtcbiAgICByZWxhdGlvblJlcXVlc3QucmVsYXRpb25UeXBlID0gdGhpcy5fcmVsYXRpb24ucmVsYXRpb25UeXBlO1xuICAgIGlmIChmaXJzdE5hbWUpIHtcbiAgICAgIHJlbGF0aW9uUmVxdWVzdC5maXJzdE5hbWUgPSBmaXJzdE5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZE5hbWUpIHtcbiAgICAgIHJlbGF0aW9uUmVxdWVzdC5mYW1pbHlOYW1lID0gc2Vjb25kTmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dTaWRlYmFyKCk7XG4gICAgdGhpcy5yZWxhdGlvblN1Z2dlc3Rpb25zID0gYXdhaXQgdGhpcy5fc2VydmljZS5nZXRSZWxhdGlvbkxpc3RPYmplY3RzKHJlbGF0aW9uUmVxdWVzdCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zZXRDb3VudHJ5TmFtZVRvQWRkcmVzcyhhZGRyZXNzOiBBZGRyZXNzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGFkZHJlc3MuY291bnRyeUlkICYmICFhZGRyZXNzLmNvdW50cnlOYW1lKSB7XG4gICAgICBjb25zdCBjb3VudHJ5OiBDb3VudHJ5ID0gYXdhaXQgdGhpcy5fc2VydmljZS5nZXRDb3VudHJ5KGFkZHJlc3MuY291bnRyeUlkKTtcbiAgICAgIGFkZHJlc3MuY291bnRyeU5hbWUgPSBjb3VudHJ5LmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtb3ZlcnZpZXctcmVsYXRpb24tZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cmFuc2FjdGlvbi9zcmMvbGliL2NvbXBvbmVudC9jaGVja291dC9jaGVja291dC1vdmVydmlldy1yZWxhdGlvbi1lZGl0L2NoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUM5RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDbEYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUUvRSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFpRzdDLE1BQU0sT0FBTyxxQ0FBcUM7SUErRmhELFlBQ1UsV0FBOEIsRUFDOUIsVUFBaUMsRUFDbEMsT0FBMkI7UUFGMUIsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBQzlCLGVBQVUsR0FBVixVQUFVLENBQXVCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBakdwQixVQUFLLEdBQWdCLElBQUksQ0FBQztRQUMxQixnQkFBVyxHQUF1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QUUsQ0FBQyxFQUFDLENBQUMsQ0FBQzt3QkFDN0MsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO3dCQUM1QyxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO3dCQUNyRCxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3FCQUNuRCxDQUFDO2lCQUNIO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUFyR08saUJBQWlCO1lBR2pCLHFCQUFxQjtZQUpyQixrQkFBa0I7Ozt1QkE4R3ZCLEtBQUs7bUNBWUwsS0FBSztrQ0FPTCxLQUFLOzBCQU9MLE1BQU07NEJBR04sTUFBTTtvQ0FHTixNQUFNO21DQUdOLE1BQU07NkJBR04sTUFBTTt3QkFHTixXQUFXLFNBQUMsMENBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1JlbGF0aW9uQW55VHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZVwiO1xuaW1wb3J0IHtOVUxMX1JFTEFUSU9OX09CSkVDVH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9udWwtcmVsYXRpb24tb2JqZWN0XCI7XG5pbXBvcnQge0FkZHJlc3NUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vYWRkcmVzcy10eXBlLmVudW1cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge0Zvcm1NYXN0ZXJTZXJ2aWNlfSBmcm9tIFwiQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMlwiO1xuaW1wb3J0IHtBZGRyZXNzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FkZHJlc3MuYm9cIjtcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gXCIuLi8uLi8uLi9mYWN0b3J5L2J1c2luZXNzLW9iamVjdC1mYWN0b3J5XCI7XG5pbXBvcnQge0NvdW50cnl9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY291bnRyeS5ib1wiO1xuaW1wb3J0IHtJY29ufSBmcm9tIFwiLi4vLi4vLi4vZW51bS9pY29uLmVudW1cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvLWNoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXRcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpb24tZWRpdC1jb250ZW50XCI+XG4gICAgICA8Y28tZm9ybT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWZvcm0td3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sYWJlbC1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxzcGFuPjAxPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIFt0ZXh0Q29udGVudF09XCInUEVSU09OQUxfREFUQScgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxjby1yZWxhdGlvbi10eXBlXG4gICAgICAgICAgICAgIFtyZWxhdGlvbl09XCJyZWxhdGlvblwiXG4gICAgICAgICAgICA+PC9jby1yZWxhdGlvbi10eXBlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlZmF1bHQtZGF0YS1yb3dcIj5cbiAgICAgICAgICAgICAgPHJlbGF0aW9uLWN1c3RvbWVyLWdyb3VwcyBbKG1vZGVsKV09XCJyZWxhdGlvbi5jdXN0b21lckdyb3VwXCIgcmVxdWlyZWQ+PC9yZWxhdGlvbi1jdXN0b21lci1ncm91cHM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxjby1yZWxhdGlvbi1nZW5lcmFsIFtyZWxhdGlvbl09XCJyZWxhdGlvblwiIChyZWxhdGlvbkNoYW5nZSk9XCJ1cGRhdGVSZWxhdGlvbigkZXZlbnQpXCI+PC9jby1yZWxhdGlvbi1nZW5lcmFsPlxuICAgICAgICAgICAgPGNvLXJlbGF0aW9uLWFkZHJlc3MgW2FkZHJlc3NdPVwiYWRkcmVzc1wiIFtzaG93QnV0dG9uc109XCJmYWxzZVwiPjwvY28tcmVsYXRpb24tYWRkcmVzcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxjby1yZWxhdGlvbi1hZGRyZXNzZXNcbiAgICAgICAgICAgICAgW2FkZHJlc3Nlc109XCJyZWxhdGlvbi5hZGRyZXNzZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCJhZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3NcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRBZGRyZXNzSWR4XT1cImRlbGl2ZXJ5QWRkcmVzc0lkeFwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZEFkZHJlc3NDaGFuZ2UpPVwic2V0SW5kZXhEZWxpdmVyeUFkZHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZEFkZHJlc3NOYXdOckNoYW5nZSk9XCJkZWxpdmVyeUFkZHJlc3NDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2NvLXJlbGF0aW9uLWFkZHJlc3Nlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICA8c3Bhbj4wMjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbdGV4dENvbnRlbnRdPVwiJ0lOVk9JQ0VfQUREUkVTUycgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLXJvd1wiPlxuICAgICAgICAgICAgICA8Y28taW5wdXQtY2hlY2tib3ggWyhtb2RlbCldPVwic2VydmljZS5pbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5XCIgKG1vZGVsQ2hhbmdlKT1cImNoZWNrU2FtZUFkZHJlc3MoJGV2ZW50KVwiIFtsYWJlbF09XCInU0FNRV9BU19ERUxJVkVSWScgfCBsb2NhbGl6ZVwiPjwvY28taW5wdXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVydmlldy1kZWxpdmVyeS1pbnZvaWNlLWFkZHJlc3NcIiAqbmdJZj1cIiFzZXJ2aWNlLmludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnlcIiBAc2hvd0hpZGVJbnZvaWNlQWRkcmVzcz5cbiAgICAgICAgICAgICAgPGNvLXJlbGF0aW9uLWFkZHJlc3Nlc1xuICAgICAgICAgICAgICAgIFthZGRyZXNzZXNdPVwicmVsYXRpb24uYWRkcmVzc2VzXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJhZGRyZXNzVHlwZS5CaWxsaW5nQWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkQWRkcmVzc0lkeF09XCJpbnZvaWNlQWRkcmVzc0lkeFwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkQWRkcmVzc0NoYW5nZSk9XCJzZXRJbmRleEludm9pY2VBZGRyZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEFkZHJlc3NOYXdOckNoYW5nZSk9XCJpbnZvaWNlQWRkcmVzc0NoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9jby1yZWxhdGlvbi1hZGRyZXNzZXM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbGFiZWwtY29sdW1uXCI+XG4gICAgICAgICAgICA8c3Bhbj4wMzwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIiBbdGV4dENvbnRlbnRdPVwiJ0NPTlRBQ1RfREVUQUlMUycgfCBsb2NhbGl6ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtZGF0YS1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxjby1yZWxhdGlvbi1jb250YWN0LWRldGFpbHMgW3JlbGF0aW9uXT1cInJlbGF0aW9uXCI+PC9jby1yZWxhdGlvbi1jb250YWN0LWRldGFpbHM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxhYmVsLWNvbHVtblwiPlxuICAgICAgICAgICAgPHNwYW4+MDQ8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgW3RleHRDb250ZW50XT1cIidQUklWQUNZX1BSRUZFUkVOQ0VTJyB8IGxvY2FsaXplXCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1kYXRhLWNvbHVtblwiPlxuICAgICAgICAgICAgPGNvLXJlbGF0aW9uLXByZWZlcmVuY2VzIFtyZWxhdGlvbl09XCJyZWxhdGlvblwiPjwvY28tcmVsYXRpb24tcHJlZmVyZW5jZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jby1mb3JtPlxuICAgIDwvZGl2PlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICBGb3JtTWFzdGVyU2VydmljZVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInNob3dIaWRlUHJpdmF0ZVJlbGF0aW9uRmllbGRzXCIsIFtcbiAgICAgIHN0YXRlKFwidm9pZFwiLCBzdHlsZSh7aGVpZ2h0OiAwfSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHtoZWlnaHQ6IFwiKlwifSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpLFxuICAgICAgdHJhbnNpdGlvbihcIiogPT4gdm9pZFwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlQ29tcGFueVJlbGF0aW9uRmllbGRzXCIsIFtcbiAgICAgIHN0YXRlKFwidm9pZFwiLCBzdHlsZSh7aGVpZ2h0OiAwfSkpLFxuICAgICAgc3RhdGUoXCIqXCIsIHN0eWxlKHtoZWlnaHQ6IFwiKlwifSkpLFxuICAgICAgdHJhbnNpdGlvbihcInZvaWQgPT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpLFxuICAgICAgdHJhbnNpdGlvbihcIiogPT4gdm9pZFwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlU2lkZWJhclwiLCBbXG4gICAgICBzdGF0ZShcInZvaWRcIiwgc3R5bGUoe3RyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDEwMCUpXCJ9KSksXG4gICAgICBzdGF0ZShcIipcIiwgc3R5bGUoe3RyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDApXCJ9KSksXG4gICAgICB0cmFuc2l0aW9uKFwidm9pZCA8PT4gKlwiLCBhbmltYXRlKFwiMjAwbXMgZWFzZS1pbi1vdXRcIikpXG4gICAgXSksXG4gICAgdHJpZ2dlcihcInNob3dIaWRlSW52b2ljZUFkZHJlc3NcIiwgW1xuICAgICAgc3RhdGUoXCJ2b2lkXCIsIHN0eWxlKHtoZWlnaHQ6IDAsIG9wYWNpdHk6IDB9KSksXG4gICAgICBzdGF0ZShcIipcIiwgc3R5bGUoe2hlaWdodDogXCIqXCIsIG9wYWNpdHk6IDF9KSksXG4gICAgICB0cmFuc2l0aW9uKFwidm9pZCA9PiAqXCIsIGFuaW1hdGUoXCIyMDBtcyBlYXNlLWluLW91dFwiKSksXG4gICAgICB0cmFuc2l0aW9uKFwiKiA9PiB2b2lkXCIsIGFuaW1hdGUoXCIyMDBtcyBlYXNlLW91dFwiKSlcbiAgICBdKVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0T3ZlcnZpZXdSZWxhdGlvbkVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uID0gSWNvbjtcbiAgcHVibGljIHJlYWRvbmx5IGFkZHJlc3NUeXBlOiB0eXBlb2YgQWRkcmVzc1R5cGUgPSBBZGRyZXNzVHlwZTtcblxuICAvLyBAVmlld0NoaWxkKEZvcm1Db21wb25lbnQsIHtzdGF0aWM6IHRydWV9KVxuICAvLyBwdWJsaWMgcmVsYXRpb25Gb3JtOiBGb3JtQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgcmVsYXRpb24odmFsdWU6IFJlbGF0aW9uQW55VHlwZSkge1xuICAgIHRoaXMuX3JlbGF0aW9uID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uKSB7XG4gICAgICB0aGlzLmFkZHJlc3MgPSB0aGlzLl9yZWxhdGlvbi5nZXRGaXJzdEFkZHJlc3NPckNyZWF0ZU5ldygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVsYXRpb24oKTogUmVsYXRpb25BbnlUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcmVsYXRpb247XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRlbGl2ZXJ5QWRkcmVzc05hd05yKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5yZWxhdGlvbiAmJiB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlcykge1xuICAgICAgdGhpcy5kZWxpdmVyeUFkZHJlc3NJZHggPSB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlcy5maW5kSW5kZXgoYSA9PiBhLm5hd05yID09PSB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnZvaWNlQWRkcmVzc05hd05yKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5yZWxhdGlvbiAmJiB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlcykge1xuICAgICAgdGhpcy5pbnZvaWNlQWRkcmVzc0lkeCA9IHRoaXMucmVsYXRpb24uYWRkcmVzc2VzLmZpbmRJbmRleChhID0+IGEubmF3TnIgPT09IHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIHZhbGlkU3VibWl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbnZhbGlkU3VibWl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBkZWxpdmVyeUFkZHJlc3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbnZvaWNlQWRkcmVzc0NoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlbGF0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVsYXRpb25BbnlUeXBlPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVsYXRpb25BbnlUeXBlPigpO1xuXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNvLWNoZWNrb3V0LW92ZXJ2aWV3LXJlbGF0aW9uLWVkaXRcIilcbiAgcHVibGljIHNob3dDbGFzcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHB1YmxpYyBmb3JtUmVsYXRpb246IEZvcm1Hcm91cDtcblxuICAvLyBwdWJsaWMgYWNjb3VudFBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICAvLyBwdWJsaWMgaGlkZTogYm9vbGVhbiA9IHRydWU7XG4gIC8vIHB1YmxpYyBnZW5kZXI6IEdlbmRlclR5cGUgPSBHZW5kZXJUeXBlLlVuc3BlY2lmaWVkO1xuICAvLyBwdWJsaWMgcHJpdmFjeVNldHRpbmdzOiBSZWxhdGlvblByaXZhY3lTZXR0aW5nW107XG5cbiAgLy8gcHVibGljIGFkZHJlc3NlczogQWRkcmVzc1tdID0gW107XG4gIHByaXZhdGUgX3JlbGF0aW9uOiBSZWxhdGlvbkFueVR5cGUgPSBOVUxMX1JFTEFUSU9OX09CSkVDVDtcblxuICBwdWJsaWMgYWRkcmVzczogQWRkcmVzcztcbiAgcHVibGljIHNlbGVjdGVkQWRkcmVzczogQWRkcmVzcztcbiAgcHVibGljIGRlbGl2ZXJ5QWRkcmVzczogQWRkcmVzcztcbiAgcHVibGljIGludm9pY2VBZGRyZXNzOiBBZGRyZXNzO1xuICBwdWJsaWMgZGVsaXZlcnlBZGRyZXNzSWR4OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgaW52b2ljZUFkZHJlc3NJZHg6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBlZGl0QWRkcmVzc1R5cGU6IEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzO1xuICAvLyBwdWJsaWMgYWRkcmVzc1RvRWRpdDogQWRkcmVzcztcbiAgLy8gcHVibGljIHNob3dTZWxlY3RBZGRyZXNzRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIHB1YmxpYyBzaG93Q3JlYXRlQWRkcmVzc0RpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIHB1YmxpYyByZWFkb25seSByZWxUeXBlOiB0eXBlb2YgUmVsYXRpb25OYW1lS2luZCA9IFJlbGF0aW9uTmFtZUtpbmQ7XG4gIC8vIHB1YmxpYyByZWFkb25seSBnZW5kZXJUeXBlOiB0eXBlb2YgR2VuZGVyVHlwZSA9IEdlbmRlclR5cGU7XG5cbiAgLy8gcHVibGljIGdldCBlZGl0Rmlyc3RBZGRyZXNzKCk6IEFkZHJlc3Mge1xuICAvLyAgIGNvbnN0IGZpcnN0QWRkcmVzczogQWRkcmVzcyA9IHRoaXMuc2VydmljZS5nZXRGaXJzdEFkZHJlc3ModGhpcy5yZWxhdGlvbik7XG4gIC8vICAgaWYgKGZpcnN0QWRkcmVzcykge1xuICAvLyAgICAgcmV0dXJuIGZpcnN0QWRkcmVzcztcbiAgLy8gICB9IGVsc2UgaWYgKHRoaXMuX3JlbGF0aW9uKSB7XG4gIC8vICAgICBjb25zdCBhZGRyZXNzOiBBZGRyZXNzID0gbmV3IEFkZHJlc3MoKTtcbiAgLy8gICAgIGFkZHJlc3MuYWRkcmVzc1R5cGUgPSBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3M7XG4gIC8vICAgICBhZGRyZXNzLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIC8vICAgICBhZGRyZXNzLnNlcXVlbmNlID0gdGhpcy5fcmVsYXRpb24uZ2V0TmV4dEFkZHJlc3NTZXF1ZW5jZSgpO1xuICAvLyAgICAgdGhpcy5fcmVsYXRpb24uYWRkcmVzc2VzLnB1c2goYWRkcmVzcyk7XG4gIC8vICAgICByZXR1cm4gYWRkcmVzcztcbiAgLy8gICB9XG4gIC8vIH1cblxuICBwdWJsaWMgZ2V0IGFwcGxpY2F0aW9uVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmFwcGxpY2F0aW9uVXNlcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2Zvcm1NYXN0ZXI6IEZvcm1NYXN0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5LFxuICAgIHB1YmxpYyBzZXJ2aWNlOiBUcmFuc2FjdGlvblNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcmVsYXRpb24pIHtcbiAgICAgIHRoaXMuYWRkcmVzcyA9IHRoaXMuX3JlbGF0aW9uLmdldEZpcnN0QWRkcmVzc09yQ3JlYXRlTmV3KCk7XG4gICAgfVxuICAgIC8vIHRoaXMuX2luaXRGb3JtKCk7XG4gICAgLy8gdGhpcy5fcmVsYXRpb24udHlwZSA9IHRoaXMucmVsVHlwZS5Qcml2YXRlO1xuICAgIC8vIHRoaXMuX3JlbGF0aW9uLmdlbmRlciA9IHRoaXMuZ2VuZGVyO1xuICAgIC8vIGF3YWl0IHRoaXMubG9hZFByaXZhY3lTZXR0aW5ncygpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlbGF0aW9uKHJlbDogUmVsYXRpb25BbnlUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fcmVsYXRpb24gPSByZWw7XG4gICAgdGhpcy5yZWxhdGlvbkNoYW5nZS5lbWl0KHRoaXMuX3JlbGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXQoKTogYm9vbGVhbiB7XG4gICAgLy8gcmV0dXJuIHRoaXMucmVsYXRpb25Gb3JtLnN1Ym1pdCgpO1xuICAgIHJldHVybiB0aGlzLl9mb3JtTWFzdGVyLnN1Ym1pdFNsYXZlcygpO1xuICB9XG5cbiAgLy8gcHVibGljIHNob3dOZXdBZGRyZXNzRGlhbG9nKGRlbGl2ZXJ5QWRkcmVzczogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgLy8gICB0aGlzLmVkaXRBZGRyZXNzVHlwZSA9IGRlbGl2ZXJ5QWRkcmVzcyA/IEFkZHJlc3NUeXBlLkRlbGl2ZXJ5QWRkcmVzcyA6IEFkZHJlc3NUeXBlLkJpbGxpbmdBZGRyZXNzO1xuICAvLyAgIHRoaXMuc2hvd0NyZWF0ZUFkZHJlc3NEaWFsb2cgPSB0cnVlO1xuICAvLyB9XG5cbiAgLy8gcHVibGljIHNob3dFZGl0QWRkcmVzc0RpYWxvZyhkZWxpdmVyeUFkZHJlc3M6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gIC8vICAgdGhpcy5lZGl0QWRkcmVzc1R5cGUgPSBkZWxpdmVyeUFkZHJlc3MgPyBBZGRyZXNzVHlwZS5EZWxpdmVyeUFkZHJlc3MgOiBBZGRyZXNzVHlwZS5CaWxsaW5nQWRkcmVzcztcbiAgLy8gICB0aGlzLnNob3dTZWxlY3RBZGRyZXNzRGlhbG9nID0gdHJ1ZTtcbiAgLy8gfVxuXG4gIHB1YmxpYyBzZXRJbmRleERlbGl2ZXJ5QWRkcmVzcyhpZHg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzSWR4ID0gaWR4O1xuICAgIHRoaXMuZWRpdEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzO1xuICB9XG5cbiAgcHVibGljIHNldEluZGV4SW52b2ljZUFkZHJlc3MoaWR4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmludm9pY2VBZGRyZXNzSWR4ID0gaWR4O1xuICAgIHRoaXMuZWRpdEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuQmlsbGluZ0FkZHJlc3M7XG4gICAgLy8gdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMucmVsYXRpb24uYWRkcmVzc2VzW2lkeF0pO1xuICB9XG5cbiAgLy8gcHVibGljIGVkaXRBZGRyZXNzKGFkZHI6IEFkZHJlc3MpOiB2b2lkIHtcbiAgLy8gICB0aGlzLmFkZHJlc3NUb0VkaXQgPSA8QWRkcmVzcz48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBZGRyZXNzLCBhZGRyKTtcbiAgLy8gICB0aGlzLnNob3dFZGl0QWRkcmVzc0RpYWxvZygpXG4gIC8vIH1cblxuICBwdWJsaWMgY2hlY2tTYW1lQWRkcmVzcyhjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIHRoaXMuZWRpdEFkZHJlc3NUeXBlID0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzO1xuICAgICAgLy8gdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMuZGVsaXZlcnlBZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBwdWJsaWMgc2F2ZU5ld0FkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAvLyAgIGFkZHJlc3MuYWRkcmVzc1R5cGUgPSB0aGlzLmVkaXRBZGRyZXNzVHlwZTtcbiAgLy8gICB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAvLyAgIHRoaXMuc2VsZWN0QWRkcmVzcyhhZGRyZXNzKTtcbiAgLy8gICB0aGlzLnNob3dDcmVhdGVBZGRyZXNzRGlhbG9nID0gZmFsc2U7XG4gIC8vIH1cblxuICAvLyBwdWJsaWMgc2F2ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAvLyAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy5yZWxhdGlvbi5hZGRyZXNzZXMuZmluZEluZGV4KGEgPT4gYS5uYXdOciA9PT0gYWRkcmVzcy5uYXdOcik7XG4gIC8vICAgaWYgKGlkeCA+IC0xKSB7XG4gIC8vICAgICB0aGlzLnJlbGF0aW9uLmFkZHJlc3Nlc1tpZHhdID0gPEFkZHJlc3M+PHVua25vd24+dGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQWRkcmVzcywgYWRkcmVzcyk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuc2hvd1NlbGVjdEFkZHJlc3NEaWFsb2cgPSBmYWxzZTtcbiAgLy8gfVxuXG4gIC8vIHB1YmxpYyBzZWxlY3RBZGRyZXNzKGFkZHJlc3M/OiBBZGRyZXNzKTogdm9pZCB7XG4gIC8vICAgLy8gaWYgKCF0aGlzLmRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QpIHtcbiAgLy8gICAvLyAgIHJldHVybjtcbiAgLy8gICAvLyB9XG4gIC8vICAgLy8gaWYgKCFhZGRyZXNzKSB7XG4gIC8vICAgLy8gICBhZGRyZXNzID0gdGhpcy5zZXJ2aWNlLmdldEZpcnN0QWRkcmVzcyh0aGlzLnJlbGF0aW9uKTtcbiAgLy8gICAvLyB9XG4gIC8vICAgLy8gaWYgKCFhZGRyZXNzKSB7XG4gIC8vICAgLy8gICByZXR1cm47XG4gIC8vICAgLy8gfVxuICAvLyAgIC8vIHRoaXMuX3NldENvdW50cnlOYW1lVG9BZGRyZXNzKGFkZHJlc3MpO1xuICAvLyAgIC8vIGlmICh0aGlzLmVkaXRBZGRyZXNzVHlwZSA9PT0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzKSB7XG4gIC8vICAgLy8gICB0aGlzLmRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QudHJhbnNhY3Rpb25BZGRyZXNzID0gYWRkcmVzcy5uYXdOcjtcbiAgLy8gICAvLyAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzID0gYWRkcmVzcztcbiAgLy8gICAvLyAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzSWR4ID0gdGhpcy5yZWxhdGlvbi5hZGRyZXNzZXMuZmluZEluZGV4KGEgPT4gYS5uYXdOciA9PT0gdGhpcy5kZWxpdmVyeUFkZHJlc3MubmF3TnIpO1xuICAvLyAgIC8vIH1cbiAgLy8gICAvLyBpZiAodGhpcy5pbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5QWRkcmVzcyB8fCB0aGlzLmVkaXRBZGRyZXNzVHlwZSAhPT0gQWRkcmVzc1R5cGUuRGVsaXZlcnlBZGRyZXNzKSB7XG4gIC8vICAgLy8gICB0aGlzLmRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QuaW52b2ljZUFkZHJlc3MgPSBhZGRyZXNzLm5hd05yO1xuICAvLyAgIC8vICAgdGhpcy5pbnZvaWNlQWRkcmVzcyA9IGFkZHJlc3M7XG4gIC8vICAgLy8gICB0aGlzLmludm9pY2VBZGRyZXNzSWR4ID0gdGhpcy5yZWxhdGlvbi5hZGRyZXNzZXMuZmluZEluZGV4KGEgPT4gYS5uYXdOciA9PT0gdGhpcy5pbnZvaWNlQWRkcmVzcy5uYXdOcik7XG4gIC8vICAgLy8gfVxuICAvLyAgIHRoaXMuc2hvd1NlbGVjdEFkZHJlc3NEaWFsb2cgPSBmYWxzZTtcbiAgLy8gfVxuXG4gIC8vIHB1YmxpYyBhc3luYyBsb2FkUHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAvLyAgIHRoaXMucHJpdmFjeVNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk7XG4gIC8vIH1cblxuICAvLyBwdWJsaWMgYXN5bmMgbG9hZE1hcmtldGluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0TWFya2V0aW5nQ29kZXMoKTtcbiAgLy8gfVxuXG4gIC8vIHB1YmxpYyBpc1NoYXJlZChyZWxhdGlvblByaXZhY3lTZXR0aW5nOiBSZWxhdGlvblByaXZhY3lTZXR0aW5nKTogYm9vbGVhbiB7XG4gIC8vICAgY29uc3Qgb3duU2V0dGluZzogUmVsYXRpb25Qcml2YWN5U2V0dGluZyA9IEJ1c2luZXNzT2JqZWN0VXRpbHMuRmluZEl0ZW1CeUlkKHRoaXMucmVsYXRpb25Bc0N1c3RvbWVyLnJlbGF0aW9uUHJpdmFjeVNldHRpbmdzLCByZWxhdGlvblByaXZhY3lTZXR0aW5nLmdldElkKCkpO1xuICAvLyAgIGlmIChvd25TZXR0aW5nKSB7XG4gIC8vICAgICByZXR1cm4gb3duU2V0dGluZy5hbGxvd1RvU2hhcmU7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBmYWxzZTtcbiAgLy8gfVxuXG4gIC8vIHB1YmxpYyBjaGFuZ2VSZWxhdGlvblR5cGUodmFsdWU6IFJlbGF0aW9uTmFtZUtpbmQpOiB2b2lkIHtcbiAgLy8gICB0aGlzLnJlbGF0aW9uLnR5cGUgPSB2YWx1ZTtcbiAgLy8gfVxuXG4gIC8vIHB1YmxpYyBjaGFuZ2VQcml2YWN5U2V0dGluZyhyZWxhdGlvblByaXZhY3lTZXR0aW5nOiBSZWxhdGlvblByaXZhY3lTZXR0aW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAvLyAgIGNvbnN0IG93blNldHRpbmc6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcgPSBCdXNpbmVzc09iamVjdFV0aWxzLkZpbmRJdGVtQnlJZCh0aGlzLnJlbGF0aW9uQXNDdXN0b21lci5yZWxhdGlvblByaXZhY3lTZXR0aW5ncywgcmVsYXRpb25Qcml2YWN5U2V0dGluZy5nZXRJZCgpKTtcbiAgLy8gICBpZiAob3duU2V0dGluZykge1xuICAvLyAgICAgb3duU2V0dGluZy5hbGxvd1RvU2hhcmUgPSB2YWx1ZTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5yZWxhdGlvbkFzQ3VzdG9tZXIucmVsYXRpb25Qcml2YWN5U2V0dGluZ3MucHVzaChyZWxhdGlvblByaXZhY3lTZXR0aW5nKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBwcml2YXRlIF9pbml0Rm9ybSgpOiB2b2lkIHtcbiAgLy8gICBpZiAodGhpcy5yZWxhdGlvbkZvcm0pIHtcbiAgLy8gICAgIHRoaXMuZm9ybVJlbGF0aW9uID0gdGhpcy5yZWxhdGlvbkZvcm0uZm9ybUdyb3VwO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIHByaXZhdGUgYXN5bmMgX3NldENvdW50cnlOYW1lVG9BZGRyZXNzKGFkZHJlc3M6IEFkZHJlc3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoYWRkcmVzcy5jb3VudHJ5SWQgJiYgIWFkZHJlc3MuY291bnRyeU5hbWUpIHtcbiAgICAgIGNvbnN0IGNvdW50cnk6IENvdW50cnkgPSBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0Q291bnRyeShhZGRyZXNzLmNvdW50cnlJZCk7XG4gICAgICBhZGRyZXNzLmNvdW50cnlOYW1lID0gY291bnRyeS5kZXNjcmlwdGlvbjtcbiAgICB9XG4gIH1cblxufVxuIl19