@devx-commerce/plugin-gati 0.0.34-beta.5 → 0.0.34-beta.51

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 (302) hide show
  1. package/.medusa/server/src/admin/index.js +3 -1
  2. package/.medusa/server/src/admin/index.mjs +3 -1
  3. package/.medusa/server/src/api/admin/masters/validators.js +2 -2
  4. package/.medusa/server/src/api/admin/variant-options/recalculate/route.js +446 -0
  5. package/.medusa/server/src/api/admin/variant-options/sync/route.js +21 -5
  6. package/.medusa/server/src/api/erp/webhook/config.js +36 -1
  7. package/.medusa/server/src/api/erp/webhook/route.js +10 -137
  8. package/.medusa/server/src/api/erp/webhook/utils.js +8 -1
  9. package/.medusa/server/src/api/pos/customer-ledger/middleware.js +13 -0
  10. package/.medusa/server/src/api/pos/customer-ledger/route.js +50 -0
  11. package/.medusa/server/src/api/pos/generate-invoice/route.js +427 -0
  12. package/.medusa/server/src/api/pos/gold/calculate/route.js +104 -0
  13. package/.medusa/server/src/api/pos/gold/item-master-purity.js +46 -0
  14. package/.medusa/server/src/api/pos/gold/middleware.js +18 -0
  15. package/.medusa/server/src/api/pos/gold/route.js +83 -0
  16. package/.medusa/server/src/api/pos/gold-rate/route.js +37 -24
  17. package/.medusa/server/src/api/pos/middleware.js +13 -1
  18. package/.medusa/server/src/api/pos/old-gold-item/middleware.js +10 -0
  19. package/.medusa/server/src/api/pos/old-gold-item/route.js +52 -0
  20. package/.medusa/server/src/api/pos/platinumdata/middleware.js +13 -0
  21. package/.medusa/server/src/api/pos/platinumdata/route.js +41 -0
  22. package/.medusa/server/src/api/pos/silverdata/middleware.js +13 -0
  23. package/.medusa/server/src/api/pos/silverdata/route.js +41 -0
  24. package/.medusa/server/src/api/pos/wallet-balance/middleware.js +13 -0
  25. package/.medusa/server/src/api/pos/wallet-balance/route.js +68 -0
  26. package/.medusa/server/src/api/store/custom-price/validators.js +2 -2
  27. package/.medusa/server/src/api/store/customer-ledger/middleware.js +13 -0
  28. package/.medusa/server/src/api/store/customer-ledger/route.js +49 -0
  29. package/.medusa/server/src/api/store/gold-rate/validators.js +2 -2
  30. package/.medusa/server/src/api/store/middleware.js +5 -1
  31. package/.medusa/server/src/api/store/wallet-balance/middleware.js +13 -0
  32. package/.medusa/server/src/api/store/wallet-balance/route.js +67 -0
  33. package/.medusa/server/src/jobs/process-erp-events.js +205 -0
  34. package/.medusa/server/src/jobs/process-variant-option-sync.js +43 -28
  35. package/.medusa/server/src/jobs/sync-addless-detail.js +60 -0
  36. package/.medusa/server/src/jobs/sync-book-list-and-applicable-policy.js +89 -0
  37. package/.medusa/server/src/jobs/sync-item-master.js +20 -0
  38. package/.medusa/server/src/jobs/sync-labour-chart-master.js +20 -0
  39. package/.medusa/server/src/jobs/sync-payment-book-master.js +63 -0
  40. package/.medusa/server/src/jobs/sync-rate-chart-master.js +20 -0
  41. package/.medusa/server/src/jobs/sync-report-master.js +46 -0
  42. package/.medusa/server/src/jobs/sync-sale-return-policy-master.js +29 -0
  43. package/.medusa/server/src/lib/api-response.js +2 -1
  44. package/.medusa/server/src/links/jewel-trans-master.js +13 -0
  45. package/.medusa/server/src/links/order-master.js +13 -0
  46. package/.medusa/server/src/links/sale-master.js +13 -0
  47. package/.medusa/server/src/modules/addless-detail/index.js +13 -0
  48. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260212101102.js +15 -0
  49. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260213000000.js +47 -0
  50. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260226053037.js +15 -0
  51. package/.medusa/server/src/modules/addless-detail/models/addless-master.js +17 -0
  52. package/.medusa/server/src/modules/addless-detail/service.js +10 -0
  53. package/.medusa/server/src/modules/applicable-sale-return-policy/index.js +13 -0
  54. package/.medusa/server/src/modules/applicable-sale-return-policy/migrations/Migration20260123083526.js +15 -0
  55. package/.medusa/server/src/modules/applicable-sale-return-policy/models/applicable-sale-return-policy.js +23 -0
  56. package/.medusa/server/src/modules/applicable-sale-return-policy/service.js +10 -0
  57. package/.medusa/server/src/modules/book-list/index.js +13 -0
  58. package/.medusa/server/src/modules/book-list/migrations/Migration20260123083525.js +15 -0
  59. package/.medusa/server/src/modules/book-list/models/book-list.js +12 -0
  60. package/.medusa/server/src/modules/book-list/service.js +10 -0
  61. package/.medusa/server/src/modules/category-group-master/migrations/Migration20250729035221.js +2 -2
  62. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +2 -2
  63. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +2 -2
  64. package/.medusa/server/src/modules/category-master/migrations/Migration20250513122212.js +2 -2
  65. package/.medusa/server/src/modules/category-master/migrations/Migration20250519180539.js +2 -2
  66. package/.medusa/server/src/modules/category-master/migrations/Migration20250531004724.js +2 -2
  67. package/.medusa/server/src/modules/category-master/migrations/Migration20250729040659.js +2 -2
  68. package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +2 -2
  69. package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +2 -2
  70. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20250531022203.js +2 -2
  71. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +2 -2
  72. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +2 -2
  73. package/.medusa/server/src/modules/collection-master/migrations/Migration20250513122211.js +2 -2
  74. package/.medusa/server/src/modules/collection-master/migrations/Migration20250531025048.js +2 -2
  75. package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +2 -2
  76. package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +2 -2
  77. package/.medusa/server/src/modules/customer-receive-voucher/index.js +13 -0
  78. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20250115000000.js +51 -0
  79. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20260106050934.js +18 -0
  80. package/.medusa/server/src/modules/customer-receive-voucher/models/customer-receive-voucher.js +35 -0
  81. package/.medusa/server/src/modules/customer-receive-voucher/service.js +10 -0
  82. package/.medusa/server/src/modules/discount-master/migrations/Migration20250707232514.js +2 -2
  83. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051709.js +2 -2
  84. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051737.js +2 -2
  85. package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +2 -2
  86. package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +2 -2
  87. package/.medusa/server/src/modules/erp/migrations/Migration20250513121436.js +2 -2
  88. package/.medusa/server/src/modules/erp/service.js +545 -8
  89. package/.medusa/server/src/modules/erp-event/migrations/Migration20250908040911.js +2 -2
  90. package/.medusa/server/src/modules/erp-event/migrations/Migration20250922095956.js +2 -2
  91. package/.medusa/server/src/modules/extended-product/migrations/Migration20250620030100.js +2 -2
  92. package/.medusa/server/src/modules/extended-product/migrations/Migration20250716041546.js +2 -2
  93. package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +2 -2
  94. package/.medusa/server/src/modules/extended-product/migrations/Migration20251119062526.js +2 -2
  95. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202055742.js +2 -2
  96. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202064200.js +2 -2
  97. package/.medusa/server/src/modules/extended-product/migrations/Migration20260323103543.js +14 -0
  98. package/.medusa/server/src/modules/extended-product/models/extended-product.js +2 -1
  99. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030335.js +2 -2
  100. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030522.js +2 -2
  101. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629220100.js +2 -2
  102. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629223425.js +2 -2
  103. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250704064831.js +2 -2
  104. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250716121609.js +2 -2
  105. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250725104852.js +2 -2
  106. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250726232339.js +2 -2
  107. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250916065103.js +2 -2
  108. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251119063328.js +2 -2
  109. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120045708.js +2 -2
  110. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120051832.js +2 -2
  111. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120052514.js +2 -2
  112. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251202055952.js +2 -2
  113. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251210112341.js +18 -0
  114. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +2 -2
  115. package/.medusa/server/src/modules/item-master/index.js +13 -0
  116. package/.medusa/server/src/modules/item-master/migrations/Migration20260212101055.js +15 -0
  117. package/.medusa/server/src/modules/item-master/models/item-master.js +20 -0
  118. package/.medusa/server/src/modules/item-master/service.js +10 -0
  119. package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +2 -2
  120. package/.medusa/server/src/modules/jewel-trans-master/index.js +13 -0
  121. package/.medusa/server/src/modules/jewel-trans-master/migrations/Migration20260226053036.js +57 -0
  122. package/.medusa/server/src/modules/jewel-trans-master/models/jewel-trans-master.js +151 -0
  123. package/.medusa/server/src/modules/jewel-trans-master/service.js +16 -0
  124. package/.medusa/server/src/modules/labour-chart-master/index.js +13 -0
  125. package/.medusa/server/src/modules/labour-chart-master/migrations/Migration20260101081502.js +15 -0
  126. package/.medusa/server/src/modules/labour-chart-master/models/labour-chart-master.js +16 -0
  127. package/.medusa/server/src/modules/labour-chart-master/service.js +10 -0
  128. package/.medusa/server/src/modules/material-purchase-master/index.js +13 -0
  129. package/.medusa/server/src/modules/material-purchase-master/migrations/Migration20260310090700.js +18 -0
  130. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-detail-line.js +24 -0
  131. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-master.js +21 -0
  132. package/.medusa/server/src/modules/material-purchase-master/service.js +12 -0
  133. package/.medusa/server/src/modules/order-master/index.js +13 -0
  134. package/.medusa/server/src/modules/order-master/migrations/Migration20260226053036.js +29 -0
  135. package/.medusa/server/src/modules/order-master/migrations/Migration20260303000001.js +30 -0
  136. package/.medusa/server/src/modules/order-master/migrations/Migration20260319094758.js +26 -0
  137. package/.medusa/server/src/modules/order-master/migrations/Migration20260320000001.js +19 -0
  138. package/.medusa/server/src/modules/order-master/models/order-master.js +112 -0
  139. package/.medusa/server/src/modules/order-master/service.js +13 -0
  140. package/.medusa/server/src/modules/party-master/migrations/Migration20250604104235.js +2 -2
  141. package/.medusa/server/src/modules/party-master/migrations/Migration20250604115453.js +2 -2
  142. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120348.js +2 -2
  143. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120701.js +2 -2
  144. package/.medusa/server/src/modules/party-master/migrations/Migration20250608220924.js +2 -2
  145. package/.medusa/server/src/modules/party-master/migrations/Migration20250612225738.js +2 -2
  146. package/.medusa/server/src/modules/party-master/migrations/Migration20250612231031.js +2 -2
  147. package/.medusa/server/src/modules/party-master/migrations/Migration20250708123734.js +2 -2
  148. package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +2 -2
  149. package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +2 -2
  150. package/.medusa/server/src/modules/payment-book-master/index.js +13 -0
  151. package/.medusa/server/src/modules/payment-book-master/migrations/Migration20251203105358.js +15 -0
  152. package/.medusa/server/src/modules/payment-book-master/models/payment-book-master.js +12 -0
  153. package/.medusa/server/src/modules/payment-book-master/service.js +10 -0
  154. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250819123821.js +2 -2
  155. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250918095713.js +2 -2
  156. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +2 -2
  157. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +2 -2
  158. package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +2 -2
  159. package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +2 -2
  160. package/.medusa/server/src/modules/rate-chart-master/index.js +13 -0
  161. package/.medusa/server/src/modules/rate-chart-master/migrations/Migration20260101081500.js +15 -0
  162. package/.medusa/server/src/modules/rate-chart-master/models/rate-chart-master.js +13 -0
  163. package/.medusa/server/src/modules/rate-chart-master/service.js +10 -0
  164. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190057.js +2 -2
  165. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190322.js +2 -2
  166. package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +2 -2
  167. package/.medusa/server/src/modules/report-master/index.js +13 -0
  168. package/.medusa/server/src/modules/report-master/migrations/Migration20260121060955.js +15 -0
  169. package/.medusa/server/src/modules/report-master/migrations/Migration20260121112624.js +15 -0
  170. package/.medusa/server/src/modules/report-master/models/report-master.js +12 -0
  171. package/.medusa/server/src/modules/report-master/service.js +10 -0
  172. package/.medusa/server/src/modules/sale-master/index.js +13 -0
  173. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205092935.js +15 -0
  174. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205100000.js +16 -0
  175. package/.medusa/server/src/modules/sale-master/models/sale-master.js +27 -0
  176. package/.medusa/server/src/modules/sale-master/service.js +10 -0
  177. package/.medusa/server/src/modules/sale-return-master/index.js +13 -0
  178. package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260205093034.js +15 -0
  179. package/.medusa/server/src/modules/sale-return-master/models/sale-return-master.js +16 -0
  180. package/.medusa/server/src/modules/sale-return-master/service.js +10 -0
  181. package/.medusa/server/src/modules/sale-return-policy-master/index.js +13 -0
  182. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260105061449.js +21 -0
  183. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129084920.js +14 -0
  184. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129085620.js +20 -0
  185. package/.medusa/server/src/modules/sale-return-policy-master/models/sale-return-policy-master.js +37 -0
  186. package/.medusa/server/src/modules/sale-return-policy-master/service.js +12 -0
  187. package/.medusa/server/src/modules/shape-master/migrations/Migration20250509174455.js +2 -2
  188. package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +2 -2
  189. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713113247.js +2 -2
  190. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713121440.js +2 -2
  191. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +2 -2
  192. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +2 -2
  193. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251203083315.js +2 -2
  194. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250513115356.js +2 -2
  195. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250519180538.js +2 -2
  196. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250531010409.js +2 -2
  197. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025135.js +2 -2
  198. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025307.js +2 -2
  199. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730032130.js +2 -2
  200. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +2 -2
  201. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +2 -2
  202. package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +2 -2
  203. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +2 -2
  204. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +2 -2
  205. package/.medusa/server/src/subscribers/cutomer-updated.js +3 -1
  206. package/.medusa/server/src/subscribers/order-item-update.js +11 -0
  207. package/.medusa/server/src/subscribers/party-master.js +36 -35
  208. package/.medusa/server/src/subscribers/shipping-info-master.js +3 -3
  209. package/.medusa/server/src/utils/build-redis-key.js +3 -1
  210. package/.medusa/server/src/utils/state-helper.js +3 -2
  211. package/.medusa/server/src/workflows/addless-detail/index.js +11 -0
  212. package/.medusa/server/src/workflows/addless-detail/steps/create-or-update-addless-detail.js +36 -0
  213. package/.medusa/server/src/workflows/addless-detail/steps/fetch-addless-detail.js +73 -0
  214. package/.medusa/server/src/workflows/applicable-sale-return-policy/index.js +11 -0
  215. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/create-or-update-applicable-sale-return-policy.js +74 -0
  216. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/fetch-applicable-sale-return-policy.js +64 -0
  217. package/.medusa/server/src/workflows/book-list/index.js +11 -0
  218. package/.medusa/server/src/workflows/book-list/steps/create-or-update-book-list.js +55 -0
  219. package/.medusa/server/src/workflows/book-list/steps/fetch-book-list.js +64 -0
  220. package/.medusa/server/src/workflows/customer-advance-payment/index.js +18 -0
  221. package/.medusa/server/src/workflows/customer-advance-payment/steps/create-receive-voucher.js +71 -0
  222. package/.medusa/server/src/workflows/customer-advance-payment/steps/index.js +18 -0
  223. package/.medusa/server/src/workflows/customer-advance-payment/workflows/create-receive-voucher-workflow.js +11 -0
  224. package/.medusa/server/src/workflows/customer-advance-payment/workflows/index.js +18 -0
  225. package/.medusa/server/src/workflows/helpers/product-helper.js +215 -18
  226. package/.medusa/server/src/workflows/helpers/variant-helper.js +165 -162
  227. package/.medusa/server/src/workflows/hooks/product-updated.js +6 -11
  228. package/.medusa/server/src/workflows/index.js +3 -1
  229. package/.medusa/server/src/workflows/inward-master/helper/index.js +5 -1
  230. package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +6 -3
  231. package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +6 -2
  232. package/.medusa/server/src/workflows/item-master/index.js +11 -0
  233. package/.medusa/server/src/workflows/item-master/steps/create-or-update-item-master.js +50 -0
  234. package/.medusa/server/src/workflows/item-master/steps/fetch-item-master.js +29 -0
  235. package/.medusa/server/src/workflows/jewel-trans-master/index.js +18 -0
  236. package/.medusa/server/src/workflows/jewel-trans-master/steps/create-or-update-jewel-trans-master.js +370 -0
  237. package/.medusa/server/src/workflows/jewel-trans-master/steps/index.js +18 -0
  238. package/.medusa/server/src/workflows/labour-chart-master/index.js +11 -0
  239. package/.medusa/server/src/workflows/labour-chart-master/steps/create-or-update-labour-chart-master.js +38 -0
  240. package/.medusa/server/src/workflows/labour-chart-master/steps/fetch-labour-chart.js +31 -0
  241. package/.medusa/server/src/workflows/material-purchase-master/index.js +24 -0
  242. package/.medusa/server/src/workflows/material-purchase-master/steps/create-material-purchase-master.js +79 -0
  243. package/.medusa/server/src/workflows/material-purchase-master/steps/delete-material-purchase-master.js +81 -0
  244. package/.medusa/server/src/workflows/material-purchase-master/steps/fetch-material-purchase-master.js +60 -0
  245. package/.medusa/server/src/workflows/material-purchase-master/steps/update-material-purchase-master.js +100 -0
  246. package/.medusa/server/src/workflows/order-master/index.js +3 -0
  247. package/.medusa/server/src/workflows/order-master/order-master-webhook.js +24 -0
  248. package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +275 -0
  249. package/.medusa/server/src/workflows/order-master/steps/delete-order-master-by-erp-ids.js +61 -0
  250. package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js +917 -0
  251. package/.medusa/server/src/workflows/orders/steps/find-nearest-pincodes-step.js +336 -0
  252. package/.medusa/server/src/workflows/orders/steps/get-today-gold-rate-step.js +77 -0
  253. package/.medusa/server/src/workflows/orders/steps/index.js +14 -1
  254. package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +185 -0
  255. package/.medusa/server/src/workflows/orders/steps/sync-buyback-to-erp-step.js +99 -0
  256. package/.medusa/server/src/workflows/orders/steps/sync-cancel-to-erp-step.js +120 -0
  257. package/.medusa/server/src/workflows/orders/steps/sync-exchange-to-erp-step.js +101 -0
  258. package/.medusa/server/src/workflows/orders/steps/sync-old-gold-to-erp-step.js +161 -0
  259. package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +625 -18
  260. package/.medusa/server/src/workflows/orders/steps/sync-sale-return-to-erp-step.js +148 -0
  261. package/.medusa/server/src/workflows/orders/steps/update-old-gold-sync-status-step.js +64 -0
  262. package/.medusa/server/src/workflows/orders/utils/order-helper.js +161 -36
  263. package/.medusa/server/src/workflows/orders/utils/order-request-helper.js +222 -0
  264. package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
  265. package/.medusa/server/src/workflows/orders/workflows/index.js +3 -1
  266. package/.medusa/server/src/workflows/orders/workflows/sync-advanve-payment-to-erp.js +21 -0
  267. package/.medusa/server/src/workflows/orders/workflows/sync-old-gold-to-erp.js +24 -0
  268. package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +54 -5
  269. package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +53 -33
  270. package/.medusa/server/src/workflows/party-master/steps/create-user-erp.js +115 -0
  271. package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +2 -1
  272. package/.medusa/server/src/workflows/party-master/steps/index.js +2 -1
  273. package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +2 -2
  274. package/.medusa/server/src/workflows/party-master/workflows/create-user-erp.js +11 -0
  275. package/.medusa/server/src/workflows/party-master/workflows/index.js +2 -1
  276. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +16 -249
  277. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +103 -22
  278. package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +16 -10
  279. package/.medusa/server/src/workflows/payment-book-master/index.js +11 -0
  280. package/.medusa/server/src/workflows/payment-book-master/steps/create-or-update-payment-book-master.js +37 -0
  281. package/.medusa/server/src/workflows/payment-book-master/steps/fetch-payment-book.js +64 -0
  282. package/.medusa/server/src/workflows/rate-chart-master/index.js +11 -0
  283. package/.medusa/server/src/workflows/rate-chart-master/steps/create-or-update-rate-chart-master.js +25 -0
  284. package/.medusa/server/src/workflows/rate-chart-master/steps/fetch-rate-chart.js +31 -0
  285. package/.medusa/server/src/workflows/report-master/index.js +11 -0
  286. package/.medusa/server/src/workflows/report-master/steps/create-or-update-report-master.js +53 -0
  287. package/.medusa/server/src/workflows/report-master/steps/fetch-report.js +71 -0
  288. package/.medusa/server/src/workflows/sale-master/index.js +24 -0
  289. package/.medusa/server/src/workflows/sale-master/steps/create-sale-master.js +72 -0
  290. package/.medusa/server/src/workflows/sale-master/steps/delete-sale-master.js +59 -0
  291. package/.medusa/server/src/workflows/sale-master/steps/update-sale-master.js +95 -0
  292. package/.medusa/server/src/workflows/sale-return-master/index.js +24 -0
  293. package/.medusa/server/src/workflows/sale-return-master/steps/create-sale-return-master.js +45 -0
  294. package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master.js +36 -0
  295. package/.medusa/server/src/workflows/sale-return-master/steps/update-sale-return-master.js +53 -0
  296. package/.medusa/server/src/workflows/sale-return-policy-master/index.js +11 -0
  297. package/.medusa/server/src/workflows/sale-return-policy-master/steps/create-or-update-sale-return-policy-master.js +91 -0
  298. package/.medusa/server/src/workflows/sale-return-policy-master/steps/fetch-sale-return-policy.js +31 -0
  299. package/.medusa/server/src/workflows/style-master/workflows/create-or-update-style-master.js +91 -8
  300. package/.medusa/server/src/workflows/update-extended-product-from-product/index.js +6 -8
  301. package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +9 -3
  302. package/package.json +14 -32
