@osovitny/anatoly 3.17.76 → 3.17.79

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 (201) hide show
  1. package/esm2022/lib/anatoly.module.mjs +2 -3
  2. package/esm2022/lib/billing/billing.module.mjs +70 -0
  3. package/esm2022/lib/billing/exports.mjs +19 -0
  4. package/esm2022/lib/billing/models/paypal-models.mjs +16 -0
  5. package/esm2022/lib/billing/payments/components/braintree/braintree.component.mjs +155 -0
  6. package/esm2022/lib/billing/payments/components/exports.mjs +22 -0
  7. package/esm2022/lib/billing/payments/components/index.mjs +25 -0
  8. package/esm2022/lib/billing/payments/components/paypal/paypal-button.component.mjs +157 -0
  9. package/esm2022/lib/billing/payments/components/paypal/paypal.component.mjs +316 -0
  10. package/esm2022/lib/billing/payments/components/stripe/stripe.component.mjs +109 -0
  11. package/esm2022/lib/billing/payments/services/payments.service.mjs +173 -0
  12. package/esm2022/lib/billing/services/paypal-script.service.mjs +84 -0
  13. package/esm2022/lib/core/browser.mjs +3 -3
  14. package/esm2022/lib/core/consts/app-settings.mjs +3 -3
  15. package/esm2022/lib/core/consts/core-settings.mjs +3 -3
  16. package/esm2022/lib/core/consts/formats.mjs +3 -3
  17. package/esm2022/lib/core/consts/ga.mjs +26 -0
  18. package/esm2022/lib/core/converts/convert.mjs +3 -3
  19. package/esm2022/lib/core/converts/dateConvert.mjs +3 -3
  20. package/esm2022/lib/core/converts/tz/tzParseTimezone.mjs +3 -3
  21. package/esm2022/lib/core/converts/tz/tzTokenizeDate.mjs +3 -3
  22. package/esm2022/lib/core/converts/xmlFormatter.mjs +3 -3
  23. package/esm2022/lib/core/core.module.mjs +10 -3
  24. package/esm2022/lib/core/dom.mjs +7 -7
  25. package/esm2022/lib/core/enums/billing.mjs +51 -0
  26. package/esm2022/lib/core/enums/enums.mjs +21 -0
  27. package/esm2022/lib/core/exports.mjs +64 -0
  28. package/esm2022/lib/core/go/base-go.service.mjs +4 -4
  29. package/esm2022/lib/core/guards/once-import.guard.mjs +4 -4
  30. package/esm2022/lib/core/guards/starter.guard.mjs +3 -3
  31. package/esm2022/lib/core/guid.mjs +3 -3
  32. package/esm2022/lib/core/interceptors/httpInterceptor.mjs +4 -4
  33. package/esm2022/lib/core/is.mjs +3 -3
  34. package/esm2022/lib/core/localization/localization.module.mjs +3 -3
  35. package/esm2022/lib/core/localization/localization.service.mjs +3 -3
  36. package/esm2022/lib/core/localization/localize.pipe.mjs +3 -3
  37. package/esm2022/lib/core/localization/settings.module.mjs +3 -3
  38. package/esm2022/lib/core/localization/utils.mjs +3 -3
  39. package/esm2022/lib/core/logging/globalErrorHandler.mjs +3 -3
  40. package/esm2022/lib/core/logging/logging.service.mjs +3 -3
  41. package/esm2022/lib/core/models/qs.mjs +17 -0
  42. package/esm2022/lib/core/notifications/alerts.mjs +3 -3
  43. package/esm2022/lib/core/notifications/interfaces/notification.mjs +3 -3
  44. package/esm2022/lib/core/notifications/services/notification-service.mjs +3 -3
  45. package/esm2022/lib/core/performance/stopwatch.mjs +4 -4
  46. package/esm2022/lib/core/services/appcontext.service.mjs +3 -3
  47. package/esm2022/lib/core/services/dm.service.mjs +3 -3
  48. package/esm2022/lib/core/services/google-analytics.service.mjs +3 -3
  49. package/esm2022/lib/core/services/idle.service.mjs +3 -3
  50. package/esm2022/lib/core/services/loading.service.mjs +3 -3
  51. package/esm2022/lib/core/services/script.service.mjs +77 -0
  52. package/esm2022/lib/core/services/starter.service.mjs +1 -1
  53. package/esm2022/lib/core/services/web-storage.service.mjs +4 -4
  54. package/esm2022/lib/core/subs.mjs +3 -3
  55. package/esm2022/lib/core/utils/qsutils.mjs +3 -3
  56. package/esm2022/lib/core/utils/utils.mjs +3 -3
  57. package/esm2022/lib/data/base/api.service.mjs +2 -3
  58. package/esm2022/lib/data/base/grid/grid-edit.service.mjs +2 -3
  59. package/esm2022/lib/data/base/grid/grid-read.service.mjs +2 -3
  60. package/esm2022/lib/data/data.module.mjs +10 -3
  61. package/esm2022/lib/data/exports.mjs +22 -0
  62. package/esm2022/lib/data/services/billing/payments-api.service.mjs +67 -0
  63. package/esm2022/lib/data/services/core-api.service.mjs +5 -5
  64. package/esm2022/lib/data/services/emails-api.service.mjs +5 -5
  65. package/esm2022/lib/external/fa.module.mjs +45 -0
  66. package/esm2022/lib/external/kendo.module.mjs +90 -0
  67. package/esm2022/lib/iam/b2c/b2c.mjs +3 -3
  68. package/esm2022/lib/iam/b2c/consts.mjs +3 -3
  69. package/esm2022/lib/iam/b2c/index.mjs +3 -3
  70. package/esm2022/lib/iam/configs.mjs +3 -3
  71. package/esm2022/lib/iam/consts.mjs +3 -3
  72. package/esm2022/lib/iam/exports.mjs +22 -0
  73. package/esm2022/lib/iam/guards/admin.guard.mjs +3 -3
  74. package/esm2022/lib/iam/guards/authentication.guard.mjs +1 -1
  75. package/esm2022/lib/iam/guards/index.mjs +2 -2
  76. package/esm2022/lib/iam/iam-pages.module.mjs +3 -3
  77. package/esm2022/lib/iam/iam-pages.routes.mjs +3 -3
  78. package/esm2022/lib/iam/iam.module.mjs +3 -3
  79. package/esm2022/lib/iam/pages/signin.page.mjs +3 -3
  80. package/esm2022/lib/iam/pages/signout.page.mjs +3 -3
  81. package/esm2022/lib/iam/pages/signup.page.mjs +3 -3
  82. package/esm2022/lib/iam/redirect.mjs +3 -3
  83. package/esm2022/lib/iam/services/auth.service.mjs +2 -2
  84. package/esm2022/lib/iam/storage.mjs +3 -3
  85. package/esm2022/lib/iam/utils.mjs +3 -3
  86. package/esm2022/lib/ui/components/base/components/component.mjs +4 -4
  87. package/esm2022/lib/ui/components/base/components/edit.component.mjs +4 -4
  88. package/esm2022/lib/ui/components/base/components/enum-edit.component.mjs +4 -4
  89. package/esm2022/lib/ui/components/base/dialog.mjs +3 -3
  90. package/esm2022/lib/ui/components/base/list.mjs +3 -3
  91. package/esm2022/lib/ui/components/base/pages/edit.page.mjs +3 -3
  92. package/esm2022/lib/ui/components/base/pages/page.mjs +3 -3
  93. package/esm2022/lib/ui/components/base/pages/paged.page.mjs +3 -3
  94. package/esm2022/lib/ui/components/billing/buyaccess-button.component.mjs +3 -3
  95. package/esm2022/lib/ui/components/billing/subscribe-plan-button.component.mjs +3 -3
  96. package/esm2022/lib/ui/components/card/card-body.component.mjs +3 -4
  97. package/esm2022/lib/ui/components/card/card-footer.component.mjs +3 -4
  98. package/esm2022/lib/ui/components/card/card-header.component.mjs +3 -4
  99. package/esm2022/lib/ui/components/card/card.component.mjs +3 -4
  100. package/esm2022/lib/ui/components/check-icon/check-icon.component.mjs +3 -3
  101. package/esm2022/lib/ui/components/copy-2-clipboard/copy-2-clipboard.component.mjs +3 -3
  102. package/esm2022/lib/ui/components/datapager/datapager.component.mjs +3 -3
  103. package/esm2022/lib/ui/components/dropdownlists/country/country.dropdownlist.mjs +3 -3
  104. package/esm2022/lib/ui/components/dropdownlists/timezone/timezone.dropdownlist.mjs +3 -3
  105. package/esm2022/lib/ui/components/exports.mjs +50 -0
  106. package/esm2022/lib/ui/components/html-editor/base-html-editor.component.mjs +1 -1
  107. package/esm2022/lib/ui/components/html-editor/forms-html-editor.component.mjs +3 -3
  108. package/esm2022/lib/ui/components/html-editor/html-editor.component.mjs +3 -3
  109. package/esm2022/lib/ui/components/html-editor/html-editor.defaultoptions.mjs +3 -3
  110. package/esm2022/lib/ui/components/identity/signin-button.component.mjs +3 -3
  111. package/esm2022/lib/ui/components/identity/signout-button.component.mjs +3 -3
  112. package/esm2022/lib/ui/components/identity/signup-button.component.mjs +3 -3
  113. package/esm2022/lib/ui/components/index.mjs +44 -37
  114. package/esm2022/lib/ui/components/nodata/nodata.component.mjs +3 -3
  115. package/esm2022/lib/ui/components/spinners/loading/loading.component.mjs +3 -3
  116. package/esm2022/lib/ui/components/spinners/pagespinner/pagespinner.component.mjs +3 -3
  117. package/esm2022/lib/ui/components/urlslug/urlslug.component.mjs +3 -3
  118. package/esm2022/lib/ui/dialogs/contact-us/contact-us.dialog.mjs +3 -3
  119. package/esm2022/lib/ui/dialogs/exports.mjs +17 -0
  120. package/esm2022/lib/ui/dialogs/index.mjs +7 -4
  121. package/esm2022/lib/ui/directives/exports.mjs +18 -0
  122. package/esm2022/lib/ui/directives/hover.directive.mjs +3 -3
  123. package/esm2022/lib/ui/directives/index.mjs +8 -5
  124. package/esm2022/lib/ui/directives/native-element.directive.mjs +3 -3
  125. package/esm2022/lib/ui/exports.mjs +22 -0
  126. package/esm2022/lib/ui/forms/components/address/address.component.mjs +6 -6
  127. package/esm2022/lib/ui/forms/components/company/company.component.mjs +4 -4
  128. package/esm2022/lib/ui/forms/contact-us/contact-us.mjs +3 -3
  129. package/esm2022/lib/ui/forms/exports.mjs +21 -0
  130. package/esm2022/lib/ui/forms/index.mjs +9 -8
  131. package/esm2022/lib/ui/pipes/exports.mjs +19 -0
  132. package/esm2022/lib/ui/pipes/filesize.pipe.mjs +3 -3
  133. package/esm2022/lib/ui/pipes/index.mjs +9 -6
  134. package/esm2022/lib/ui/pipes/replace-text.pipe.mjs +3 -3
  135. package/esm2022/lib/ui/pipes/safeHtml.pipe.mjs +3 -3
  136. package/esm2022/lib/ui/ui.module.mjs +51 -137
  137. package/esm2022/lib/ui/validation/exports.mjs +19 -0
  138. package/esm2022/lib/ui/validation/form-validation-summary.component.mjs +3 -3
  139. package/esm2022/lib/ui/validation/index.mjs +8 -6
  140. package/esm2022/lib/ui/validation/item-validation-summary.component.mjs +3 -3
  141. package/esm2022/lib/ui/validation/validation-summary.component.mjs +3 -3
  142. package/esm2022/public-api.mjs +9 -14
  143. package/fesm2022/osovitny-anatoly.mjs +1671 -891
  144. package/fesm2022/osovitny-anatoly.mjs.map +1 -1
  145. package/lib/billing/billing.module.d.ts +13 -0
  146. package/lib/billing/exports.d.ts +3 -0
  147. package/lib/{payments/PayPal → billing}/models/paypal-models.d.ts +1 -4
  148. package/lib/billing/payments/components/braintree/braintree.component.d.ts +25 -0
  149. package/lib/billing/payments/components/exports.d.ts +4 -0
  150. package/lib/billing/payments/components/index.d.ts +2 -0
  151. package/lib/billing/payments/components/paypal/paypal-button.component.d.ts +18 -0
  152. package/lib/{payments/PayPal/components → billing/payments/components/paypal}/paypal.component.d.ts +3 -3
  153. package/lib/billing/payments/components/stripe/stripe.component.d.ts +21 -0
  154. package/lib/billing/payments/services/payments.service.d.ts +50 -0
  155. package/lib/{payments/PayPal → billing}/services/paypal-script.service.d.ts +3 -4
  156. package/lib/core/consts/ga.d.ts +11 -0
  157. package/lib/core/enums/billing.d.ts +29 -0
  158. package/lib/core/enums/enums.d.ts +4 -0
  159. package/lib/core/{index.d.ts → exports.d.ts} +4 -0
  160. package/lib/core/interceptors/httpInterceptor.d.ts +1 -1
  161. package/lib/core/models/qs.d.ts +4 -0
  162. package/lib/{payments → core}/services/script.service.d.ts +3 -1
  163. package/lib/data/services/billing/payments-api.service.d.ts +13 -0
  164. package/lib/ui/components/base/components/component.d.ts +1 -1
  165. package/lib/ui/components/exports.d.ts +30 -0
  166. package/lib/ui/components/index.d.ts +2 -30
  167. package/lib/ui/dialogs/exports.d.ts +1 -0
  168. package/lib/ui/dialogs/index.d.ts +2 -1
  169. package/lib/ui/directives/exports.d.ts +2 -0
  170. package/lib/ui/directives/index.d.ts +2 -2
  171. package/lib/ui/exports.d.ts +6 -0
  172. package/lib/ui/forms/components/address/address.component.d.ts +2 -2
  173. package/lib/ui/forms/components/company/company.component.d.ts +1 -1
  174. package/lib/ui/forms/exports.d.ts +3 -0
  175. package/lib/ui/forms/index.d.ts +2 -3
  176. package/lib/ui/pipes/exports.d.ts +3 -0
  177. package/lib/ui/pipes/index.d.ts +2 -3
  178. package/lib/ui/ui.module.d.ts +21 -21
  179. package/lib/ui/validation/exports.d.ts +3 -0
  180. package/lib/ui/validation/index.d.ts +2 -3
  181. package/package.json +4 -2
  182. package/public-api.d.ts +6 -11
  183. package/esm2022/lib/core/index.mjs +0 -59
  184. package/esm2022/lib/data/index.mjs +0 -23
  185. package/esm2022/lib/data/urls.mjs +0 -22
  186. package/esm2022/lib/iam/index.mjs +0 -22
  187. package/esm2022/lib/payments/PayPal/components/paypal.component.mjs +0 -317
  188. package/esm2022/lib/payments/PayPal/models/paypal-models.mjs +0 -17
  189. package/esm2022/lib/payments/PayPal/services/paypal-script.service.mjs +0 -98
  190. package/esm2022/lib/payments/index.mjs +0 -22
  191. package/esm2022/lib/payments/payments.module.mjs +0 -54
  192. package/esm2022/lib/payments/services/script.service.mjs +0 -63
  193. package/esm2022/lib/ui/external/fa.module.mjs +0 -46
  194. package/esm2022/lib/ui/external/kendo.module.mjs +0 -91
  195. package/lib/data/urls.d.ts +0 -4
  196. package/lib/payments/index.d.ts +0 -4
  197. package/lib/payments/payments.module.d.ts +0 -8
  198. /package/lib/data/{index.d.ts → exports.d.ts} +0 -0
  199. /package/lib/{ui/external → external}/fa.module.d.ts +0 -0
  200. /package/lib/{ui/external → external}/kendo.module.d.ts +0 -0
  201. /package/lib/iam/{index.d.ts → exports.d.ts} +0 -0