@@ -24,11 +24,107 @@ class ErpService {
24
24
  return data.data;
25
25
  });
26
26
  }
27
- async createOrder(orderData) {
27
+ async getPaymentBook(type, isPaymentReceive, branchNo) {
28
+ const response = isPaymentReceive ? await fetch(`${this._options.baseUrl}/GetPaymentReceiveBookList`, {
29
+ method: "GET",
30
+ headers: {
31
+ AuthorizationToken: this._options.authToken,
32
+ Type: type,
33
+ BranchNo: branchNo,
34
+ },
35
+ }) : await fetch(`${this._options.baseUrl}/GetPaymentBook`, {
36
+ method: "GET",
37
+ headers: {
38
+ AuthorizationToken: this._options.authToken,
39
+ PaymentBookFor: type,
40
+ BranchNo: branchNo,
41
+ },
42
+ });
43
+ if (!response.ok) {
44
+ throw new Error(`Failed to fetch data for branch No: ${branchNo}`);
45
+ }
46
+ return response.json().then((data) => {
47
+ return { data: data.data, branchNo: branchNo, type: type };
48
+ });
49
+ }
50
+ async getListOfAddlessDetail(branchNo, bookNo) {
51
+ const response = await fetch(`${this._options.baseUrl}/ListOfAddlessDetail`, {
52
+ method: "GET",
53
+ headers: {
54
+ AuthorizationToken: this._options.authToken,
55
+ BranchNo: branchNo ?? "",
56
+ BookNo: bookNo ?? "",
57
+ },
58
+ });
59
+ if (!response.ok) {
60
+ throw new Error(`Failed to fetch ListOfAddlessDetail for branchNo: ${branchNo}, bookNo: ${bookNo}`);
61
+ }
62
+ return response.json().then((data) => {
63
+ const list = data?.data ?? data ?? [];
64
+ return {
65
+ data: Array.isArray(list) ? list : [list],
66
+ branchNo: branchNo ?? "",
67
+ bookNo: bookNo ?? "",
68
+ };
69
+ });
70
+ }
71
+ async getReportList(reportListFor, branchNo) {
72
+ // Skip empty branch numbers
73
+ if (!branchNo || branchNo.trim() === "") {
74
+ console.warn(`Skipping empty branch number for reportListFor: ${reportListFor}`);
75
+ return { data: [], branchNo: branchNo, reportListFor: reportListFor };
76
+ }
77
+ const url = `${this._options.baseUrl}/GetReportList`;
78
+ console.log(`[getReportList] Calling ERP API: ${url} with headers: AuthorizationToken, ReportListFor: ${reportListFor}, BranchNo: ${branchNo}`);
79
+ const response = await fetch(url, {
80
+ method: "GET",
81
+ headers: {
82
+ AuthorizationToken: this._options.authToken,
83
+ ReportListFor: reportListFor,
84
+ BranchNo: branchNo,
85
+ },
86
+ });
87
+ // Handle 404 errors gracefully - endpoint may not exist or branch may not be valid
88
+ if (response.status === 404) {
89
+ console.warn(`[getReportList] Endpoint not found (404) for branch No: ${branchNo}, reportListFor: ${reportListFor}. URL: ${url}. Returning empty data.`);
90
+ return { data: [], branchNo: branchNo, reportListFor: reportListFor };
91
+ }
92
+ // Read response text once to check content
93
+ const responseText = await response.text().catch(() => "");
94
+ // Check if response is HTML (error page) - treat as 404 even if status is not 404
95
+ if (responseText.trim().toLowerCase().startsWith("<!doctype html") || responseText.includes("<html")) {
96
+ console.warn(`[getReportList] Received HTML error page for branch No: ${branchNo}, reportListFor: ${reportListFor} (Status: ${response.status}). Returning empty data.`);
97
+ return { data: [], branchNo: branchNo, reportListFor: reportListFor };
98
+ }
99
+ if (!response.ok) {
100
+ const errorMessage = `Failed to fetch report list for branch No: ${branchNo}. Status: ${response.status} ${response.statusText}. Response: ${responseText.substring(0, 200)}`;
101
+ console.error(`[getReportList] ${errorMessage}`);
102
+ throw new Error(errorMessage);
103
+ }
104
+ // Try to parse as JSON
105
+ try {
106
+ const data = JSON.parse(responseText);
107
+ // Check if the API returned an error status even with 200 OK
108
+ // This typically means "not found" or "configuration missing" scenarios
109
+ if (data.status === false) {
110
+ const errorMessage = data.message || "Report list fetch failed";
111
+ console.warn(`[getReportList] Configuration not found for branch No: ${branchNo}, reportListFor: ${reportListFor}. Message: ${errorMessage}. Returning empty data.`);
112
+ // Return empty data instead of throwing, so the job can continue
113
+ return { data: [], branchNo: branchNo, reportListFor: reportListFor };
114
+ }
115
+ return { data: data.data || [], branchNo: branchNo, reportListFor: reportListFor };
116
+ }
117
+ catch (parseError) {
118
+ // If JSON parsing fails, it might be HTML or other non-JSON response
119
+ console.warn(`[getReportList] Failed to parse JSON response for branch No: ${branchNo}, reportListFor: ${reportListFor}. Returning empty data. Error: ${parseError instanceof Error ? parseError.message : String(parseError)}`);
120
+ return { data: [], branchNo: branchNo, reportListFor: reportListFor };
121
+ }
122
+ }
123
+ async createOrder(orderData, type = "WEBSITE") {
28
124
  const payload = {
29
125
  datafor: "Order",
30
126
  operation: "add",
31
- inputfrom: "WEBSITE",
127
+ inputfrom: type,
32
128
  data: orderData,
33
129
  };
34
130
  const response = await fetch(`${this._options.baseUrl}/webhook`, {
@@ -44,7 +140,127 @@ class ErpService {
44
140
  }
45
141
  return response.json().then((data) => {
46
142
  console.log("Create Order ERP Response", JSON.stringify(data, null, 2));
47
- return data.data;
143
+ // Return full response to check status
144
+ return {
145
+ status: data.status,
146
+ message: data.message,
147
+ data: data.data,
148
+ };
149
+ });
150
+ }
151
+ /**
152
+ * Sync order cancellation (OrderProceed) to ERP.
153
+ * datafor: "OrderProceed", operation: "add", inputfrom: "POS" | "WEBSITE".
154
+ */
155
+ async syncOrderProceed(proceedData, type = "WEBSITE") {
156
+ const payload = {
157
+ datafor: "OrderProceed",
158
+ operation: "add",
159
+ inputfrom: type,
160
+ data: proceedData,
161
+ };
162
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
163
+ method: "POST",
164
+ headers: {
165
+ AuthorizationToken: this._options.authToken,
166
+ "Content-Type": "application/json",
167
+ },
168
+ body: JSON.stringify(payload),
169
+ });
170
+ if (!response.ok) {
171
+ throw new Error(`Failed to sync OrderProceed (order cancel) to ERP`);
172
+ }
173
+ return response.json().then((data) => {
174
+ console.log("OrderProceed ERP Response", JSON.stringify(data, null, 2));
175
+ return {
176
+ status: data.status,
177
+ message: data.message,
178
+ data: data.data,
179
+ };
180
+ });
181
+ }
182
+ async createAdvancePayment(paymentData, type = "WEBSITE") {
183
+ const payload = {
184
+ datafor: "ReceiveVoucherAgainstOrder",
185
+ operation: "add",
186
+ inputfrom: type,
187
+ data: paymentData,
188
+ };
189
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
190
+ method: "POST",
191
+ headers: {
192
+ AuthorizationToken: this._options.authToken,
193
+ "Content-Type": "application/json",
194
+ },
195
+ body: JSON.stringify(payload),
196
+ });
197
+ if (!response.ok) {
198
+ throw new Error(`Failed to create AdvancePayment ERP Response`);
199
+ }
200
+ return response.json().then((data) => {
201
+ console.log("Create AdvancePayment ERP Response", JSON.stringify(data, null, 2));
202
+ // Return full response to check status
203
+ return {
204
+ status: data.status,
205
+ message: data.message,
206
+ data: data.data,
207
+ };
208
+ });
209
+ }
210
+ async createReceiveVoucher(paymentData, type = "WEBSITE") {
211
+ const payload = {
212
+ datafor: "ReceiveVoucher",
213
+ operation: "add",
214
+ inputfrom: type,
215
+ data: [paymentData],
216
+ };
217
+ console.log(payload);
218
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
219
+ method: "POST",
220
+ headers: {
221
+ AuthorizationToken: this._options.authToken,
222
+ "Content-Type": "application/json",
223
+ },
224
+ body: JSON.stringify(payload),
225
+ });
226
+ if (!response.ok) {
227
+ throw new Error(`Failed to create ReceiveVoucher ERP Response`);
228
+ }
229
+ return response.json().then((data) => {
230
+ console.log("Create ReceiveVoucher ERP Response", JSON.stringify(data, null, 2));
231
+ return {
232
+ status: data.status,
233
+ message: data.message,
234
+ data: data.data,
235
+ };
236
+ });
237
+ }
238
+ async deleteReceiveVoucher(voucherEntryId) {
239
+ const payload = {
240
+ datafor: "ReceiveVoucher",
241
+ operation: "delete",
242
+ data: {
243
+ VoucherEntryId: voucherEntryId,
244
+ },
245
+ };
246
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
247
+ method: "POST",
248
+ headers: {
249
+ AuthorizationToken: this._options.authToken,
250
+ "Content-Type": "application/json",
251
+ },
252
+ body: JSON.stringify(payload),
253
+ });
254
+ if (!response.ok) {
255
+ throw new Error(`Failed to delete ReceiveVoucher ERP Response`);
256
+ }
257
+ return response.json().then((data) => {
258
+ console.log("Delete ReceiveVoucher ERP Response", JSON.stringify(data, null, 2));
259
+ return {
260
+ status: data.status,
261
+ message: data.message,
262
+ data: data.data,
263
+ };
48
264
  });