@@ -1,59 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny vadim@osovitny.com
8
- Anatoly Osovitny anatoly@osovitny.com
9
-
10
- Created:
11
- 2 Aug 2022
12
-
13
- Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
- </file>
15
- */
16
- //consts
17
- export * from './consts/app-settings';
18
- export * from './consts/core-settings';
19
- export * from './consts/formats';
20
- //converts
21
- export * from './converts/convert';
22
- export * from './converts/dateConvert';
23
- export * from './converts/xmlFormatter';
24
- export * from './go/base-go.service';
25
- export * from './interceptors/httpInterceptor';
26
- //guards
27
- export * from './guards/once-import.guard';
28
- export * from './guards/starter.guard';
29
- //localization
30
- export * from './localization/localize.pipe';
31
- export * from './localization/localization.service';
32
- export * from './localization/settings.module';
33
- export * from './localization/localization.module';
34
- export * from './localization/utils';
35
- //logging
36
- export * from './logging/globalErrorHandler';
37
- export * from './logging/logging.service';
38
- //notifications
39
- export * from './notifications/alerts';
40
- export * from './notifications/interfaces/notification';
41
- export * from './notifications/services/notification-service';
42
- //performance
43
- export * from './performance/stopwatch';
44
- //services
45
- export * from './services/appcontext.service';
46
- export * from './services/dm.service';
47
- export * from './services/google-analytics.service';
48
- export * from './services/idle.service';
49
- export * from './services/loading.service';
50
- export * from './services/starter.service';
51
- export * from './services/web-storage.service';
52
- export * from './browser';
53
- export * from './dom';
54
- export * from './guid';
55
- export * from './is';
56
- export * from './subs';
57
- export * from './utils/qsutils';
58
- export * from './utils/utils';
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvY29yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLFFBQVE7QUFDUixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxVQUFVO0FBQ1YsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLFFBQVE7QUFDUixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsY0FBYztBQUNkLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxTQUFTO0FBQ1QsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBRTFDLGVBQWU7QUFDZixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywrQ0FBK0MsQ0FBQztBQUU5RCxhQUFhO0FBQ2IsY0FBYyx5QkFBeUIsQ0FBQztBQUV4QyxVQUFVO0FBQ1YsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHVCQUF1QixDQUFBO0FBQ3JDLGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUU5QyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLE1BQU0sQ0FBQztBQUNyQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDIgQXVnIDIwMjJcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL2NvbnN0c1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cy9hcHAtc2V0dGluZ3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cy9jb3JlLXNldHRpbmdzJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb25zdHMvZm9ybWF0cyc7XHJcblxyXG4vL2NvbnZlcnRzXHJcbmV4cG9ydCAqIGZyb20gJy4vY29udmVydHMvY29udmVydCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29udmVydHMvZGF0ZUNvbnZlcnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnRzL3htbEZvcm1hdHRlcic7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2dvL2Jhc2UtZ28uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJjZXB0b3JzL2h0dHBJbnRlcmNlcHRvcic7XHJcblxyXG4vL2d1YXJkc1xyXG5leHBvcnQgKiBmcm9tICcuL2d1YXJkcy9vbmNlLWltcG9ydC5ndWFyZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZ3VhcmRzL3N0YXJ0ZXIuZ3VhcmQnO1xyXG5cclxuLy9sb2NhbGl6YXRpb25cclxuZXhwb3J0ICogZnJvbSAnLi9sb2NhbGl6YXRpb24vbG9jYWxpemUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9jYWxpemF0aW9uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9sb2NhbGl6YXRpb24vc2V0dGluZ3MubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9sb2NhbGl6YXRpb24vbG9jYWxpemF0aW9uLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9jYWxpemF0aW9uL3V0aWxzJztcclxuXHJcbi8vbG9nZ2luZ1xyXG5leHBvcnQgKiBmcm9tICcuL2xvZ2dpbmcvZ2xvYmFsRXJyb3JIYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9sb2dnaW5nL2xvZ2dpbmcuc2VydmljZSc7XHJcblxyXG4vL25vdGlmaWNhdGlvbnNcclxuZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb25zL2FsZXJ0cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9ucy9pbnRlcmZhY2VzL25vdGlmaWNhdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9ucy9zZXJ2aWNlcy9ub3RpZmljYXRpb24tc2VydmljZSc7XHJcblxyXG4vL3BlcmZvcm1hbmNlXHJcbmV4cG9ydCAqIGZyb20gJy4vcGVyZm9ybWFuY2Uvc3RvcHdhdGNoJztcclxuXHJcbi8vc2VydmljZXNcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9hcHBjb250ZXh0LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2RtLnNlcnZpY2UnXHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZ29vZ2xlLWFuYWx5dGljcy5zZXJ2aWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2lkbGUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvbG9hZGluZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9zdGFydGVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3dlYi1zdG9yYWdlLnNlcnZpY2UnXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2Jyb3dzZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL2RvbSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZ3VpZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vaXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3N1YnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3FzdXRpbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3V0aWxzJztcclxuIl19
@@ -1,23 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny vadim@osovitny.com
8
- Anatoly Osovitny anatoly@osovitny.com
9
-
10
- Created:
11
- 2 Aug 2022
12
-
13
- Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
- </file>
15
- */
16
- //base
17
- export * from './base/api.service';
18
- export * from './base/grid/grid-read.service';
19
- export * from './base/grid/grid-edit.service';
20
- //services
21
- export * from './services/core-api.service';
22
- export * from './services/emails-api.service';
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU07QUFDTixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQztBQUU5QyxVQUFVO0FBQ1YsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDIgQXVnIDIwMjJcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL2Jhc2VcclxuZXhwb3J0ICogZnJvbSAnLi9iYXNlL2FwaS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9iYXNlL2dyaWQvZ3JpZC1yZWFkLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jhc2UvZ3JpZC9ncmlkLWVkaXQuc2VydmljZSc7XHJcblxyXG4vL3NlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY29yZS1hcGkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZW1haWxzLWFwaS5zZXJ2aWNlJztcclxuIl19
@@ -1,22 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny vadim@osovitny.com
8
- Anatoly Osovitny anatoly@osovitny.com
9
-
10
- Created:
11
- 30 April 2020
12
-
13
- Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
- </file>
15
- */
16
- //App
17
- import { ApiUrl } from '../core/consts/core-settings';
18
- export const Urls = {
19
- coreApiUrl: `${ApiUrl}/core`,
20
- emailsApiUrl: `${ApiUrl}/emails`
21
- };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9kYXRhL3VybHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixLQUFLO0FBQ0wsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRztJQUNsQixVQUFVLEVBQUUsR0FBRyxNQUFNLE9BQU87SUFDNUIsWUFBWSxFQUFFLEdBQUcsTUFBTSxTQUFTO0NBQ2pDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMzAgQXByaWwgMjAyMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IEFwaVVybCB9IGZyb20gJy4uL2NvcmUvY29uc3RzL2NvcmUtc2V0dGluZ3MnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFVybHMgPSB7XHJcbiAgY29yZUFwaVVybDogYCR7QXBpVXJsfS9jb3JlYCxcclxuICBlbWFpbHNBcGlVcmw6IGAke0FwaVVybH0vZW1haWxzYFxyXG59XHJcbiJdfQ==
@@ -1,22 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny vadim@osovitny.com
8
- Anatoly Osovitny anatoly@osovitny.com
9
-
10
- Created:
11
- 27 Nov 2023
12
-
13
- Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
- </file>
15
- */
16
- //guards
17
- export * from './guards';
18
- //services
19
- export * from './services/auth.service';
20
- //utils
21
- export * from './utils';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvaWFtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsUUFBUTtBQUNSLGNBQWMsVUFBVSxDQUFDO0FBRXpCLFVBQVU7QUFDVixjQUFjLHlCQUF5QixDQUFDO0FBRXhDLE9BQU87QUFDUCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAyNyBOb3YgMjAyM1xyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vZ3VhcmRzXHJcbmV4cG9ydCAqIGZyb20gJy4vZ3VhcmRzJztcclxuXHJcbi8vc2VydmljZXNcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5cclxuLy91dGlsc1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcclxuIl19
@@ -1,317 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny vadim@osovitny.com
8
- Anatoly Osovitny anatoly@osovitny.com
9
-
10
- Created:
11
- 14 Jun 2024
12
-
13
- Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
- </file>
15
- */
16
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from "@angular/core";
17
- import { Subject } from "rxjs";
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "../services/paypal-script.service";
20
- const _c0 = ["payPalButtonContainer"];
21
- export class PayPalComponent {
22
- set payPalButtonContainer(content) {
23
- this.payPalButtonContainerElem = content;
24
- }
25
- constructor(paypalScriptService, cdr, ngZone) {
26
- this.paypalScriptService = paypalScriptService;
27
- this.cdr = cdr;
28
- this.ngZone = ngZone;
29
- /**
30
- * If enabled, paypal SDK script will be loaded. Useful if you want to have multiple PayPal components on the same page
31
- * sharing base configuration. In such a case only a single component may register script.
32
- */
33
- this.registerScript = true;
34
- /**
35
- * Emitted when paypal script is loaded
36
- */
37
- this.scriptLoaded = new EventEmitter();
38
- this.ngUnsubscribe = new Subject();
39
- /**
40
- * Flag that indicates if paypal should be initialized (required for handling script load events and availability of DOM element)
41
- */
42
- this.initializePayPal = true;
43
- }
44
- ngOnChanges(changes) {
45
- if (!this.payPalButtonContainerId) {
46
- this.payPalButtonContainerId = this.generateElementId();
47
- }
48
- // first time config setup
49
- const config = this.config;
50
- //const name = 'PayPalConfig';
51
- if (changes['config'].isFirstChange()) {
52
- if (config && this.registerScript) {
53
- this.initPayPalScript(config, (payPal) => {
54
- // store reference to paypal global script
55
- this.payPal = payPal;
56
- this.doPayPalCheck();
57
- });
58
- }
59
- }
60
- // changes to config
61
- if (!changes['config'].isFirstChange()) {
62
- this.reinitialize(config);
63
- }
64
- }
65
- ngOnDestroy() {
66
- this.paypalScriptService.destroyPayPalScript();
67
- this.ngUnsubscribe.next();
68
- this.ngUnsubscribe.complete();
69
- }
70
- ngAfterViewInit() {
71
- this.doPayPalCheck();
72
- }
73
- customInit(payPal) {
74
- this.payPal = payPal;
75
- this.doPayPalCheck();
76
- }
77
- reinitialize(config) {
78
- this.config = config;
79
- this.payPal = undefined;
80
- this.paypalScriptService.destroyPayPalScript();
81
- this.payPalButtonContainerId = this.generateElementId();
82
- this.initializePayPal = true;
83
- if (this.payPalButtonContainerElem) {
84
- try {
85
- while (this.payPalButtonContainerElem.nativeElement.firstChild) {
86
- this.payPalButtonContainerElem.nativeElement.removeChild(this.payPalButtonContainerElem.nativeElement.firstChild);
87
- }
88
- }
89
- catch (error) {
90
- console.error(error);
91
- }
92
- }
93
- this.cdr.detectChanges();
94
- if (this.config) {
95
- if (!this.payPal) {
96
- this.initPayPalScript(this.config, (payPal) => {
97
- // store reference to paypal global script
98
- this.payPal = payPal;
99
- this.doPayPalCheck();
100
- });
101
- }
102
- else {
103
- this.doPayPalCheck();
104
- }
105
- }
106
- }
107
- doPayPalCheck() {
108
- if (this.initializePayPal &&
109
- this.config &&
110
- this.payPal &&
111
- this.payPalButtonContainerElem) {
112
- // make sure that id is also set
113
- if (this.payPalButtonContainerElem.nativeElement.id) {
114
- this.initializePayPal = false;
115
- this.initPayPal(this.config, this.payPal);
116
- }
117
- }
118
- }
119
- initPayPalScript(config, initPayPal) {
120
- this.paypalScriptService.registerPayPalScript({
121
- clientId: config.clientId,
122
- locale: config.advanced?.locale,
123
- commit: config.advanced && config.advanced.commit
124
- ? config.advanced.commit
125
- : undefined,
126
- currency: config.currency,
127
- vault: config.vault,
128
- intent: config.intent,
129
- funding: config.fundingSource != undefined || config.fundingSource != null ? true : false,
130
- extraParams: config.advanced && config.advanced.extraQueryParams
131
- ? config.advanced.extraQueryParams
132
- : [],
133
- }, (paypal) => {
134
- this.scriptLoaded.next(paypal);
135
- initPayPal(paypal);
136
- });
137
- }
138
- generateElementId() {
139
- return `ngx-captcha-id-${this.generateGuid()}`;
140
- }
141
- initPayPal(config, paypal) {
142
- // Running outside angular zone prevents infinite ngDoCheck lifecycle calls
143
- this.ngZone.runOutsideAngular(() => {
144
- // https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page
145
- const createOrder = (data, actions) => {
146
- return this.ngZone.run(() => {
147
- if (config.createOrderOnClient && config.createOrderOnServer) {
148
- throw Error(`Both 'createOrderOnClient' and 'createOrderOnServer' are defined.
149
- Please choose one or the other.`);
150
- }
151
- if (!config.createOrderOnClient && !config.createOrderOnServer) {
152
- throw Error(`Neither 'createOrderOnClient' or 'createOrderOnServer' are defined.
153
- Please define one of these to create order.`);
154
- }
155
- if (config.createOrderOnClient) {
156
- return actions.order.create(config.createOrderOnClient(data));
157
- }
158
- if (config.createOrderOnServer) {
159
- return config.createOrderOnServer(data);
160
- }
161
- throw Error(`Invalid state for 'createOrder'.`);
162
- });
163
- };
164
- const createSubscription = (data, actions) => {
165
- return this.ngZone.run(() => {
166
- if (config.createSubscriptionOnClient) {
167
- return actions.subscription.create(config.createSubscriptionOnClient(data));
168
- }
169
- return;
170
- });
171
- };
172
- const onShippingChange = (data, actions) => {
173
- return this.ngZone.run(() => {
174
- if (config.onShippingChange) {
175
- return config.onShippingChange(data, actions);
176
- }
177
- });
178
- };
179
- const buttonsConfig = {
180
- style: config.style,
181
- fundingSource: undefined,
182
- onApprove: (data, actions) => {
183
- return this.ngZone.run(() => {
184
- if (config.onApprove) {
185
- config.onApprove(data, actions);
186
- }
187
- // capture on server
188
- if (config.authorizeOnServer) {
189
- return config.authorizeOnServer(data, actions);
190
- }
191
- // capture on client
192
- const onClientAuthorization = config.onClientAuthorization;
193
- if (onClientAuthorization) {
194
- actions.order
195
- .capture()
196
- .then((details) => {
197
- this.ngZone.run(() => {
198
- onClientAuthorization(details);
199
- });
200
- });
201
- }
202
- });
203
- },
204
- onError: (error) => {
205
- this.ngZone.run(() => {
206
- if (config.onError) {
207
- config.onError(error);
208
- }
209
- });
210
- },
211
- onCancel: (data, actions) => {
212
- this.ngZone.run(() => {
213
- if (config.onCancel) {
214
- config.onCancel(data, actions);
215
- }
216
- });
217
- },
218
- onClick: (data, actions) => {
219
- this.ngZone.run(() => {
220
- if (config.onClick) {
221
- config.onClick(data, actions);
222
- }
223
- });
224
- },
225
- onInit: (data, actions) => {
226
- this.ngZone.run(() => {
227
- if (config.onInit) {
228
- config.onInit(data, actions);
229
- }
230
- });
231
- },
232
- // Add the functions if they've been created in the config object
233
- // The API only allows one of the two to be set
234
- ...((config.createOrderOnClient || config.createOrderOnServer) && {
235
- createOrder,
236
- }),
237
- ...(config.createSubscriptionOnClient && { createSubscription }),
238
- // The onShippingChange callback cannot be used with subscriptions
239
- // so we only add it if it is set
240
- ...(config.onShippingChange && { onShippingChange }),
241
- };
242
- let fundSource = undefined;
243
- switch (config.fundingSource) {
244
- case "PAYPAL":
245
- fundSource = paypal.FUNDING.PAYPAL;
246
- break;
247
- case "CARD":
248
- fundSource = paypal.FUNDING.CARD;
249
- break;
250
- case "PAYLATER":
251
- fundSource = paypal.FUNDING.PAYLATER;
252
- break;
253
- case "CREDIT":
254
- fundSource = paypal.FUNDING.CREDIT;
255
- break;
256
- case "VENMO":
257
- fundSource = paypal.FUNDING.VENMO;
258
- break;
259
- default:
260
- break;
261
- }
262
- if (fundSource != undefined) {
263
- buttonsConfig.fundingSource = fundSource;
264
- if (config.fundingSource !== "PAYPAL")
265
- delete buttonsConfig.style?.color;
266
- }
267
- paypal.Buttons(buttonsConfig).render(`#${this.payPalButtonContainerId}`);
268
- });
269
- }
270
- generateGuid() {
271
- let d = new Date().getTime(), d2 = (performance && performance.now && performance.now() * 1000) || 0;
272
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
273
- let r = Math.random() * 16;
274
- if (d > 0) {
275
- r = (d + r) % 16 | 0;
276
- d = Math.floor(d / 16);
277
- }
278
- else {
279
- r = (d2 + r) % 16 | 0;
280
- d2 = Math.floor(d2 / 16);
281
- }
282
- return (c == "x" ? r : (r & 0x7) | 0x8).toString(16);
283
- });
284
- }
285
- static { this.ɵfac = function PayPalComponent_Factory(t) { return new (t || PayPalComponent)(i0.ɵɵdirectiveInject(i1.PayPalScriptService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone)); }; }
286
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PayPalComponent, selectors: [["anatoly-paypal"]], viewQuery: function PayPalComponent_Query(rf, ctx) { if (rf & 1) {
287
- i0.ɵɵviewQuery(_c0, 5);
288
- } if (rf & 2) {
289
- let _t;
290
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.payPalButtonContainer = _t.first);
291
- } }, inputs: { config: "config", registerScript: "registerScript" }, outputs: { scriptLoaded: "scriptLoaded" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 1, consts: [[3, "id"], ["payPalButtonContainer", ""]], template: function PayPalComponent_Template(rf, ctx) { if (rf & 1) {
292
- i0.ɵɵelement(0, "div", 0, 1);
293
- } if (rf & 2) {
294
- i0.ɵɵproperty("id", ctx.payPalButtonContainerId);
295
- } }, encapsulation: 2, changeDetection: 0 }); }
296
- }
297
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PayPalComponent, [{
298
- type: Component,
299
- args: [{
300
- changeDetection: ChangeDetectionStrategy.OnPush,
301
- selector: "anatoly-paypal",
302
- template: `
303
- <div #payPalButtonContainer [id]="payPalButtonContainerId"></div>
304
- `,
305
- }]
306
- }], () => [{ type: i1.PayPalScriptService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], { config: [{
307
- type: Input
308
- }], registerScript: [{
309
- type: Input
310
- }], scriptLoaded: [{
311
- type: Output
312
- }], payPalButtonContainer: [{
313
- type: ViewChild,
314
- args: ["payPalButtonContainer", { static: false }]
315
- }] }); })();
316
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PayPalComponent, { className: "PayPalComponent", filePath: "lib\\payments\\PayPal\\components\\paypal.component.ts", lineNumber: 58 }); })();
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5cGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9wYXltZW50cy9QYXlQYWwvY29tcG9uZW50cy9wYXlwYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUEwQi9CLE1BQU0sT0FBTyxlQUFlO0lBeUIxQixJQUNJLHFCQUFxQixDQUFDLE9BQW1CO1FBQzNDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLENBQUM7SUFDM0MsQ0FBQztJQVlELFlBQ1UsbUJBQXdDLEVBQ3hDLEdBQXNCLEVBQ3RCLE1BQWM7UUFGZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFyQ3hCOzs7V0FHRztRQUNNLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOztXQUVHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBT2hDLGtCQUFhLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFRcEU7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFXekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQiw4QkFBOEI7UUFFOUIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDdkMsMENBQTBDO29CQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBaUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUMvRCxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDdEQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQ3hELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXpCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQzVDLDBDQUEwQztvQkFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFDRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMseUJBQXlCLEVBQzlCLENBQUM7WUFDRCxnQ0FBZ0M7WUFDaEMsSUFBSSxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUN0QixNQUFxQixFQUNyQixVQUFpQztRQUVqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQzNDO1lBQ0UsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU07WUFDL0IsTUFBTSxFQUNKLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUN2QyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUN4QixDQUFDLENBQUMsU0FBUztZQUNmLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLE9BQU8sRUFBRSxNQUFNLENBQUMsYUFBYSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ3pGLFdBQVcsRUFDVCxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO2dCQUNqRCxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7Z0JBQ2xDLENBQUMsQ0FBQyxFQUFFO1NBQ1QsRUFDRCxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPLGtCQUFrQixJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQXFCLEVBQUUsTUFBVztRQUNuRCwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsaUdBQWlHO1lBQ2pHLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBUyxFQUFFLE9BQW9DLEVBQUUsRUFBRTtnQkFDdEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQzFCLElBQUksTUFBTSxDQUFDLG1CQUFtQixJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUM3RCxNQUFNLEtBQUssQ0FBQztvREFDNEIsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO29CQUVELElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzt3QkFDL0QsTUFBTSxLQUFLLENBQUM7Z0VBQ3dDLENBQUMsQ0FBQztvQkFDeEQsQ0FBQztvQkFFRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMvQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNoRSxDQUFDO29CQUVELElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7d0JBQy9CLE9BQU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxQyxDQUFDO29CQUVELE1BQU0sS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixJQUFxQyxFQUNyQyxPQUEyQyxFQUMzQyxFQUFFO2dCQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUMxQixJQUFJLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxDQUFDO3dCQUN0QyxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUNoQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQ3hDLENBQUM7b0JBQ0osQ0FBQztvQkFDRCxPQUFPO2dCQUNULENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixJQUEyQixFQUMzQixPQUFpQyxFQUNqQyxFQUFFO2dCQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUMxQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUM1QixPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ2hELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFFRixNQUFNLGFBQWEsR0FBRztnQkFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixhQUFhLEVBQUUsU0FBUztnQkFDeEIsU0FBUyxFQUFFLENBQ1QsSUFBNEIsRUFDNUIsT0FBa0MsRUFDbEMsRUFBRTtvQkFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDMUIsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQ3JCLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUNsQyxDQUFDO3dCQUVELG9CQUFvQjt3QkFDcEIsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzs0QkFDN0IsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUNqRCxDQUFDO3dCQUVELG9CQUFvQjt3QkFDcEIsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7d0JBQzNELElBQUkscUJBQXFCLEVBQUUsQ0FBQzs0QkFDMUIsT0FBTyxDQUFDLEtBQUs7aUNBQ1YsT0FBTyxFQUFFO2lDQUNULElBQUksQ0FBQyxDQUFDLE9BQXFDLEVBQUUsRUFBRTtnQ0FDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29DQUNuQixxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDakMsQ0FBQyxDQUFDLENBQUM7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBQ1AsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU8sRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ25CLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN4QixDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLENBQUMsSUFBeUIsRUFBRSxPQUFZLEVBQUUsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNuQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ2pDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFTLEVBQUUsT0FBZ0MsRUFBRSxFQUFFO29CQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ25CLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDaEMsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU0sRUFBRSxDQUFDLElBQXVCLEVBQUUsT0FBK0IsRUFBRSxFQUFFO29CQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ25CLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDL0IsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELGlFQUFpRTtnQkFDakUsK0NBQStDO2dCQUMvQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUk7b0JBQ2hFLFdBQVc7aUJBQ1osQ0FBQztnQkFDRixHQUFHLENBQUMsTUFBTSxDQUFDLDBCQUEwQixJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztnQkFDaEUsa0VBQWtFO2dCQUNsRSxpQ0FBaUM7Z0JBQ2pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3JELENBQUM7WUFFRixJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDM0IsUUFBTyxNQUFNLENBQUMsYUFBYSxFQUFDLENBQUM7Z0JBQzNCLEtBQUssUUFBUTtvQkFDWCxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDakMsTUFBTTtnQkFDUixLQUFLLFVBQVU7b0JBQ2IsVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUNyQyxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDbEMsTUFBTTtnQkFDUjtvQkFDRSxNQUFNO1lBQ1YsQ0FBQztZQUNELElBQUcsVUFBVSxJQUFJLFNBQVMsRUFDMUIsQ0FBQztnQkFDQyxhQUFhLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztnQkFDekMsSUFBRyxNQUFNLENBQUMsYUFBYSxLQUFLLFFBQVE7b0JBQ2xDLE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUE7WUFDckMsQ0FBQztZQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQzFCLEVBQUUsR0FBRyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsT0FBTyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO2dGQTNVVSxlQUFlO29FQUFmLGVBQWU7Ozs7OztZQUh4Qiw0QkFBaUU7O1lBQXJDLGdEQUE4Qjs7O2lGQUdqRCxlQUFlO2NBUDNCLFNBQVM7ZUFBQztnQkFDVCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsUUFBUSxFQUFFOztHQUVUO2FBQ0Y7eUdBS1UsTUFBTTtrQkFBZCxLQUFLO1lBTUcsY0FBYztrQkFBdEIsS0FBSztZQUtJLFlBQVk7a0JBQXJCLE1BQU07WUFXSCxxQkFBcUI7a0JBRHhCLFNBQVM7bUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOztrRkF6QjFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMTQgSnVuIDIwMjRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgSUNhbmNlbENhbGxiYWNrRGF0YSxcclxuICBJQ2xpZW50QXV0aG9yaXplQ2FsbGJhY2tEYXRhLFxyXG4gIElDcmVhdGVPcmRlckNhbGxiYWNrQWN0aW9ucyxcclxuICBJSW5pdENhbGxiYWNrRGF0YSxcclxuICBJT25BcHByb3ZlQ2FsbGJhY2tBY3Rpb25zLFxyXG4gIElPbkFwcHJvdmVDYWxsYmFja0RhdGEsXHJcbiAgSU9uQ2xpY2tDYWxsYmFja0FjdGlvbnMsXHJcbiAgSU9uSW5pdENhbGxiYWNrQWN0aW9ucyxcclxuICBJT25TaGlwcGluZ0NoYW5nZUFjdGlvbnMsXHJcbiAgSU9uU2hpcHBpbmdDaGFuZ2VEYXRhLFxyXG4gIElQYXlQYWxDb25maWcsXHJcbiAgSUNyZWF0ZVN1YnNjcmlwdGlvbkNhbGxiYWNrQWN0aW9ucyxcclxuICBJQ3JlYXRlU3Vic2NyaXB0aW9uQ2FsbGJhY2tEYXRhLFxyXG59IGZyb20gXCIuLi9tb2RlbHMvcGF5cGFsLW1vZGVsc1wiO1xyXG5pbXBvcnQgeyBQYXlQYWxTY3JpcHRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3BheXBhbC1zY3JpcHQuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc2VsZWN0b3I6IFwiYW5hdG9seS1wYXlwYWxcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiAjcGF5UGFsQnV0dG9uQ29udGFpbmVyIFtpZF09XCJwYXlQYWxCdXR0b25Db250YWluZXJJZFwiPjwvZGl2PlxyXG4gIGAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXlQYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgcGF5cGFsLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNvbmZpZz86IElQYXlQYWxDb25maWc7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGVuYWJsZWQsIHBheXBhbCBTREsgc2NyaXB0IHdpbGwgYmUgbG9hZGVkLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZSBQYXlQYWwgY29tcG9uZW50cyBvbiB0aGUgc2FtZSBwYWdlXHJcbiAgICogc2hhcmluZyBiYXNlIGNvbmZpZ3VyYXRpb24uIEluIHN1Y2ggYSBjYXNlIG9ubHkgYSBzaW5nbGUgY29tcG9uZW50IG1heSByZWdpc3RlciBzY3JpcHQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVnaXN0ZXJTY3JpcHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gcGF5cGFsIHNjcmlwdCBpcyBsb2FkZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2NyaXB0TG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElkIG9mIHRoZSBlbGVtZW50IHdoZXJlIFBheVBhbCBidXR0b24gd2lsbCBiZSByZW5kZXJlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwYXlQYWxCdXR0b25Db250YWluZXJJZD86IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBwYXlQYWxCdXR0b25Db250YWluZXJFbGVtPzogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwicGF5UGFsQnV0dG9uQ29udGFpbmVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHNldCBwYXlQYWxCdXR0b25Db250YWluZXIoY29udGVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJFbGVtID0gY29udGVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgcGF5cGFsIHNob3VsZCBiZSBpbml0aWFsaXplZCAocmVxdWlyZWQgZm9yIGhhbmRsaW5nIHNjcmlwdCBsb2FkIGV2ZW50cyBhbmQgYXZhaWxhYmlsaXR5IG9mIERPTSBlbGVtZW50KVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBheVBhbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byBQYXlQYWwgZ2xvYmFsIEFQSVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGF5UGFsOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYXlwYWxTY3JpcHRTZXJ2aWNlOiBQYXlQYWxTY3JpcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lcklkKSB7XHJcbiAgICAgIHRoaXMucGF5UGFsQnV0dG9uQ29udGFpbmVySWQgPSB0aGlzLmdlbmVyYXRlRWxlbWVudElkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlyc3QgdGltZSBjb25maWcgc2V0dXBcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgLy9jb25zdCBuYW1lID0gJ1BheVBhbENvbmZpZyc7XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBpZiAoY29uZmlnICYmIHRoaXMucmVnaXN0ZXJTY3JpcHQpIHtcclxuICAgICAgICB0aGlzLmluaXRQYXlQYWxTY3JpcHQoY29uZmlnLCAocGF5UGFsKSA9PiB7XHJcbiAgICAgICAgICAvLyBzdG9yZSByZWZlcmVuY2UgdG8gcGF5cGFsIGdsb2JhbCBzY3JpcHRcclxuICAgICAgICAgIHRoaXMucGF5UGFsID0gcGF5UGFsO1xyXG4gICAgICAgICAgdGhpcy5kb1BheVBhbENoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGFuZ2VzIHRvIGNvbmZpZ1xyXG4gICAgaWYgKCFjaGFuZ2VzWydjb25maWcnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgdGhpcy5yZWluaXRpYWxpemUoY29uZmlnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXlwYWxTY3JpcHRTZXJ2aWNlLmRlc3Ryb3lQYXlQYWxTY3JpcHQoKTtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZG9QYXlQYWxDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY3VzdG9tSW5pdChwYXlQYWw6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXlQYWwgPSBwYXlQYWw7XHJcbiAgICB0aGlzLmRvUGF5UGFsQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlaW5pdGlhbGl6ZShjb25maWc6IElQYXlQYWxDb25maWcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgdGhpcy5wYXlQYWwgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnBheXBhbFNjcmlwdFNlcnZpY2UuZGVzdHJveVBheVBhbFNjcmlwdCgpO1xyXG4gICAgdGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJJZCA9IHRoaXMuZ2VuZXJhdGVFbGVtZW50SWQoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBheVBhbCA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMucGF5UGFsQnV0dG9uQ29udGFpbmVyRWxlbSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lckVsZW0ubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICB0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lckVsZW0ubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZChcclxuICAgICAgICAgICAgdGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJFbGVtLm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XHJcbiAgICAgIGlmICghdGhpcy5wYXlQYWwpIHtcclxuICAgICAgICB0aGlzLmluaXRQYXlQYWxTY3JpcHQodGhpcy5jb25maWcsIChwYXlQYWwpID0+IHtcclxuICAgICAgICAgIC8vIHN0b3JlIHJlZmVyZW5jZSB0byBwYXlwYWwgZ2xvYmFsIHNjcmlwdFxyXG4gICAgICAgICAgdGhpcy5wYXlQYWwgPSBwYXlQYWw7XHJcbiAgICAgICAgICB0aGlzLmRvUGF5UGFsQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRvUGF5UGFsQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkb1BheVBhbENoZWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmluaXRpYWxpemVQYXlQYWwgJiZcclxuICAgICAgdGhpcy5jb25maWcgJiZcclxuICAgICAgdGhpcy5wYXlQYWwgJiZcclxuICAgICAgdGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJFbGVtXHJcbiAgICApIHtcclxuICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgaWQgaXMgYWxzbyBzZXRcclxuICAgICAgaWYgKHRoaXMucGF5UGFsQnV0dG9uQ29udGFpbmVyRWxlbS5uYXRpdmVFbGVtZW50LmlkKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGF5UGFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbml0UGF5UGFsKHRoaXMuY29uZmlnLCB0aGlzLnBheVBhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFBheVBhbFNjcmlwdChcclxuICAgIGNvbmZpZzogSVBheVBhbENvbmZpZyxcclxuICAgIGluaXRQYXlQYWw6IChwYXlwYWw6IGFueSkgPT4gdm9pZFxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXlwYWxTY3JpcHRTZXJ2aWNlLnJlZ2lzdGVyUGF5UGFsU2NyaXB0KFxyXG4gICAgICB7XHJcbiAgICAgICAgY2xpZW50SWQ6IGNvbmZpZy5jbGllbnRJZCxcclxuICAgICAgICBsb2NhbGU6IGNvbmZpZy5hZHZhbmNlZD8ubG9jYWxlLFxyXG4gICAgICAgIGNvbW1pdDpcclxuICAgICAgICAgIGNvbmZpZy5hZHZhbmNlZCAmJiBjb25maWcuYWR2YW5jZWQuY29tbWl0XHJcbiAgICAgICAgICAgID8gY29uZmlnLmFkdmFuY2VkLmNvbW1pdFxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICBjdXJyZW5jeTogY29uZmlnLmN1cnJlbmN5LFxyXG4gICAgICAgIHZhdWx0OiBjb25maWcudmF1bHQsXHJcbiAgICAgICAgaW50ZW50OiBjb25maWcuaW50ZW50LFxyXG4gICAgICAgIGZ1bmRpbmc6IGNvbmZpZy5mdW5kaW5nU291cmNlICE9IHVuZGVmaW5lZCB8fCBjb25maWcuZnVuZGluZ1NvdXJjZSAhPSBudWxsID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIGV4dHJhUGFyYW1zOlxyXG4gICAgICAgICAgY29uZmlnLmFkdmFuY2VkICYmIGNvbmZpZy5hZHZhbmNlZC5leHRyYVF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgID8gY29uZmlnLmFkdmFuY2VkLmV4dHJhUXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgOiBbXSxcclxuICAgICAgfSxcclxuICAgICAgKHBheXBhbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2NyaXB0TG9hZGVkLm5leHQocGF5cGFsKTtcclxuICAgICAgICBpbml0UGF5UGFsKHBheXBhbCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlRWxlbWVudElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYG5neC1jYXB0Y2hhLWlkLSR7dGhpcy5nZW5lcmF0ZUd1aWQoKX1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0UGF5UGFsKGNvbmZpZzogSVBheVBhbENvbmZpZywgcGF5cGFsOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIFJ1bm5pbmcgb3V0c2lkZSBhbmd1bGFyIHpvbmUgcHJldmVudHMgaW5maW5pdGUgbmdEb0NoZWNrIGxpZmVjeWNsZSBjYWxsc1xyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5wYXlwYWwuY29tL2RvY3MvY2hlY2tvdXQvaW50ZWdyYXRlLyMyLWFkZC10aGUtcGF5cGFsLXNjcmlwdC10by15b3VyLXdlYi1wYWdlXHJcbiAgICAgIGNvbnN0IGNyZWF0ZU9yZGVyID0gKGRhdGE6IGFueSwgYWN0aW9uczogSUNyZWF0ZU9yZGVyQ2FsbGJhY2tBY3Rpb25zKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLmNyZWF0ZU9yZGVyT25DbGllbnQgJiYgY29uZmlnLmNyZWF0ZU9yZGVyT25TZXJ2ZXIpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEJvdGggJ2NyZWF0ZU9yZGVyT25DbGllbnQnIGFuZCAnY3JlYXRlT3JkZXJPblNlcnZlcicgYXJlIGRlZmluZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNob29zZSBvbmUgb3IgdGhlIG90aGVyLmApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghY29uZmlnLmNyZWF0ZU9yZGVyT25DbGllbnQgJiYgIWNvbmZpZy5jcmVhdGVPcmRlck9uU2VydmVyKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBOZWl0aGVyICdjcmVhdGVPcmRlck9uQ2xpZW50JyBvciAnY3JlYXRlT3JkZXJPblNlcnZlcicgYXJlIGRlZmluZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY3JlYXRlIG9yZGVyLmApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjb25maWcuY3JlYXRlT3JkZXJPbkNsaWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYWN0aW9ucy5vcmRlci5jcmVhdGUoY29uZmlnLmNyZWF0ZU9yZGVyT25DbGllbnQoZGF0YSkpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjb25maWcuY3JlYXRlT3JkZXJPblNlcnZlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmNyZWF0ZU9yZGVyT25TZXJ2ZXIoZGF0YSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgc3RhdGUgZm9yICdjcmVhdGVPcmRlcicuYCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGNyZWF0ZVN1YnNjcmlwdGlvbiA9IChcclxuICAgICAgICBkYXRhOiBJQ3JlYXRlU3Vic2NyaXB0aW9uQ2FsbGJhY2tEYXRhLFxyXG4gICAgICAgIGFjdGlvbnM6IElDcmVhdGVTdWJzY3JpcHRpb25DYWxsYmFja0FjdGlvbnNcclxuICAgICAgKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLmNyZWF0ZVN1YnNjcmlwdGlvbk9uQ2xpZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLnN1YnNjcmlwdGlvbi5jcmVhdGUoXHJcbiAgICAgICAgICAgICAgY29uZmlnLmNyZWF0ZVN1YnNjcmlwdGlvbk9uQ2xpZW50KGRhdGEpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IG9uU2hpcHBpbmdDaGFuZ2UgPSAoXHJcbiAgICAgICAgZGF0YTogSU9uU2hpcHBpbmdDaGFuZ2VEYXRhLFxyXG4gICAgICAgIGFjdGlvbnM6IElPblNoaXBwaW5nQ2hhbmdlQWN0aW9uc1xyXG4gICAgICApID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIGlmIChjb25maWcub25TaGlwcGluZ0NoYW5nZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLm9uU2hpcHBpbmdDaGFuZ2UoZGF0YSwgYWN0aW9ucyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBidXR0b25zQ29uZmlnID0ge1xyXG4gICAgICAgIHN0eWxlOiBjb25maWcuc3R5bGUsXHJcbiAgICAgICAgZnVuZGluZ1NvdXJjZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIG9uQXBwcm92ZTogKFxyXG4gICAgICAgICAgZGF0YTogSU9uQXBwcm92ZUNhbGxiYWNrRGF0YSxcclxuICAgICAgICAgIGFjdGlvbnM6IElPbkFwcHJvdmVDYWxsYmFja0FjdGlvbnNcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnLm9uQXBwcm92ZSkge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5vbkFwcHJvdmUoZGF0YSwgYWN0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNhcHR1cmUgb24gc2VydmVyXHJcbiAgICAgICAgICAgIGlmIChjb25maWcuYXV0aG9yaXplT25TZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmF1dGhvcml6ZU9uU2VydmVyKGRhdGEsIGFjdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBjYXB0dXJlIG9uIGNsaWVudFxyXG4gICAgICAgICAgICBjb25zdCBvbkNsaWVudEF1dGhvcml6YXRpb24gPSBjb25maWcub25DbGllbnRBdXRob3JpemF0aW9uO1xyXG4gICAgICAgICAgICBpZiAob25DbGllbnRBdXRob3JpemF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgYWN0aW9ucy5vcmRlclxyXG4gICAgICAgICAgICAgICAgLmNhcHR1cmUoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRldGFpbHM6IElDbGllbnRBdXRob3JpemVDYWxsYmFja0RhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWVudEF1dGhvcml6YXRpb24oZGV0YWlscyk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25FcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWcub25FcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5vbkVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkNhbmNlbDogKGRhdGE6IElDYW5jZWxDYWxsYmFja0RhdGEsIGFjdGlvbnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5vbkNhbmNlbCkge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5vbkNhbmNlbChkYXRhLCBhY3Rpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkNsaWNrOiAoZGF0YTogYW55LCBhY3Rpb25zOiBJT25DbGlja0NhbGxiYWNrQWN0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnLm9uQ2xpY2soZGF0YSwgYWN0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25Jbml0OiAoZGF0YTogSUluaXRDYWxsYmFja0RhdGEsIGFjdGlvbnM6IElPbkluaXRDYWxsYmFja0FjdGlvbnMpID0+IHtcclxuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWcub25Jbml0KSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnLm9uSW5pdChkYXRhLCBhY3Rpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9ucyBpZiB0aGV5J3ZlIGJlZW4gY3JlYXRlZCBpbiB0aGUgY29uZmlnIG9iamVjdFxyXG4gICAgICAgIC8vIFRoZSBBUEkgb25seSBhbGxvd3Mgb25lIG9mIHRoZSB0d28gdG8gYmUgc2V0XHJcbiAgICAgICAgLi4uKChjb25maWcuY3JlYXRlT3JkZXJPbkNsaWVudCB8fCBjb25maWcuY3JlYXRlT3JkZXJPblNlcnZlcikgJiYge1xyXG4gICAgICAgICAgY3JlYXRlT3JkZXIsXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgLi4uKGNvbmZpZy5jcmVhdGVTdWJzY3JpcHRpb25PbkNsaWVudCAmJiB7IGNyZWF0ZVN1YnNjcmlwdGlvbiB9KSxcclxuICAgICAgICAvLyBUaGUgb25TaGlwcGluZ0NoYW5nZSBjYWxsYmFjayBjYW5ub3QgYmUgdXNlZCB3aXRoIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICAvLyBzbyB3ZSBvbmx5IGFkZCBpdCBpZiBpdCBpcyBzZXRcclxuICAgICAgICAuLi4oY29uZmlnLm9uU2hpcHBpbmdDaGFuZ2UgJiYgeyBvblNoaXBwaW5nQ2hhbmdlIH0pLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgbGV0IGZ1bmRTb3VyY2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHN3aXRjaChjb25maWcuZnVuZGluZ1NvdXJjZSl7XHJcbiAgICAgICAgY2FzZSBcIlBBWVBBTFwiOlxyXG4gICAgICAgICAgZnVuZFNvdXJjZSA9IHBheXBhbC5GVU5ESU5HLlBBWVBBTDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJDQVJEXCI6XHJcbiAgICAgICAgICBmdW5kU291cmNlID0gcGF5cGFsLkZVTkRJTkcuQ0FSRDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJQQVlMQVRFUlwiOlxyXG4gICAgICAgICAgZnVuZFNvdXJjZSA9IHBheXBhbC5GVU5ESU5HLlBBWUxBVEVSO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIkNSRURJVFwiOlxyXG4gICAgICAgICAgZnVuZFNvdXJjZSA9IHBheXBhbC5GVU5ESU5HLkNSRURJVDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJWRU5NT1wiOlxyXG4gICAgICAgICAgZnVuZFNvdXJjZSA9IHBheXBhbC5GVU5ESU5HLlZFTk1PO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGZ1bmRTb3VyY2UgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB7XHJcbiAgICAgICAgYnV0dG9uc0NvbmZpZy5mdW5kaW5nU291cmNlID0gZnVuZFNvdXJjZTtcclxuICAgICAgICBpZihjb25maWcuZnVuZGluZ1NvdXJjZSAhPT0gXCJQQVlQQUxcIilcclxuICAgICAgICAgIGRlbGV0ZSBidXR0b25zQ29uZmlnLnN0eWxlPy5jb2xvclxyXG4gICAgICB9XHJcbiAgICAgIHBheXBhbC5CdXR0b25zKGJ1dHRvbnNDb25maWcpLnJlbmRlcihgIyR7dGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJJZH1gKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUd1aWQoKTogc3RyaW5nIHtcclxuICAgIGxldCBkID0gbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcbiAgICAgIGQyID0gKHBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdyAmJiBwZXJmb3JtYW5jZS5ub3coKSAqIDEwMDApIHx8IDA7XHJcbiAgICByZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XHJcbiAgICAgIGxldCByID0gTWF0aC5yYW5kb20oKSAqIDE2O1xyXG4gICAgICBpZiAoZCA+IDApIHtcclxuICAgICAgICByID0gKGQgKyByKSAlIDE2IHwgMDtcclxuICAgICAgICBkID0gTWF0aC5mbG9vcihkIC8gMTYpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHIgPSAoZDIgKyByKSAlIDE2IHwgMDtcclxuICAgICAgICBkMiA9IE1hdGguZmxvb3IoZDIgLyAxNik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChjID09IFwieFwiID8gciA6IChyICYgMHg3KSB8IDB4OCkudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,17 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny vadim@osovitny.com
8
- Anatoly Osovitny anatoly@osovitny.com
9
-
10
- Created:
11
- 14 Jun 2024
12
-
13
- Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
- </file>
15
- */
16
- export {};
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5cGFsLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9wYXltZW50cy9QYXlQYWwvbW9kZWxzL3BheXBhbC1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0UiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMTQgSnVuIDIwMjRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYXlQYWxDb25maWcge1xyXG4gIC8qKlxyXG4gICAqIEN1cnJlbmN5IC0gRGVmYXVsdHMgdG8gVVNEIGlmIG5vdCBwcm92aWRlZFxyXG4gICAqL1xyXG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBVc2Ugd2hlbiBjcmVhdGluZyBvcmRlciBvbiBjbGllbnRcclxuICAgKi9cclxuICBjcmVhdGVPcmRlck9uQ2xpZW50PzogKGRhdGE6IGFueSkgPT4gSUNyZWF0ZU9yZGVyUmVxdWVzdDtcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIHdoZW4gY3JlYXRpbmcgc3Vic2NyaXB0aW9uIG9uIGNsaWVudFxyXG4gICAqL1xyXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbk9uQ2xpZW50PzogKGRhdGE6IGFueSkgPT4gSUNyZWF0ZVN1YnNjcmlwdGlvblJlcXVlc3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZSBmb3IgY3JlYXRpbmcgb3JkZXJzIG9uIHNlcnZlci4gUGF5UGFsIGV4cGVjdHMgeW91IHRvIHJldHVybiAnb3JkZXJJZCcgaW4gdGhpcyBtZXRob2RcclxuICAgKi9cclxuICBjcmVhdGVPcmRlck9uU2VydmVyPzogKGRhdGE6IGFueSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xyXG5cclxuICAvKipcclxuICAgKiBBZHZhbmNlZCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgYWR2YW5jZWQ/OiBJQWR2YW5jZWRDb25maWd1cmF0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBDbGllbnQgaWRcclxuICAgKi9cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBTaGlwcGluZyBjYWxsYmFja1xyXG4gICAqIHNlZSBodHRwczovL2RldmVsb3Blci5wYXlwYWwuY29tL2RvY3MvY2hlY2tvdXQvaW50ZWdyYXRpb24tZmVhdHVyZXMvc2hpcHBpbmctY2FsbGJhY2svXHJcbiAgICovXHJcbiAgb25TaGlwcGluZ0NoYW5nZT86IE9uU2hpcHBpbmdDaGFuZ2VDYWxsYmFjaztcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gJ29uQXBwcm92ZScgZXZlbnQgb2NjdXJzXHJcbiAgICovXHJcbiAgb25BcHByb3ZlPzogKGRhdGE6IElPbkFwcHJvdmVDYWxsYmFja0RhdGEsIGFjdGlvbnM6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gYXV0aG9yaXphdGlvbiBvbiBjbGllbnQgc3VjY2VlZHNcclxuICAgKi9cclxuICBvbkNsaWVudEF1dGhvcml6YXRpb24/OiAoYXV0aG9yaXphdGlvbjogSUNsaWVudEF1dGhvcml6ZUNhbGxiYWNrRGF0YSkgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogSW1wbGVtZW50IGZvciBhdXRob3JpemluZyBvbiBzZXJ2ZXIgc2lkZVxyXG4gICAqL1xyXG4gIGF1dGhvcml6ZU9uU2VydmVyPzogKFxyXG4gICAgZGF0YTogSU9uQXBwcm92ZUNhbGxiYWNrRGF0YSxcclxuICAgIGFjdGlvbnM6IGFueVxyXG4gICkgPT4gUHJvbWlzZTxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBCdXR0b24gc3R5bGUgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHN0eWxlPzogSVBheVBhbEJ1dHRvblN0eWxlO1xyXG5cclxuICAvKipcclxuICAgKiBFcnJvciBoYW5kbGVyXHJcbiAgICovXHJcbiAgb25FcnJvcj86IChlcnI6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2xpY2sgaGFuZGxlclxyXG4gICAqL1xyXG4gIG9uQ2xpY2s/OiAoZGF0YTogYW55LCBhY3Rpb25zOiBJT25DbGlja0NhbGxiYWNrQWN0aW9ucykgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIGhhbmRsZXJcclxuICAgKi9cclxuICBvbkNhbmNlbD86IChkYXRhOiBJQ2FuY2VsQ2FsbGJhY2tEYXRhLCBhY3Rpb25zOiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXQgaGFuZGxlci5cclxuICAgKiBjYW4gYmUgdXNlZCBmb3IgdmFsaWRhdGlvbiwgc2VlOiBodHRwczovL2RldmVsb3Blci5wYXlwYWwuY29tL2RvY3MvY2hlY2tvdXQvaW50ZWdyYXRpb24tZmVhdHVyZXMvdmFsaWRhdGlvbi8jXHJcbiAgICovXHJcbiAgb25Jbml0PzogKGRhdGE6IElJbml0Q2FsbGJhY2tEYXRhLCBhY3Rpb25zOiBJT25Jbml0Q2FsbGJhY2tBY3Rpb25zKSA9PiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgc3Vic2NyaXB0aW9uIGhhbmRsZXJcclxuICAgKiBodHRwczovL2RldmVsb3Blci5wYXlwYWwuY29tL2RvY3Mvc3Vic2NyaXB0aW9ucy9pbnRlZ3JhdGUvXHJcbiAgICpcclxuICAgKiBOb3RlOiB0aGUgdmF1bHQgcHJvcGVydHkgaW4gdGhlIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gYWxzbyBoYXMgdG8gYmUgc2V0IHRvIHRydWVcclxuICAgKi9cclxuICBjcmVhdGVTdWJzY3JpcHRpb24/OiAoZGF0YTogYW55KSA9PiBJQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdDtcclxuXHJcbiAgLyoqXHJcbiAgICogVmF1bHQgLSBtdXN0IGJlIHNldCB0byB0cnVlIHdoZW4gY3JlYXRpbmcgc3Vic2NyaXB0aW9uc1xyXG4gICAqL1xyXG4gIHZhdWx0PzogVHJ1ZUZhbHNlO1xyXG4gIGludGVudD86IE9yZGVySW50ZW50O1xyXG5cclxuICAvKlxyXG4gICAgU2VsZWN0IHR5cGUgb2YgZnVuZGluZyBzb3VyY2UsIHVzZSBpdCB3aGVuIHlvdSBuZWVkIHNldCB0eXBlIG9mIGJ1dHRvbiB5b3Ugd2FudCB0byBzZWUsIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIucGF5cGFsLmNvbS9kb2NzL2NoZWNrb3V0L3N0YW5kYXJkL2N1c3RvbWl6ZS9zdGFuZGFsb25lLWJ1dHRvbnMvXHJcbiAgKi9cclxuICBmdW5kaW5nU291cmNlPzogXCJQQVlQQUxcIiB8IFwiQ0FSRFwiIHwgXCJQQVlMQVRFUlwiIHwgXCJDUkVESVRcIiB8IFwiVkVOTU9cIjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVHJ1ZUZhbHNlID0gXCJ0cnVlXCIgfCBcImZhbHNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYXlQYWxVcmxDb25maWcge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgY3VycmVuY3k/OiBzdHJpbmc7XHJcbiAgZnVuZGluZz86IGJvb2xlYW47XHJcbiAgY29tbWl0PzogVHJ1ZUZhbHNlO1xyXG4gIHZhdWx0PzogVHJ1ZUZhbHNlO1xyXG4gIGludGVudD86IE9yZGVySW50ZW50O1xyXG4gIGxvY2FsZT86IHN0cmluZztcclxuICBleHRyYVBhcmFtcz86IElRdWVyeVBhcmFtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9yZGVyRGV0YWlscyB7XHJcbiAgY3JlYXRlX3RpbWU6IHN0cmluZztcclxuICB1cGRhdGVfdGltZTogc3RyaW5nO1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgaW50ZW50OiBPcmRlckludGVudDtcclxuICBwYXllcjogSVBheWVyO1xyXG4gIHN0YXR1czogT3JkZXJTdGF0dXM7XHJcbiAgbGlua3M6IElMaW5rRGVzY3JpcHRpb25bXTtcclxuICBwdXJjaGFzZV91bml0czogSVB1cmNoYXNlVW5pdFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnRBdXRob3JpemVDYWxsYmFja0RhdGEgZXh0ZW5kcyBJT3JkZXJEZXRhaWxzIHtcclxuICBsaW5rczogSUxpbmtEZXNjcmlwdGlvbltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMaW5rRGVzY3JpcHRpb24ge1xyXG4gIGhyZWY6IHN0cmluZztcclxuICByZWw6IFN0cmluZztcclxuICBtZXRob2Q/OiBMaW5rTWV0aG9kO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElRdWVyeVBhcmFtIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT25TaGlwcGluZ0NoYW5nZUNhbGxiYWNrID0gKFxyXG4gIGRhdGE6IElPblNoaXBwaW5nQ2hhbmdlRGF0YSxcclxuICBhY3Rpb25zOiBJT25TaGlwcGluZ0NoYW5nZUFjdGlvbnNcclxuKSA9PiBhbnk7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElPblNoaXBwaW5nQ2hhbmdlRGF0YSB7XHJcbiAgcGF5bWVudFRva2VuOiBzdHJpbmc7XHJcbiAgc2hpcHBpbmdfYWRkcmVzczogYW55O1xyXG4gIHNlbGVjdGVkX3NoaXBwaW5nX21ldGhvZD86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT25TaGlwcGluZ0NoYW5nZUFjdGlvbnMge1xyXG4gIHJlc29sdmU6ICgpID0+IGFueTtcclxuICByZWplY3Q6ICgpID0+IGFueTtcclxuICBwYXRjaDogKCkgPT4gYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBMaW5rTWV0aG9kID1cclxuICB8IFwiR0VUXCJcclxuICB8IFwiUE9TVFwiXHJcbiAgfCBcIlBVVFwiXHJcbiAgfCBcIkRFTEVURVwiXHJcbiAgfCBcIkhFQURcIlxyXG4gIHwgXCJDT05ORUNUXCJcclxuICB8IFwiT1BUSU9OU1wiXHJcbiAgfCBcIlBBVENIXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBZHZhbmNlZENvbmZpZ3VyYXRpb24ge1xyXG4gIGNvbW1pdD86IFRydWVGYWxzZTtcclxuICBsb2NhbGU/OiBzdHJpbmc7XHJcbiAgZXh0cmFRdWVyeVBhcmFtcz86IElRdWVyeVBhcmFtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9uQXBwcm92ZUNhbGxiYWNrRGF0YSB7XHJcbiAgb3JkZXJJRDogc3RyaW5nO1xyXG4gIHBheWVySUQ6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb25JRDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDcmVhdGVPcmRlckNhbGxiYWNrQWN0aW9ucyB7XHJcbiAgb3JkZXI6IHtcclxuICAgIGNyZWF0ZTogKG9yZGVyOiBJQ3JlYXRlT3JkZXJSZXF1ZXN0KSA9PiBQcm9taXNlPGFueT47XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ2FuY2VsQ2FsbGJhY2tEYXRhIHtcclxuICBvcmRlcklEOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9uQXBwcm92ZUNhbGxiYWNrQWN0aW9ucyB7XHJcbiAgcmVkaXJlY3Q6ICgpID0+IHZvaWQ7XHJcbiAgcmVzdGFydDogKCkgPT4gdm9pZDtcclxuICBvcmRlcjoge1xyXG4gICAgYXV0aG9yaXplOiAoKSA9PiBQcm9taXNlPGFueT47XHJcbiAgICBjYXB0dXJlOiAoKSA9PiBQcm9taXNlPGFueT47XHJcbiAgICBnZXQ6ICgpID0+IFByb21pc2U8SU9yZGVyRGV0YWlscz47XHJcbiAgICBwYXRjaDogKCkgPT4gUHJvbWlzZTxhbnk+O1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9uSW5pdENhbGxiYWNrQWN0aW9ucyB7XHJcbiAgZW5hYmxlOiAoKSA9PiB2b2lkO1xyXG4gIGRpc2FibGU6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNyZWF0ZVN1YnNjcmlwdGlvbkNhbGxiYWNrQWN0aW9ucyB7XHJcbiAgc3Vic2NyaXB0aW9uOiB7XHJcbiAgICBjcmVhdGU6IChzdWJzY3JpcHRpb246IElDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0KSA9PiBQcm9taXNlPGFueT47XHJcbiAgICByZXZpc2U6IChcclxuICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyxcclxuICAgICAgc3Vic2NyaXB0aW9uOiBJQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdFxyXG4gICAgKSA9PiBQcm9taXNlPGFueT47XHJcbiAgfTtcclxufVxyXG5cclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5LWludGVyZmFjZVxyXG5leHBvcnQgaW50ZXJmYWNlIElJbml0Q2FsbGJhY2tEYXRhIHt9XHJcblxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNyZWF0ZVN1YnNjcmlwdGlvbkNhbGxiYWNrRGF0YSB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT25DbGlja0NhbGxiYWNrQWN0aW9ucyB7XHJcbiAgcmVzb2x2ZTogKCkgPT4gdm9pZDtcclxuICByZWplY3Q6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBheVBhbEJ1dHRvblN0eWxlIHtcclxuICBsYWJlbD86XHJcbiAgICB8IFwicGF5cGFsXCJcclxuICAgIHwgXCJjaGVja291dFwiXHJcbiAgICB8IFwicGF5XCJcclxuICAgIHwgXCJpbnN0YWxsbWVudFwiXHJcbiAgICB8IFwiYnV5bm93XCJcclxuICAgIHwgXCJzdWJzY3JpYmVcIjtcclxuICBzaGFwZT86IFwicGlsbFwiIHwgXCJyZWN0XCI7XHJcbiAgY29sb3I/OiBcImdvbGRcIiB8IFwiYmx1ZVwiIHwgXCJzaWx2ZXJcIiB8IFwid2hpdGVcIiB8IFwiYmxhY2tcIjtcclxuICBsYXlvdXQ/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcclxuICB0YWdsaW5lPzogYm9vbGVhbjtcclxuICBoZWlnaHQ/OiBudW1iZXI7XHJcbiAgZnVuZGluZ2ljb25zPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ3JlYXRlT3JkZXJSZXF1ZXN0IHtcclxuICBpbnRlbnQ6IE9yZGVySW50ZW50O1xyXG4gIHB1cmNoYXNlX3VuaXRzOiBJUHVyY2hhc2VVbml0W107XHJcblxyXG4gIHBheWVyPzogSVBheWVyO1xyXG4gIGFwcGxpY2F0aW9uX2NvbnRleHQ/OiBJQXBwbGljYXRpb25Db250ZXh0O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0IHtcclxuICBwbGFuX2lkOiBzdHJpbmc7XHJcbiAgcXVhbnRpdHk/OiBudW1iZXI7XHJcbiAgY3VzdG9tX2lkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBheWVyIHtcclxuICBuYW1lPzogSVBhcnR5TmFtZTtcclxuICBlbWFpbF9hZGRyZXNzPzogc3RyaW5nO1xyXG4gIHBheWVyX2lkPzogc3RyaW5nO1xyXG4gIGJpcnRoX2RhdGU/OiBzdHJpbmc7XHJcbiAgdGF4X2luZm8/OiBJVGF4SW5mbztcclxuICBhZGRyZXNzPzogSUFkZHJlc3NQb3J0YWJsZTtcclxuICBwaG9uZT86IElQaG9uZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXBwbGljYXRpb25Db250ZXh0IHtcclxuICBicmFuZF9uYW1lPzogc3RyaW5nO1xyXG4gIGxvY2FsZT86IHN0cmluZztcclxuICBsYW5kaW5nX3BhZ2U/OiBQYXlwYWxMYW5kaW5nUGFnZTtcclxuICBzaGlwcGluZ19wcmVmZXJlbmNlPzogU2hpcHBpbmdQcmVmZXJlbmNlO1xyXG4gIHVzZXJfYWN0aW9uPzogUGF5UGFsVXNlckFjdGlvbjtcclxuICBwYXltZW50X21ldGhvZD86IElQYXltZW50TWV0aG9kO1xyXG4gIHJldHVybl91cmw/OiBzdHJpbmc7XHJcbiAgY2FuY2VsX3VybD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGF5bWVudE1ldGhvZCB7XHJcbiAgcGF5ZXJfc2VsZWN0ZWQ/OiBQYXllclNlbGVjdGVkO1xyXG4gIHBheWVlX3ByZWZlcnJlZD86IFBheWVlUHJlZmVycmVkO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQYXllZVByZWZlcnJlZCA9IFwiVU5SRVNUUklDVEVEXCIgfCBcIklNTUVESUFURV9QQVlNRU5UX1JFUVVJUkVEXCI7XHJcblxyXG5leHBvcnQgdHlwZSBQYXllclNlbGVjdGVkID0gXCJQQVlQQUxfQ1JFRElUXCIgfCBcIlBBWVBBTFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgUGF5UGFsVXNlckFjdGlvbiA9IFwiQ09OVElOVUVcIiB8IFwiUEFZX05PV1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgU2hpcHBpbmdQcmVmZXJlbmNlID1cclxuICB8IFwiR0VUX0ZST01fRklMRVwiXHJcbiAgfCBcIk5PX1NISVBQSU5HXCJcclxuICB8IFwiU0VUX1BST1ZJREVEX0FERFJFU1NcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFBheXBhbExhbmRpbmdQYWdlID0gXCJMT0dJTlwiIHwgXCJCSUxMSU5HXCI7XHJcblxyXG5leHBvcnQgdHlwZSBPcmRlckludGVudCA9IFwiQ0FQVFVSRVwiIHwgXCJBVVRIT1JJWkVcIiB8IFwic3Vic2NyaXB0aW9uXCI7XHJcblxyXG5leHBvcnQgdHlwZSBEaXNidXJzZW1lbnRNb2RlID0gXCJJTlNUQU5UXCIgfCBcIkRFTEFZRURcIjtcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1DYXRlZ29yeSA9IFwiRElHSVRBTF9HT09EU1wiIHwgXCJQSFlTSUNBTF9HT09EU1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgUGhvbmVUeXBlID0gXCJGQVhcIiB8IFwiSE9NRVwiIHwgXCJNT0JJTEVcIiB8IFwiT1RIRVJcIiB8IFwiUEFHRVJcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFRheElkVHlwZSA9IFwiQlJfQ1BGXCIgfCBcIkJSX0NOUEpcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBob25lIHtcclxuICBwaG9uZV90eXBlPzogUGhvbmVUeXBlO1xyXG4gIHBob25lX251bWJlcj86IElQaG9uZU51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGF4SW5mbyB7XHJcbiAgdGF4X2lkOiBzdHJpbmc7XHJcbiAgdGF4X2lkX3R5cGU6IFRheElkVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGhvbmVOdW1iZXIge1xyXG4gIG5hdGlvbmFsX251bWJlcjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQdXJjaGFzZVVuaXQge1xyXG4gIGFtb3VudDogSVVuaXRBbW91bnQ7XHJcblxyXG4gIHJlZmVyZW5jZV9pZD86IHN0cmluZztcclxuICBwYXllZT86IElQYXllZTtcclxuICBwYXltZW50X2luc3RydWN0aW9uPzogSVBheW1lbnRJbnN0cnVjdGlvbnM7XHJcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgY3VzdG9tX2lkPzogc3RyaW5nO1xyXG4gIGludm9pY2VfaWQ/OiBzdHJpbmc7XHJcbiAgc29mdF9kZXNjcmlwdG9yPzogc3RyaW5nO1xyXG4gIGl0ZW1zOiBJVHJhbnNhY3Rpb25JdGVtW107XHJcbiAgc2hpcHBpbmc/OiBJU2hpcHBpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBheWVlIHtcclxuICBlbWFpbF9hZGRyZXNzPzogc3RyaW5nO1xyXG4gIG1lcmNoYW50X2lkPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYXltZW50SW5zdHJ1Y3Rpb25zIHtcclxuICBwbGF0Zm9ybV9mZWVzPzogSVBsYXRmb3JtRmVlW107XHJcbiAgZGlzYnVyc2VtZW50X21vZGU/OiBEaXNidXJzZW1lbnRNb2RlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQbGF0Zm9ybUZlZSB7XHJcbiAgYW1vdW50OiBJVW5pdEFtb3VudDtcclxuICBwYXllZT86IElQYXllZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNhY3Rpb25JdGVtIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdW5pdF9hbW91bnQ6IElVbml0QW1vdW50O1xyXG4gIHF1YW50aXR5OiBzdHJpbmc7XHJcblxyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIHNrdT86IHN0cmluZztcclxuICBjYXRlZ29yeT86IEl0ZW1DYXRlZ29yeTtcclxuICB0YXg/OiBJVGF4O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUYXgge1xyXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVbml0QW1vdW50IHtcclxuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBicmVha2Rvd24/OiBJVW5pdEJyZWFrZG93bjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTW9uZXkge1xyXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVbml0QnJlYWtkb3duIHtcclxuICBpdGVtX3RvdGFsPzogSVVuaXRBbW91bnQ7XHJcbiAgc2hpcHBpbmc/OiBJVW5pdEFtb3VudDtcclxuICBoYW5kbGluZz86IElVbml0QW1vdW50O1xyXG4gIHRheF90b3RhbD86IElVbml0QW1vdW50O1xyXG4gIGluc3VyYW5jZT86IElVbml0QW1vdW50O1xyXG4gIHNoaXBwaW5nX2Rpc2NvdW50PzogSVVuaXRBbW91bnQ7XHJcbiAgZGlzY291bnQ/OiBJTW9uZXk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnR5TmFtZSB7XHJcbiAgcHJlZml4Pzogc3RyaW5nO1xyXG4gIGdpdmVuX25hbWU/OiBzdHJpbmc7XHJcbiAgc3VybmFtZT86IHN0cmluZztcclxuICBtaWRkbGVfbmFtZT86IHN0cmluZztcclxuICBzdWZmaXg/OiBzdHJpbmc7XHJcbiAgYWx0ZXJuYXRlX2Z1bGxfbmFtZT86IHN0cmluZztcclxuICBmdWxsX25hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFkZHJlc3NQb3J0YWJsZSB7XHJcbiAgY291bnRyeV9jb2RlOiBzdHJpbmc7XHJcblxyXG4gIGFkZHJlc3NfbGluZV8xPzogc3RyaW5nO1xyXG4gIGFkZHJlc3NfbGluZV8yPzogc3RyaW5nO1xyXG4gIGFkbWluX2FyZWFfMj86IHN0cmluZztcclxuICBhZG1pbl9hcmVhXzE/OiBzdHJpbmc7XHJcbiAgcG9zdGFsX2NvZGU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNoaXBwaW5nIHtcclxuICBuYW1lPzogSVBhcnR5TmFtZTtcclxuICBhZGRyZXNzPzogSUFkZHJlc3NQb3J0YWJsZTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT3JkZXJTdGF0dXMgPVxyXG4gIHwgXCJBUFBST1ZFRFwiXHJcbiAgfCBcIlNBVkVEXCJcclxuICB8IFwiQ1JFQVRFRFwiXHJcbiAgfCBcIlZPSURFRFwiXHJcbiAgfCBcIkNPTVBMRVRFRFwiO1xyXG4iXX0=