49
265
  }
50
266
  async createCustomer(customerData) {
@@ -66,6 +282,10 @@ class ErpService {
66
282
  throw new Error(`Failed to create customer`);
67
283
  }
68
284
  return response.json().then((data) => {
285
+ console.log("Create Customer Response", JSON.stringify(data, null, 2));
286
+ if (data.status === false) {
287
+ return { status: false, message: data.message };
288
+ }
69
289
  return data.data;
70
290
  });
71
291
  }
@@ -85,12 +305,38 @@ class ErpService {
85
305
  body: JSON.stringify(payload),
86
306
  });
87
307
  if (!response.ok) {
88
- throw new Error(`Failed to create shipping address`);
308
+ const errorText = await response.text().catch(() => "Unknown error");
309
+ throw new Error(`Failed to create shipping address: ${response.status} ${response.statusText}. Response: ${errorText.substring(0, 200)}`);
89
310
  }
90
- return response.json().then((data) => {
91
- console.log(data);
311
+ // Read response text once (can only be read once)
312
+ const responseText = await response.text().catch(() => "Unable to read response");
313
+ // Check content type before parsing JSON
314
+ const contentType = response.headers.get("content-type");
315
+ if (!contentType || !contentType.includes("application/json")) {
316
+ throw new Error(`Expected JSON response but received ${contentType}. Response: ${responseText.substring(0, 200)}`);
317
+ }
318
+ try {
319
+ const data = JSON.parse(responseText);
320
+ console.log("[createShippingAddress] ERP Response:", data);
321
+ // Check if the API returned an error status even with 200 OK
322
+ if (data.status === false) {
323
+ const errorMessage = data.message || "Shipping address creation failed";
324
+ throw new Error(`ERP API error: ${errorMessage}`);
325
+ }
326
+ // Return the data object, which should contain ShippingId
327
+ if (!data.data || !data.data.ShippingId) {
328
+ throw new Error(`Invalid response from ERP: missing ShippingId. Response: ${JSON.stringify(data)}`);
329
+ }
92
330
  return data.data;
93
- });
331
+ }
332
+ catch (error) {
333
+ // If it's already an Error with a message, re-throw it
334
+ if (error instanceof Error) {
335
+ throw error;
336
+ }
337
+ // Otherwise, wrap it
338
+ throw new Error(`Failed to parse JSON response: ${error.message}. Response: ${responseText.substring(0, 200)}`);
339
+ }
94
340
  }
95
341
  async updateShippingAddress(shippingData, inputfrom = "WEBSITE") {
96
342
  const payload = {
@@ -149,6 +395,32 @@ class ErpService {
149
395
  const json = await response.json();
150
396
  return json.data;
151
397
  }
398
+ async getSilverRateData() {
399
+ const response = await fetch(`${this._options.baseUrl}/GetSilverRateDetail`, {
400
+ method: "GET",
401
+ headers: {
402
+ AuthorizationToken: this._options.authToken,
403
+ },
404
+ });
405
+ if (!response.ok) {
406
+ throw new Error(`Failed to fetch silver rate data from ERP`);
407
+ }
408
+ const json = await response.json();
409
+ return json.data;
410
+ }
411
+ async getPlatinumRateData() {
412
+ const response = await fetch(`${this._options.baseUrl}/GetPlatinumRateDetail`, {
413
+ method: "GET",
414
+ headers: {
415
+ AuthorizationToken: this._options.authToken,
416
+ },
417
+ });
418
+ if (!response.ok) {
419
+ throw new Error(`Failed to fetch platinum rate data from ERP`);
420
+ }
421
+ const json = await response.json();
422
+ return json.data;
423
+ }
152
424
  async updateCustomer(customerData) {
153
425
  const payload = {
154
426
  datafor: "partymst",
@@ -172,7 +444,272 @@ class ErpService {
172
444
  return data.data;
173
445
  });
174
446
  }
447
+ async getItemMaster() {
448
+ const response = await fetch(`${this._options.baseUrl}/GetAllMasterData`, {
449
+ method: "GET",
450
+ headers: {
451
+ AuthorizationToken: this._options.authToken,
452
+ datafor: "itemMst",
453
+ },
454
+ });
455
+ if (!response.ok) {
456
+ throw new Error(`Failed to fetch item master data`);
457
+ }
458
+ return response.json().then((data) => {
459
+ const raw = data?.data;
460
+ const list = raw?.ItemMst ?? raw ?? [];
461
+ return Array.isArray(list) ? list : [];
462
+ });
463
+ }
464
+ async getLabourChartMaster() {
465
+ const response = await fetch(`${this._options.baseUrl}/GetAllMasterData`, {
466
+ method: "GET",
467
+ headers: {
468
+ AuthorizationToken: this._options.authToken,
469
+ datafor: "LabourChartMst",
470
+ },
471
+ });
472
+ if (!response.ok) {
473
+ throw new Error(`Failed to fetch labour chart master data`);
474
+ }
475
+ return response.json().then((data) => {
476
+ return data.data || [];
477
+ });
478
+ }
479
+ async getRateChartMaster() {
480
+ const response = await fetch(`${this._options.baseUrl}/GetAllMasterData`, {
481
+ method: "GET",
482
+ headers: {
483
+ AuthorizationToken: this._options.authToken,
484
+ datafor: "RateChartMst",
485
+ },
486
+ });
487
+ if (!response.ok) {
488
+ throw new Error(`Failed to fetch rate chart master data`);
489
+ }
490
+ return response.json().then((data) => {
491
+ return data.data || [];
492
+ });
493
+ }
494
+ async getSaleReturnPolicyMaster() {
495
+ const response = await fetch(`${this._options.baseUrl}/GetAllMasterData`, {
496
+ method: "GET",
497
+ headers: {
498
+ AuthorizationToken: this._options.authToken,
499
+ datafor: "SaleReturnPolicyMaster",
500
+ },
501
+ });
502
+ if (!response.ok) {
503
+ throw new Error(`Failed to fetch sale return policy master data`);
504
+ }
505
+ return response.json().then((data) => {
506
+ return data.data || {};
507
+ });
508
+ }
509
+ async getBookList(type, branchNo) {
510
+ const response = await fetch(`${this._options.baseUrl}/GetBookList`, {
511
+ method: "GET",
512
+ headers: {
513
+ AuthorizationToken: this._options.authToken,
514
+ Type: type,
515
+ BranchNo: branchNo,
516
+ },
517
+ });
518
+ if (!response.ok) {
519
+ if (response.status === 401) {
520
+ return {
521
+ data: [],
522
+ branchNo: branchNo,
523
+ type: type,
524
+ };
525
+ }
526
+ throw new Error(`Failed to fetch book list for type: ${type}, branchNo: ${branchNo}`);
527
+ }
528
+ return response.json().then((data) => {
529
+ return { data: data.data || [], branchNo: branchNo, type: type };
530
+ });
531
+ }
532
+ async getApplicableSaleReturnPolicy(bookNo, branchNo) {
533
+ const response = await fetch(`${this._options.baseUrl}/ListOfApplicableSaleReturnPolicy`, {
534
+ method: "GET",
535
+ headers: {
536
+ AuthorizationToken: this._options.authToken,
537
+ BookNo: bookNo,
538
+ BranchNo: branchNo,
539
+ },
540
+ });
541
+ if (!response.ok) {
542
+ if (response.status === 401) {
543
+ return {
544
+ data: [],
545
+ bookNo: bookNo,
546
+ branchNo: branchNo,
547
+ };
548
+ }
549
+ throw new Error(`Failed to fetch applicable sale return policy for bookNo: ${bookNo}, branchNo: ${branchNo}`);
550
+ }
551
+ return response.json().then((data) => {
552
+ return { data: data.data || [], bookNo: bookNo, branchNo: branchNo };
553
+ });
554
+ }
555
+ async createSale(saleData, type = "WEBSITE") {
556
+ const payload = {
557
+ datafor: "sale",
558
+ operation: "add",
559
+ inputfrom: type,
560
+ data: saleData,
561
+ };
562
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
563
+ method: "POST",
564
+ headers: {
565
+ AuthorizationToken: this._options.authToken,
566
+ "Content-Type": "application/json",
567
+ },
568
+ body: JSON.stringify(payload),
569
+ });
570
+ if (!response.ok) {
571
+ throw new Error(`Failed to create sale`);
572
+ }
573
+ return response.json().then((data) => {
574
+ console.log("Create Sale ERP Response", JSON.stringify(data, null, 2));
575
+ // Return full response to check status
576
+ return {
577
+ status: data.status,
578
+ message: data.message,
579
+ data: data.data,
580
+ };
581
+ });
582
+ }
583
+ async createSaleReturn(saleReturnData, type = "WEBSITE") {
584
+ const payload = {
585
+ datafor: "salereturn",
586
+ operation: "add",
587
+ inputfrom: type,
588
+ data: saleReturnData,
589
+ };
590
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
591
+ method: "POST",
592
+ headers: {
593
+ AuthorizationToken: this._options.authToken,
594
+ "Content-Type": "application/json",
595
+ },
596
+ body: JSON.stringify(payload),
597
+ });
598
+ if (!response.ok) {
599
+ throw new Error(`Failed to create sale return`);
600
+ }
601
+ return response.json().then((data) => {
602
+ console.log("Create Sale Return ERP Response", JSON.stringify(data, null, 2));
603
+ // Return full response to check status
604
+ return {
605
+ status: data.status,
606
+ message: data.message,
607
+ data: data.data,
608
+ };
609
+ });
610
+ }
611
+ /**
612
+ * Create Material Purchase (old gold) in ERP.
613
+ * datafor: "MaterialPurchase", operation: "add", inputfrom: "POS".
614
+ */
615
+ async createMaterialPurchase(data, type = "POS") {
616
+ const payload = {
617
+ datafor: "MaterialPurchase",
618
+ operation: "add",
619
+ inputfrom: type,
620
+ data,
621
+ };
622
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
623
+ method: "POST",
624
+ headers: {
625
+ AuthorizationToken: this._options.authToken,
626
+ "Content-Type": "application/json",
627
+ },
628
+ body: JSON.stringify(payload),
629
+ });
630
+ if (!response.ok) {
631
+ throw new Error(`Failed to create MaterialPurchase (old gold) in ERP: ${response.statusText}`);
632
+ }
633
+ return response.json().then((res) => {
634
+ console.log("Create MaterialPurchase ERP Response", JSON.stringify(res, null, 2));
635
+ return {
636
+ status: res.status,
637
+ message: res.message,
638
+ data: res.data,
639
+ };
640
+ });
641
+ }
642
+ async deleteSaleReturn(deleteData) {
643
+ const payload = {
644
+ datafor: "salereturn",
645
+ operation: "delete",
646
+ data: deleteData,
647
+ };
648
+ const response = await fetch(`${this._options.baseUrl}/webhook`, {
649
+ method: "POST",
650
+ headers: {
651
+ AuthorizationToken: this._options.authToken,
652
+ "Content-Type": "application/json",
653
+ },
654
+ body: JSON.stringify(payload),
655
+ });
656
+ if (!response.ok) {
657
+ throw new Error(`Failed to delete sale return`);
658
+ }
659
+ return response.json().then((data) => {
660
+ console.log("Delete Sale Return ERP Response", JSON.stringify(data, null, 2));
661
+ // Return full response to check status
662
+ return {
663
+ status: data.status,
664
+ message: data.message,
665
+ data: data.data,
666
+ };
667
+ });
668
+ }
669
+ async generateFile(params) {
670
+ // Build headers with parameters - ERP API expects them as headers, not query parameters
671
+ const headers = {
672
+ AuthorizationToken: this._options.authToken,
673
+ FileFor: params.FileFor,
674
+ FileType: params.FileType,
675
+ ReportId: params.ReportId,
676
+ transactionid: params.TransactionId, // Note: lowercase 'transactionid' as per ERP API
677
+ };
678
+ // Add optional LetterHead header if provided
679
+ if (params.LetterHead) {
680
+ headers.LetterHead = params.LetterHead;
681
+ }
682
+ console.log("[generateFile] Calling ERP API with headers:", {
683
+ AuthorizationToken: headers.AuthorizationToken ? "***" : undefined,
684
+ FileFor: headers.FileFor,
685
+ FileType: headers.FileType,
686
+ ReportId: headers.ReportId,
687
+ transactionid: headers.transactionid,
688
+ LetterHead: headers.LetterHead || "not provided",
689
+ });
690
+ const response = await fetch(`${this._options.baseUrl}/GenerateFile`, {
691
+ method: "GET",
692
+ headers: headers,
693
+ });
694
+ if (!response.ok) {
695
+ if (response.status === 401) {
696
+ return {
697
+ status: false,
698
+ message: "Unauthorized",
699
+ };
700
+ }
701
+ throw new Error(`Failed to generate file: ${response.statusText}`);
702
+ }
703
+ return response.json().then((data) => {
704
+ console.log("Generate File ERP Response", JSON.stringify(data, null, 2));
705
+ return {
706
+ status: data.status,
707
+ message: data.message,
708
+ data: data.data,
709
+ };
710
+ });
711
+ }
175
712
  }
176
713
  ErpService.identifier = types_1.ErpKeys.ERP;
177
714
  exports.default = ErpService;
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VycC9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBT2lCO0FBRWpCLE1BQXFCLFVBQVU7SUFJN0IsWUFBWSxFQUFFLEVBQUUsT0FBbUI7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsT0FBZSxFQUNmLGFBQXFCO1FBRXJCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGdCQUFnQixFQUFFO1lBQ3JFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGFBQWEsRUFBRSxhQUFhO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUNiLDRDQUE0QyxhQUFhLEVBQUUsQ0FDNUQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUF1QjtRQUN2QyxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLEVBQUU7WUFDL0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQTZCO1FBQ2hELE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLFVBQVU7WUFDbkIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQ3pCLFlBQW9DO1FBRXBDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixTQUFTLEVBQUUsS0FBSztZQUNoQixTQUFTLEVBQUUsU0FBUztZQUNwQixJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sVUFBVSxFQUFFO1lBQy9ELE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixZQUFvQyxFQUNwQyxZQUFnQyxTQUFTO1FBRXpDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixTQUFTLEVBQUUsUUFBUTtZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sVUFBVSxFQUFFO1lBQy9ELE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FDekIsWUFBcUQsRUFDckQsWUFBZ0MsU0FBUztRQUV6QyxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxvQkFBb0IsRUFBRTtZQUN6RSxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDNUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQTZCO1FBQ2hELE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLFVBQVU7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztRQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeE5NLHFCQUFVLEdBQUcsZUFBTyxDQUFDLEdBQUcsQ0FBQztrQkFEYixVQUFVIn0=
715
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VycC9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBYWlCO0FBRWpCLE1BQXFCLFVBQVU7SUFJN0IsWUFBWSxFQUFFLEVBQUUsT0FBbUI7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsT0FBZSxFQUNmLGFBQXFCO1FBRXJCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGdCQUFnQixFQUFFO1lBQ3JFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGFBQWEsRUFBRSxhQUFhO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUNiLDRDQUE0QyxhQUFhLEVBQUUsQ0FDNUQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FDbEIsSUFBWSxFQUNaLGdCQUF3QixFQUN4QixRQUFnQjtRQUVoQixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sNEJBQTRCLEVBQUU7WUFDcEcsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxJQUFJLEVBQUUsSUFBSTtnQkFDVixRQUFRLEVBQUUsUUFBUTthQUNuQjtTQUNGLENBQUMsQ0FBQyxDQUFDLENBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8saUJBQWlCLEVBQUU7WUFDM0QsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsSUFBSTtnQkFDcEIsUUFBUSxFQUFFLFFBQVE7YUFDbkI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUNBQXVDLFFBQVEsRUFBRSxDQUNsRCxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRyxRQUFRLEVBQUUsUUFBUSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQzFCLFFBQWdCLEVBQ2hCLE1BQWM7UUFFZCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FDMUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sc0JBQXNCLEVBQzlDO1lBQ0UsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUU7Z0JBQ3hCLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRTthQUNyQjtTQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FDYixxREFBcUQsUUFBUSxhQUFhLE1BQU0sRUFBRSxDQUNuRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUU7Z0JBQ3hCLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRTthQUNyQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsYUFBcUIsRUFDckIsUUFBZ0I7UUFFaEIsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDakYsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDeEUsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGdCQUFnQixDQUFDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLEdBQUcscURBQXFELGFBQWEsZUFBZSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWhKLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGFBQWEsRUFBRSxhQUFhO2dCQUM1QixRQUFRLEVBQUUsUUFBUTthQUNuQjtTQUNGLENBQUMsQ0FBQztRQUVILG1GQUFtRjtRQUNuRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQywyREFBMkQsUUFBUSxvQkFBb0IsYUFBYSxVQUFVLEdBQUcseUJBQXlCLENBQUMsQ0FBQztZQUN6SixPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUN4RSxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUzRCxrRkFBa0Y7UUFDbEYsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JHLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELFFBQVEsb0JBQW9CLGFBQWEsYUFBYSxRQUFRLENBQUMsTUFBTSwwQkFBMEIsQ0FBQyxDQUFDO1lBQ3pLLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sWUFBWSxHQUFHLDhDQUE4QyxRQUFRLGFBQWEsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxlQUFlLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUssT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0Qyw2REFBNkQ7WUFDN0Qsd0VBQXdFO1lBQ3hFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQztnQkFDaEUsT0FBTyxDQUFDLElBQUksQ0FBQywwREFBMEQsUUFBUSxvQkFBb0IsYUFBYSxjQUFjLFlBQVkseUJBQXlCLENBQUMsQ0FBQztnQkFDckssaUVBQWlFO2dCQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN4RSxDQUFDO1lBQ0QsT0FBTyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUMsQ0FBQztRQUNuRixDQUFDO1FBQUMsT0FBTyxVQUFVLEVBQUUsQ0FBQztZQUNwQixxRUFBcUU7WUFDckUsT0FBTyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsUUFBUSxvQkFBb0IsYUFBYSxrQ0FBa0MsVUFBVSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqTyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBdUIsRUFBQyxPQUF1QixTQUFTO1FBQ3hFLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLE9BQU87WUFDaEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sVUFBVSxFQUFFO1lBQy9ELE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RSx1Q0FBdUM7WUFDdkMsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLFdBQWdDLEVBQ2hDLE9BQTBCLFNBQVM7UUFFbkMsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUUsY0FBYztZQUN2QixTQUFTLEVBQUUsS0FBSztZQUNoQixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUksRUFBRSxXQUFXO1NBQ2xCLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLEVBQUU7WUFDL0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFdBQW9DLEVBQUMsT0FBdUIsU0FBUztRQUM5RixNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSw0QkFBNEI7WUFDckMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJLEVBQUUsV0FBVztTQUNsQixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sVUFBVSxFQUFFO1lBQy9ELE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRix1Q0FBdUM7WUFDdkMsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQ3hCLFdBQWtDLEVBQ2xDLE9BQTBCLFNBQVM7UUFFbkMsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO1NBQ3BCLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsY0FBc0I7UUFDL0MsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLElBQUksRUFBRTtnQkFDSixjQUFjLEVBQUUsY0FBYzthQUMvQjtTQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLEVBQUU7WUFDL0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUE2QjtRQUNoRCxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLEVBQUU7WUFDL0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FDekIsWUFBb0M7UUFFcEMsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLEVBQUU7WUFDL0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsZUFBZSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUksQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUVsRix5Q0FBeUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLFdBQVcsZUFBZSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckgsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUzRCw2REFBNkQ7WUFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLGtDQUFrQyxDQUFDO2dCQUN4RSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RyxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLHVEQUF1RDtZQUN2RCxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QscUJBQXFCO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEtBQUssQ0FBQyxPQUFPLGVBQWUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixZQUFvQyxFQUNwQyxZQUFnQyxTQUFTO1FBRXpDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixTQUFTLEVBQUUsUUFBUTtZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sVUFBVSxFQUFFO1lBQy9ELE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUM5QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FDekIsWUFBcUQsRUFDckQsWUFBZ0MsU0FBUztRQUV6QyxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxvQkFBb0IsRUFBRTtZQUN6RSxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDNUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUMxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxzQkFBc0IsRUFDOUM7WUFDRSxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDNUM7U0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUMxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyx3QkFBd0IsRUFDaEQ7WUFDRSxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDNUM7U0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQTZCO1FBQ2hELE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLFVBQVU7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztRQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNqQixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxtQkFBbUIsRUFBRTtZQUN4RSxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLE9BQU8sRUFBRSxTQUFTO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUM7WUFDdkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQjtRQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxtQkFBbUIsRUFBRTtZQUN4RSxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLE9BQU8sRUFBRSxnQkFBZ0I7YUFDMUI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLG1CQUFtQixFQUFFO1lBQ3hFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsT0FBTyxFQUFFLGNBQWM7YUFDeEI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCO1FBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLG1CQUFtQixFQUFFO1lBQ3hFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsT0FBTyxFQUFFLHdCQUF3QjthQUNsQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQ2YsSUFBWSxFQUNaLFFBQWdCO1FBRWhCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGNBQWMsRUFBRTtZQUNuRSxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLElBQUksRUFBRSxJQUFJO2dCQUNWLFFBQVEsRUFBRSxRQUFRO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzVCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLElBQUksRUFBRSxJQUFJO2lCQUNYLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix1Q0FBdUMsSUFBSSxlQUFlLFFBQVEsRUFBRSxDQUNyRSxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QixDQUNqQyxNQUFjLEVBQ2QsUUFBZ0I7UUFFaEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQzFCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLG1DQUFtQyxFQUMzRDtZQUNFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDM0MsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsUUFBUSxFQUFFLFFBQVE7YUFDbkI7U0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDNUIsT0FBTztvQkFDTCxJQUFJLEVBQUUsRUFBRTtvQkFDUixNQUFNLEVBQUUsTUFBTTtvQkFDZCxRQUFRLEVBQUUsUUFBUTtpQkFDbkIsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDZEQUE2RCxNQUFNLGVBQWUsUUFBUSxFQUFFLENBQzdGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQXFCLEVBQUUsT0FBMEIsU0FBUztRQUN6RSxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxNQUFNO1lBQ2YsU0FBUyxFQUFFLEtBQUs7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJLEVBQUUsUUFBUTtTQUNmLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLEVBQUU7WUFDL0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLHVDQUF1QztZQUN2QyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFpQyxFQUFFLE9BQTBCLFNBQVM7UUFDM0YsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUUsWUFBWTtZQUNyQixTQUFTLEVBQUUsS0FBSztZQUNoQixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxVQUFVLEVBQUU7WUFDL0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUMzQyxjQUFjLEVBQUUsa0JBQWtCO2FBQ25DO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLHVDQUF1QztZQUN2QyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxzQkFBc0IsQ0FDMUIsSUFBNkIsRUFDN0IsT0FBMEIsS0FBSztRQUUvQixNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxrQkFBa0I7WUFDM0IsU0FBUyxFQUFFLEtBQUs7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1NBQ0wsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRixPQUFPO2dCQUNMLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2dCQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7YUFDZixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQW1DO1FBQ3hELE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLFlBQVk7WUFDckIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsSUFBSSxFQUFFLFVBQVU7U0FDakIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLFVBQVUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQzNDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUUsdUNBQXVDO1lBQ3ZDLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQU1sQjtRQUNDLHdGQUF3RjtRQUN4RixNQUFNLE9BQU8sR0FBMkI7WUFDdEMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1lBQzNDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLGlEQUFpRDtTQUN2RixDQUFDO1FBRUYsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsRUFBRTtZQUMxRCxrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNsRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksY0FBYztTQUNqRCxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FDMUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sZUFBZSxFQUN2QztZQUNFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzVCLE9BQU87b0JBQ0wsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsT0FBTztnQkFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBcDNCTSxxQkFBVSxHQUFHLGVBQU8sQ0FBQyxHQUFHLENBQUM7a0JBRGIsVUFBVSJ9