@onepercentio/one-ui 1.3.5 → 1.4.0

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 (229) hide show
  1. package/WebpackConfigs/email-templates.js +99 -0
  2. package/dist/components/AdaptiveButton/AdaptiveButton.js +26 -24
  3. package/dist/components/AdaptiveButton/index.js +25 -22
  4. package/dist/components/AdaptiveContainer/AdaptiveContainer.js +140 -139
  5. package/dist/components/AdaptiveContainer/index.js +25 -22
  6. package/dist/components/AdaptiveDialog/AdaptiveDialog.js +76 -42
  7. package/dist/components/AdaptiveDialog/AdaptiveDialog.module.scss +17 -3
  8. package/dist/components/AdaptiveDialog/index.js +25 -22
  9. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.js +70 -54
  10. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.js +10 -9
  11. package/dist/components/AdaptiveSidebar/index.js +25 -22
  12. package/dist/components/AnchoredTooltip/AnchoredTooltip.js +155 -154
  13. package/dist/components/AnchoredTooltip/AnchoredTooltip.module.scss +13 -10
  14. package/dist/components/AnchoredTooltip/index.js +25 -22
  15. package/dist/components/AnimatedEntrance/AnimatedEntrance.js +154 -121
  16. package/dist/components/AnimatedEntrance/index.js +25 -22
  17. package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.js +80 -40
  18. package/dist/components/AsyncTriggerContainer/index.js +25 -22
  19. package/dist/components/AsyncWrapper/AsyncWrapper.js +34 -16
  20. package/dist/components/AsyncWrapper/index.js +25 -22
  21. package/dist/components/Avatar/Avatar.js +33 -18
  22. package/dist/components/Avatar/index.js +25 -22
  23. package/dist/components/BucketFill/BucketFill.js +49 -36
  24. package/dist/components/BucketFill/index.js +25 -22
  25. package/dist/components/Button/Button.js +30 -22
  26. package/dist/components/Button/index.js +25 -22
  27. package/dist/components/Card/Card.js +17 -10
  28. package/dist/components/Card/index.js +25 -22
  29. package/dist/components/Chart/Chart.js +25 -22
  30. package/dist/components/Chart/Chart.logic.js +10 -9
  31. package/dist/components/Chart/Chart.types.js +5 -2
  32. package/dist/components/Chart/Chart.view.js +174 -98
  33. package/dist/components/Chart/index.js +25 -22
  34. package/dist/components/CheckBox/CheckBox.js +48 -30
  35. package/dist/components/CheckBox/CheckBox.module.scss +5 -0
  36. package/dist/components/CheckBox/index.js +25 -22
  37. package/dist/components/CodeInput/CodeInput.js +75 -93
  38. package/dist/components/CodeInput/index.js +25 -22
  39. package/dist/components/Collapsable/Collapsable.js +164 -134
  40. package/dist/components/Collapsable/index.js +25 -22
  41. package/dist/components/Countdown/Countdown.js +69 -86
  42. package/dist/components/Countdown/index.js +25 -22
  43. package/dist/components/CurrencyInput/CurrencyInput.hook.js +25 -25
  44. package/dist/components/CurrencyInput/CurrencyInput.js +48 -29
  45. package/dist/components/CurrencyInput/index.js +25 -22
  46. package/dist/components/Divider/Divider.js +16 -10
  47. package/dist/components/Divider/index.js +25 -22
  48. package/dist/components/EmailInput/EmailInput.js +37 -23
  49. package/dist/components/EmailInput/index.js +25 -22
  50. package/dist/components/FadeIn/FadeIn.js +57 -51
  51. package/dist/components/FadeIn/index.js +25 -22
  52. package/dist/components/FileInput/FileInput.js +45 -38
  53. package/dist/components/FileInput/View/BigFactory/BigFactory.js +48 -16
  54. package/dist/components/FileInput/View/BigFactory/index.js +25 -22
  55. package/dist/components/FileInput/View/Compact/Compact.js +114 -46
  56. package/dist/components/FileInput/View/Compact/index.js +25 -22
  57. package/dist/components/FileInput/View/View.types.js +5 -2
  58. package/dist/components/FileInput/index.js +25 -22
  59. package/dist/components/FlowController/FlowController.js +56 -25
  60. package/dist/components/FlowController/index.js +25 -22
  61. package/dist/components/Form/Form.hook.js +217 -202
  62. package/dist/components/Form/Form.js +103 -65
  63. package/dist/components/Form/Form.types.js +39 -53
  64. package/dist/components/Form/FormField/Extensions/DateField/DateField.js +68 -53
  65. package/dist/components/Form/FormField/Extensions/DateField/index.js +25 -22
  66. package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.js +81 -78
  67. package/dist/components/Form/FormField/Extensions/PhoneField/index.js +25 -22
  68. package/dist/components/Form/FormField/FormField.js +307 -148
  69. package/dist/components/Form/FormField/FormField.types.js +10 -7
  70. package/dist/components/Form/FormField/index.js +25 -22
  71. package/dist/components/Form/index.js +25 -22
  72. package/dist/components/Freeze/Freeze.js +13 -9
  73. package/dist/components/Freeze/index.js +25 -22
  74. package/dist/components/HSForms/HSForms.js +48 -69
  75. package/dist/components/HSForms/index.js +25 -22
  76. package/dist/components/HeaderCloseBtn/HeaderCloseBtn.js +19 -10
  77. package/dist/components/HeaderCloseBtn/index.js +25 -22
  78. package/dist/components/InfinityScroll/InfinityScroll.js +114 -94
  79. package/dist/components/InfinityScroll/index.js +25 -22
  80. package/dist/components/Input/Input.js +99 -57
  81. package/dist/components/Input/index.js +25 -22
  82. package/dist/components/InstantCounter/InstantCounter.js +49 -31
  83. package/dist/components/InstantCounter/index.js +25 -22
  84. package/dist/components/LavaLamp/LavaLamp.data.js +83 -86
  85. package/dist/components/LavaLamp/LavaLamp.js +119 -32
  86. package/dist/components/LavaLamp/index.js +25 -22
  87. package/dist/components/LavaLamp/v2/LavaLamp.js +149 -156
  88. package/dist/components/LinkToId/LinkToId.js +39 -27
  89. package/dist/components/LinkToId/index.js +25 -22
  90. package/dist/components/Loader/Loader.js +21 -22
  91. package/dist/components/Loader/index.js +25 -22
  92. package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.js +27 -15
  93. package/dist/components/LoaderDotsIndicator/index.js +25 -22
  94. package/dist/components/LoopableVideo/LoopableVideo.js +33 -25
  95. package/dist/components/LoopableVideo/index.js +25 -22
  96. package/dist/components/MainGrid/MainGrid.js +46 -23
  97. package/dist/components/MainGrid/index.js +25 -22
  98. package/dist/components/MutableHamburgerButton/MutableHamburgerButton.js +27 -23
  99. package/dist/components/MutableHamburgerButton/index.js +25 -22
  100. package/dist/components/Notification/Notification.js +18 -11
  101. package/dist/components/Notification/index.js +25 -22
  102. package/dist/components/NumberInput/NumberInput.js +43 -42
  103. package/dist/components/NumberInput/index.js +25 -22
  104. package/dist/components/OrderableList/OrderableList.js +416 -404
  105. package/dist/components/OrderableList/index.js +25 -22
  106. package/dist/components/PaginationIndicator/PaginationIndicator.js +243 -198
  107. package/dist/components/PaginationIndicator/index.js +25 -22
  108. package/dist/components/Parallax/Parallax.js +156 -130
  109. package/dist/components/Parallax/index.js +25 -22
  110. package/dist/components/Parallax/math/helpers.js +120 -216
  111. package/dist/components/PasswordInput/PasswordInput.js +88 -71
  112. package/dist/components/PasswordInput/index.js +25 -22
  113. package/dist/components/PingPongText/PingPongText.js +63 -67
  114. package/dist/components/PingPongText/index.js +25 -22
  115. package/dist/components/PixelatedScan/PixelatedScan.js +126 -74
  116. package/dist/components/PixelatedScan/index.js +25 -22
  117. package/dist/components/Portal/Portal.js +46 -43
  118. package/dist/components/Portal/index.js +25 -22
  119. package/dist/components/ProgressBar/ProgressBar.js +105 -47
  120. package/dist/components/ProgressBar/index.js +25 -22
  121. package/dist/components/ProgressTexts/ProgressTexts.js +43 -29
  122. package/dist/components/ProgressTexts/index.js +25 -22
  123. package/dist/components/Radio/Radio.js +51 -28
  124. package/dist/components/Radio/index.js +25 -22
  125. package/dist/components/Radio/variants/Checkmark/Checkmark.js +18 -12
  126. package/dist/components/Radio/variants/Checkmark/index.js +25 -22
  127. package/dist/components/Radio/variants/Generic/Generic.js +20 -12
  128. package/dist/components/Radio/variants/Generic/index.js +25 -22
  129. package/dist/components/ScrollendIndicator/ScrollendIndicator.js +118 -0
  130. package/dist/components/ScrollendIndicator/ScrollendIndicator.module.scss +76 -0
  131. package/dist/components/SectionContainer/SectionContainer.js +38 -16
  132. package/dist/components/SectionContainer/index.js +25 -22
  133. package/dist/components/Select/Select.js +128 -95
  134. package/dist/components/Select/index.js +25 -22
  135. package/dist/components/Skeleton/Skeleton.js +22 -14
  136. package/dist/components/Skeleton/index.js +25 -22
  137. package/dist/components/Slider/Slider.js +63 -59
  138. package/dist/components/Slider/index.js +25 -22
  139. package/dist/components/Spacing/Spacing.js +25 -17
  140. package/dist/components/Spacing/index.js +25 -22
  141. package/dist/components/StaticScroller/StaticScroller.js +65 -61
  142. package/dist/components/StaticScroller/index.js +25 -22
  143. package/dist/components/Switch/Switch.js +40 -26
  144. package/dist/components/Switch/index.js +25 -22
  145. package/dist/components/Table/Table.js +107 -56
  146. package/dist/components/Table/index.js +25 -22
  147. package/dist/components/Tabs/Tabs.js +59 -54
  148. package/dist/components/Tabs/index.js +25 -22
  149. package/dist/components/Text/Text.js +35 -30
  150. package/dist/components/Text/index.js +25 -22
  151. package/dist/components/Transition/MasksFactory/DiagonalReveal.js +46 -12
  152. package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.js +71 -49
  153. package/dist/components/Transition/MasksFactory/PhysicsSquares.js +89 -79
  154. package/dist/components/Transition/MasksFactory/SquareToBalls.js +60 -41
  155. package/dist/components/Transition/MasksFactory/utils.js +25 -27
  156. package/dist/components/Transition/Transition.js +298 -319
  157. package/dist/components/Transition/index.js +25 -22
  158. package/dist/components/UncontrolledTransition/UncontrolledTransition.js +101 -93
  159. package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.js +27 -19
  160. package/dist/components/UncontrolledTransition/index.js +25 -22
  161. package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.js +101 -94
  162. package/dist/components/WalletConnectionWrapper/index.js +25 -22
  163. package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.js +53 -43
  164. package/dist/components/utilitary/ScrollAndFocusLock/index.js +25 -22
  165. package/dist/context/AsyncProcess.js +68 -41
  166. package/dist/context/ContextAsyncControl.js +72 -51
  167. package/dist/context/CustomBrowserRouter.js +44 -30
  168. package/dist/context/OneUIProvider.js +102 -108
  169. package/dist/hooks/logs/useDependencyChangeDetection.js +17 -16
  170. package/dist/hooks/logs/useIsMounting.js +10 -7
  171. package/dist/hooks/persistence/useLocalStorage.js +41 -40
  172. package/dist/hooks/shims/ObjectWatchShim.js +47 -46
  173. package/dist/hooks/ui/useAdaptiveImage.js +29 -34
  174. package/dist/hooks/ui/useAlternating.js +18 -18
  175. package/dist/hooks/ui/useBreakpoint.js +19 -18
  176. package/dist/hooks/ui/useCustomScrollbar.js +26 -21
  177. package/dist/hooks/ui/useEffectIf.js +11 -9
  178. package/dist/hooks/ui/useMouseHover.js +22 -19
  179. package/dist/hooks/ui/usePaginationControls.js +129 -136
  180. package/dist/hooks/ui/useSnapToViewport.js +20 -19
  181. package/dist/hooks/ui/useTilt.js +145 -129
  182. package/dist/hooks/ui/useZoomable.js +123 -116
  183. package/dist/hooks/useAsyncControl.js +67 -52
  184. package/dist/hooks/useContainedRepositioning.js +75 -71
  185. package/dist/hooks/useCustomHistory.js +21 -12
  186. package/dist/hooks/useElementFit.js +43 -48
  187. package/dist/hooks/useFirestoreWatch.js +41 -41
  188. package/dist/hooks/useFreeze.js +10 -8
  189. package/dist/hooks/useHero.js +249 -271
  190. package/dist/hooks/useIntersection.js +32 -27
  191. package/dist/hooks/useMergeRefs.js +27 -24
  192. package/dist/hooks/useObserve.js +17 -14
  193. package/dist/hooks/usePagination.js +147 -164
  194. package/dist/hooks/usePooledOperation.js +41 -57
  195. package/dist/hooks/usePooling.js +46 -49
  196. package/dist/hooks/useRebound.js +23 -19
  197. package/dist/hooks/useShortIntl.js +72 -50
  198. package/dist/hooks/utility/useAsyncMemo.js +36 -42
  199. package/dist/hooks/utility/useDepChange.js +14 -12
  200. package/dist/hooks/utility/useEvents.js +26 -21
  201. package/dist/hooks/utility/useImmediate.js +8 -5
  202. package/dist/hooks/utility/useManualInit.js +19 -17
  203. package/dist/hooks/utility/useModule.js +12 -9
  204. package/dist/hooks/utility/useQuery.js +13 -7
  205. package/dist/hooks/utility/useUniqueEffect.js +17 -17
  206. package/dist/index.js +2159 -349
  207. package/dist/index.preprocess.js +35 -72
  208. package/dist/models/DebugLogger.js +8 -5
  209. package/dist/models/GenericContract.js +42 -13
  210. package/dist/models/ImageScales.js +13 -10
  211. package/dist/models/Orbs.js +53 -47
  212. package/dist/storybookUtils/index.js +40 -39
  213. package/dist/type-utils.js +5 -2
  214. package/dist/types.js +5 -2
  215. package/dist/utils/blockchain.js +35 -54
  216. package/dist/utils/e2e.js +21 -11
  217. package/dist/utils/flatten.js +15 -12
  218. package/dist/utils/formatters.js +48 -43
  219. package/dist/utils/html.utils.js +12 -6
  220. package/dist/utils/ownEvent.js +9 -7
  221. package/dist/utils/test.js +13 -11
  222. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.d.ts +10 -0
  223. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.js +68 -0
  224. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.js.map +1 -0
  225. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.module.scss +76 -0
  226. package/dist-ts/index.d.ts +1 -0
  227. package/dist-ts/index.js +1 -0
  228. package/dist-ts/index.js.map +1 -1
  229. package/package.json +1 -1
@@ -1,230 +1,134 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.flattenMatrix = exports.invertMatrix = exports.multiplyMatrixes = exports.generateMatrixFromOperations = exports.IDENTITY_MATRIX = void 0;
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
7
+ exports.flattenMatrix = flattenMatrix;
8
+ exports.generateMatrixFromOperations = generateMatrixFromOperations;
9
+ exports.invertMatrix = invertMatrix;
10
+ exports.multiplyMatrixes = multiplyMatrixes;
4
11
  function IDENTITY_MATRIX() {
5
- return [
6
- [1, 0, 0, 0], // cos, -sin, ?
7
- [0, 1, 0, 0], // sin, cos, ?
8
- [0, 0, 1, 0], // TranslationX, TranslationY, ?
9
- [0, 0, 0, 1],
10
- ];
12
+ return [[1, 0, 0, 0],
13
+ // cos, -sin, ?
14
+ [0, 1, 0, 0],
15
+ // sin, cos, ?
16
+ [0, 0, 1, 0],
17
+ // TranslationX, TranslationY, ?
18
+ [0, 0, 0, 1]];
11
19
  }
12
- exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
13
- function generateMatrixFromOperations(...operations) {
14
- let resultingMatrix = undefined;
15
- for (let operation of operations) {
16
- const matrix = operation.type === "matrix" ? operation.matrix : IDENTITY_MATRIX();
20
+ function generateMatrixFromOperations() {
21
+ let resultingMatrix = undefined;
22
+ for (var _len = arguments.length, operations = new Array(_len), _key = 0; _key < _len; _key++) {
23
+ operations[_key] = arguments[_key];
24
+ }
25
+ for (let operation of operations) {
26
+ const matrix = operation.type === "matrix" ? operation.matrix : IDENTITY_MATRIX();
27
+ switch (operation.type) {
28
+ case "perspective":
29
+ const f = Math.tan(Math.PI * 0.5 - 0.5 * operation.fieldOfViewInRadians);
30
+ const rangeInv = 1.0 / (operation.near - operation.far);
31
+ matrix[0][0] = f / operation.aspect;
32
+ matrix[1][1] = f;
33
+ matrix[2][2] = (operation.near + operation.far) * rangeInv;
34
+ matrix[2][3] = -1;
35
+ matrix[3][2] = operation.near * operation.far * rangeInv * 2;
36
+ matrix[3][3] = 0;
37
+ break;
38
+ case "translate":
39
+ matrix[3][0] = operation.x;
40
+ matrix[3][1] = operation.y;
41
+ matrix[3][2] = operation.z;
42
+ break;
43
+ case "rotateX":
44
+ case "rotateY":
45
+ case "rotateZ":
46
+ const angleToRadians = operation.angle * Math.PI / 180;
47
+ const sinAngle = Math.sin(angleToRadians);
48
+ const cosAngle = Math.cos(angleToRadians);
17
49
  switch (operation.type) {
18
- case "perspective":
19
- const f = Math.tan(Math.PI * 0.5 - 0.5 * operation.fieldOfViewInRadians);
20
- const rangeInv = 1.0 / (operation.near - operation.far);
21
- matrix[0][0] = f / operation.aspect;
22
- matrix[1][1] = f;
23
- matrix[2][2] = (operation.near + operation.far) * rangeInv;
24
- matrix[2][3] = -1;
25
- matrix[3][2] = operation.near * operation.far * rangeInv * 2;
26
- matrix[3][3] = 0;
27
- break;
28
- case "translate":
29
- matrix[3][0] = operation.x;
30
- matrix[3][1] = operation.y;
31
- matrix[3][2] = operation.z;
32
- break;
33
- case "rotateX":
34
- case "rotateY":
35
- case "rotateZ":
36
- const angleToRadians = (operation.angle * Math.PI) / 180;
37
- const sinAngle = Math.sin(angleToRadians);
38
- const cosAngle = Math.cos(angleToRadians);
39
- switch (operation.type) {
40
- case "rotateZ":
41
- matrix[0][0] = cosAngle;
42
- matrix[1][1] = cosAngle;
43
- matrix[1][0] = -sinAngle;
44
- matrix[0][1] = sinAngle;
45
- break;
46
- case "rotateY":
47
- matrix[0][0] = cosAngle;
48
- matrix[2][2] = cosAngle;
49
- matrix[0][2] = -sinAngle;
50
- matrix[2][0] = sinAngle;
51
- break;
52
- case "rotateX":
53
- matrix[1][1] = cosAngle;
54
- matrix[2][2] = cosAngle;
55
- matrix[2][1] = -sinAngle;
56
- matrix[1][2] = sinAngle;
57
- break;
58
- }
59
- break;
60
- case "scale":
61
- matrix[0][0] = operation.factorX;
62
- matrix[1][1] = operation.factorY;
63
- matrix[2][2] = operation.factorZ;
64
- break;
65
- }
66
- if (resultingMatrix) {
67
- resultingMatrix = multiplyMatrixes(resultingMatrix, matrix);
68
- }
69
- else {
70
- resultingMatrix = matrix;
50
+ case "rotateZ":
51
+ matrix[0][0] = cosAngle;
52
+ matrix[1][1] = cosAngle;
53
+ matrix[1][0] = -sinAngle;
54
+ matrix[0][1] = sinAngle;
55
+ break;
56
+ case "rotateY":
57
+ matrix[0][0] = cosAngle;
58
+ matrix[2][2] = cosAngle;
59
+ matrix[0][2] = -sinAngle;
60
+ matrix[2][0] = sinAngle;
61
+ break;
62
+ case "rotateX":
63
+ matrix[1][1] = cosAngle;
64
+ matrix[2][2] = cosAngle;
65
+ matrix[2][1] = -sinAngle;
66
+ matrix[1][2] = sinAngle;
67
+ break;
71
68
  }
69
+ break;
70
+ case "scale":
71
+ matrix[0][0] = operation.factorX;
72
+ matrix[1][1] = operation.factorY;
73
+ matrix[2][2] = operation.factorZ;
74
+ break;
72
75
  }
73
- return resultingMatrix || IDENTITY_MATRIX();
76
+ if (resultingMatrix) {
77
+ resultingMatrix = multiplyMatrixes(resultingMatrix, matrix);
78
+ } else {
79
+ resultingMatrix = matrix;
80
+ }
81
+ }
82
+ return resultingMatrix || IDENTITY_MATRIX();
74
83
  }
75
- exports.generateMatrixFromOperations = generateMatrixFromOperations;
76
84
  function multiplyMatrixes(matrix1, matrix2) {
77
- const resultingMatrix = [];
78
- if (process.env.NODE_ENV === "development" &&
79
- matrix2.length !== matrix1[0].length) {
80
- throw new Error(`For the multiplication of matrixes to work you need to provide the matrix1 containing the amount of columns as the same amount of rows from matrix 2.
81
- You provided ${matrix1[0].length} columns and ${matrix2.length} rows`);
82
- }
83
- for (let i0 in matrix1) {
84
- for (let i in matrix2[0]) {
85
- let dimensionResult = 0;
86
- for (let i2 in matrix1[0]) {
87
- dimensionResult += matrix1[i0][i2] * matrix2[i2][i];
88
- }
89
- if (!resultingMatrix[i0])
90
- resultingMatrix[i0] = [];
91
- resultingMatrix[i0][i] = dimensionResult;
92
- }
85
+ const resultingMatrix = [];
86
+ if (process.env.NODE_ENV === "development" && matrix2.length !== matrix1[0].length) {
87
+ throw new Error("For the multiplication of matrixes to work you need to provide the matrix1 containing the amount of columns as the same amount of rows from matrix 2.\nYou provided ".concat(matrix1[0].length, " columns and ").concat(matrix2.length, " rows"));
88
+ }
89
+ for (let i0 in matrix1) {
90
+ for (let i in matrix2[0]) {
91
+ let dimensionResult = 0;
92
+ for (let i2 in matrix1[0]) {
93
+ dimensionResult += matrix1[i0][i2] * matrix2[i2][i];
94
+ }
95
+ if (!resultingMatrix[i0]) resultingMatrix[i0] = [];
96
+ resultingMatrix[i0][i] = dimensionResult;
93
97
  }
94
- return resultingMatrix;
98
+ }
99
+ return resultingMatrix;
95
100
  }
96
- exports.multiplyMatrixes = multiplyMatrixes;
97
101
  function invertMatrix(matrix) {
98
- const m = flattenMatrix(matrix);
99
- let det = 0;
100
- const inv = [];
101
- inv[0] =
102
- m[5] * m[10] * m[15] -
103
- m[5] * m[11] * m[14] -
104
- m[9] * m[6] * m[15] +
105
- m[9] * m[7] * m[14] +
106
- m[13] * m[6] * m[11] -
107
- m[13] * m[7] * m[10];
108
- inv[4] =
109
- -m[4] * m[10] * m[15] +
110
- m[4] * m[11] * m[14] +
111
- m[8] * m[6] * m[15] -
112
- m[8] * m[7] * m[14] -
113
- m[12] * m[6] * m[11] +
114
- m[12] * m[7] * m[10];
115
- inv[8] =
116
- m[4] * m[9] * m[15] -
117
- m[4] * m[11] * m[13] -
118
- m[8] * m[5] * m[15] +
119
- m[8] * m[7] * m[13] +
120
- m[12] * m[5] * m[11] -
121
- m[12] * m[7] * m[9];
122
- inv[12] =
123
- -m[4] * m[9] * m[14] +
124
- m[4] * m[10] * m[13] +
125
- m[8] * m[5] * m[14] -
126
- m[8] * m[6] * m[13] -
127
- m[12] * m[5] * m[10] +
128
- m[12] * m[6] * m[9];
129
- inv[1] =
130
- -m[1] * m[10] * m[15] +
131
- m[1] * m[11] * m[14] +
132
- m[9] * m[2] * m[15] -
133
- m[9] * m[3] * m[14] -
134
- m[13] * m[2] * m[11] +
135
- m[13] * m[3] * m[10];
136
- inv[5] =
137
- m[0] * m[10] * m[15] -
138
- m[0] * m[11] * m[14] -
139
- m[8] * m[2] * m[15] +
140
- m[8] * m[3] * m[14] +
141
- m[12] * m[2] * m[11] -
142
- m[12] * m[3] * m[10];
143
- inv[9] =
144
- -m[0] * m[9] * m[15] +
145
- m[0] * m[11] * m[13] +
146
- m[8] * m[1] * m[15] -
147
- m[8] * m[3] * m[13] -
148
- m[12] * m[1] * m[11] +
149
- m[12] * m[3] * m[9];
150
- inv[13] =
151
- m[0] * m[9] * m[14] -
152
- m[0] * m[10] * m[13] -
153
- m[8] * m[1] * m[14] +
154
- m[8] * m[2] * m[13] +
155
- m[12] * m[1] * m[10] -
156
- m[12] * m[2] * m[9];
157
- inv[2] =
158
- m[1] * m[6] * m[15] -
159
- m[1] * m[7] * m[14] -
160
- m[5] * m[2] * m[15] +
161
- m[5] * m[3] * m[14] +
162
- m[13] * m[2] * m[7] -
163
- m[13] * m[3] * m[6];
164
- inv[6] =
165
- -m[0] * m[6] * m[15] +
166
- m[0] * m[7] * m[14] +
167
- m[4] * m[2] * m[15] -
168
- m[4] * m[3] * m[14] -
169
- m[12] * m[2] * m[7] +
170
- m[12] * m[3] * m[6];
171
- inv[10] =
172
- m[0] * m[5] * m[15] -
173
- m[0] * m[7] * m[13] -
174
- m[4] * m[1] * m[15] +
175
- m[4] * m[3] * m[13] +
176
- m[12] * m[1] * m[7] -
177
- m[12] * m[3] * m[5];
178
- inv[14] =
179
- -m[0] * m[5] * m[14] +
180
- m[0] * m[6] * m[13] +
181
- m[4] * m[1] * m[14] -
182
- m[4] * m[2] * m[13] -
183
- m[12] * m[1] * m[6] +
184
- m[12] * m[2] * m[5];
185
- inv[3] =
186
- -m[1] * m[6] * m[11] +
187
- m[1] * m[7] * m[10] +
188
- m[5] * m[2] * m[11] -
189
- m[5] * m[3] * m[10] -
190
- m[9] * m[2] * m[7] +
191
- m[9] * m[3] * m[6];
192
- inv[7] =
193
- m[0] * m[6] * m[11] -
194
- m[0] * m[7] * m[10] -
195
- m[4] * m[2] * m[11] +
196
- m[4] * m[3] * m[10] +
197
- m[8] * m[2] * m[7] -
198
- m[8] * m[3] * m[6];
199
- inv[11] =
200
- -m[0] * m[5] * m[11] +
201
- m[0] * m[7] * m[9] +
202
- m[4] * m[1] * m[11] -
203
- m[4] * m[3] * m[9] -
204
- m[8] * m[1] * m[7] +
205
- m[8] * m[3] * m[5];
206
- inv[15] =
207
- m[0] * m[5] * m[10] -
208
- m[0] * m[6] * m[9] -
209
- m[4] * m[1] * m[10] +
210
- m[4] * m[2] * m[9] +
211
- m[8] * m[1] * m[6] -
212
- m[8] * m[2] * m[5];
213
- det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
214
- if (det === 0)
215
- throw new Error("Determinator is equal to 0. This matrix cannot be inverted");
216
- det = 1.0 / det;
217
- return inv.reduce((r, val, i) => {
218
- const row = Math.floor(i / 4);
219
- if (!r[row])
220
- r[row] = [];
221
- r[row][i % 4] = val * det;
222
- return r;
223
- }, []);
102
+ const m = flattenMatrix(matrix);
103
+ let det = 0;
104
+ const inv = [];
105
+ inv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m[13] * m[7] * m[10];
106
+ inv[4] = -m[4] * m[10] * m[15] + m[4] * m[11] * m[14] + m[8] * m[6] * m[15] - m[8] * m[7] * m[14] - m[12] * m[6] * m[11] + m[12] * m[7] * m[10];
107
+ inv[8] = m[4] * m[9] * m[15] - m[4] * m[11] * m[13] - m[8] * m[5] * m[15] + m[8] * m[7] * m[13] + m[12] * m[5] * m[11] - m[12] * m[7] * m[9];
108
+ inv[12] = -m[4] * m[9] * m[14] + m[4] * m[10] * m[13] + m[8] * m[5] * m[14] - m[8] * m[6] * m[13] - m[12] * m[5] * m[10] + m[12] * m[6] * m[9];
109
+ inv[1] = -m[1] * m[10] * m[15] + m[1] * m[11] * m[14] + m[9] * m[2] * m[15] - m[9] * m[3] * m[14] - m[13] * m[2] * m[11] + m[13] * m[3] * m[10];
110
+ inv[5] = m[0] * m[10] * m[15] - m[0] * m[11] * m[14] - m[8] * m[2] * m[15] + m[8] * m[3] * m[14] + m[12] * m[2] * m[11] - m[12] * m[3] * m[10];
111
+ inv[9] = -m[0] * m[9] * m[15] + m[0] * m[11] * m[13] + m[8] * m[1] * m[15] - m[8] * m[3] * m[13] - m[12] * m[1] * m[11] + m[12] * m[3] * m[9];
112
+ inv[13] = m[0] * m[9] * m[14] - m[0] * m[10] * m[13] - m[8] * m[1] * m[14] + m[8] * m[2] * m[13] + m[12] * m[1] * m[10] - m[12] * m[2] * m[9];
113
+ inv[2] = m[1] * m[6] * m[15] - m[1] * m[7] * m[14] - m[5] * m[2] * m[15] + m[5] * m[3] * m[14] + m[13] * m[2] * m[7] - m[13] * m[3] * m[6];
114
+ inv[6] = -m[0] * m[6] * m[15] + m[0] * m[7] * m[14] + m[4] * m[2] * m[15] - m[4] * m[3] * m[14] - m[12] * m[2] * m[7] + m[12] * m[3] * m[6];
115
+ inv[10] = m[0] * m[5] * m[15] - m[0] * m[7] * m[13] - m[4] * m[1] * m[15] + m[4] * m[3] * m[13] + m[12] * m[1] * m[7] - m[12] * m[3] * m[5];
116
+ inv[14] = -m[0] * m[5] * m[14] + m[0] * m[6] * m[13] + m[4] * m[1] * m[14] - m[4] * m[2] * m[13] - m[12] * m[1] * m[6] + m[12] * m[2] * m[5];
117
+ inv[3] = -m[1] * m[6] * m[11] + m[1] * m[7] * m[10] + m[5] * m[2] * m[11] - m[5] * m[3] * m[10] - m[9] * m[2] * m[7] + m[9] * m[3] * m[6];
118
+ inv[7] = m[0] * m[6] * m[11] - m[0] * m[7] * m[10] - m[4] * m[2] * m[11] + m[4] * m[3] * m[10] + m[8] * m[2] * m[7] - m[8] * m[3] * m[6];
119
+ inv[11] = -m[0] * m[5] * m[11] + m[0] * m[7] * m[9] + m[4] * m[1] * m[11] - m[4] * m[3] * m[9] - m[8] * m[1] * m[7] + m[8] * m[3] * m[5];
120
+ inv[15] = m[0] * m[5] * m[10] - m[0] * m[6] * m[9] - m[4] * m[1] * m[10] + m[4] * m[2] * m[9] + m[8] * m[1] * m[6] - m[8] * m[2] * m[5];
121
+ det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
122
+ if (det === 0) throw new Error("Determinator is equal to 0. This matrix cannot be inverted");
123
+ det = 1.0 / det;
124
+ return inv.reduce((r, val, i) => {
125
+ const row = Math.floor(i / 4);
126
+ if (!r[row]) r[row] = [];
127
+ r[row][i % 4] = val * det;
128
+ return r;
129
+ }, []);
224
130
  }
225
- exports.invertMatrix = invertMatrix;
226
131
  function flattenMatrix(matrix) {
227
- return matrix.reduce((f, dimension) => [...f, ...dimension], []);
132
+ return matrix.reduce((f, dimension) => [...f, ...dimension], []);
228
133
  }
229
- exports.flattenMatrix = flattenMatrix;
230
- //# sourceMappingURL=helpers.js.map
134
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJREVOVElUWV9NQVRSSVgiLCJnZW5lcmF0ZU1hdHJpeEZyb21PcGVyYXRpb25zIiwicmVzdWx0aW5nTWF0cml4IiwidW5kZWZpbmVkIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm9wZXJhdGlvbnMiLCJBcnJheSIsIl9rZXkiLCJvcGVyYXRpb24iLCJtYXRyaXgiLCJ0eXBlIiwiZiIsIk1hdGgiLCJ0YW4iLCJQSSIsImZpZWxkT2ZWaWV3SW5SYWRpYW5zIiwicmFuZ2VJbnYiLCJuZWFyIiwiZmFyIiwiYXNwZWN0IiwieCIsInkiLCJ6IiwiYW5nbGVUb1JhZGlhbnMiLCJhbmdsZSIsInNpbkFuZ2xlIiwic2luIiwiY29zQW5nbGUiLCJjb3MiLCJmYWN0b3JYIiwiZmFjdG9yWSIsImZhY3RvcloiLCJtdWx0aXBseU1hdHJpeGVzIiwibWF0cml4MSIsIm1hdHJpeDIiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJFcnJvciIsImNvbmNhdCIsImkwIiwiaSIsImRpbWVuc2lvblJlc3VsdCIsImkyIiwiaW52ZXJ0TWF0cml4IiwibSIsImZsYXR0ZW5NYXRyaXgiLCJkZXQiLCJpbnYiLCJyZWR1Y2UiLCJyIiwidmFsIiwicm93IiwiZmxvb3IiLCJkaW1lbnNpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9QYXJhbGxheC9tYXRoL2hlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgTWF0cml4M0QgPSBbXG4gIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG5dO1xuZXhwb3J0IHR5cGUgT3BlcmF0aW9uRGF0YSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJyb3RhdGVYXCIgfCBcInJvdGF0ZVlcIiB8IFwicm90YXRlWlwiO1xuICAgICAgYW5nbGU6IG51bWJlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJ0cmFuc2xhdGVcIjtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIHo6IG51bWJlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJzY2FsZVwiO1xuICAgICAgZmFjdG9yWDogbnVtYmVyO1xuICAgICAgZmFjdG9yWTogbnVtYmVyO1xuICAgICAgZmFjdG9yWjogbnVtYmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInBlcnNwZWN0aXZlXCI7XG4gICAgICBmaWVsZE9mVmlld0luUmFkaWFuczogbnVtYmVyO1xuICAgICAgYXNwZWN0OiBudW1iZXI7XG4gICAgICBuZWFyOiBudW1iZXI7XG4gICAgICBmYXI6IG51bWJlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJtYXRyaXhcIjtcbiAgICAgIG1hdHJpeDogTWF0cml4M0Q7XG4gICAgfTtcbmV4cG9ydCBmdW5jdGlvbiBJREVOVElUWV9NQVRSSVgoKSB7XG4gIHJldHVybiBbXG4gICAgWzEsIDAsIDAsIDBdLCAvLyBjb3MsIC1zaW4sID9cbiAgICBbMCwgMSwgMCwgMF0sIC8vIHNpbiwgY29zLCA/XG4gICAgWzAsIDAsIDEsIDBdLCAvLyBUcmFuc2xhdGlvblgsIFRyYW5zbGF0aW9uWSwgP1xuICAgIFswLCAwLCAwLCAxXSxcbiAgXSBhcyBNYXRyaXgzRDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU1hdHJpeEZyb21PcGVyYXRpb25zKFxuICAuLi5vcGVyYXRpb25zOiBPcGVyYXRpb25EYXRhW11cbik6IE1hdHJpeDNEIHtcbiAgbGV0IHJlc3VsdGluZ01hdHJpeDogTWF0cml4M0QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGZvciAobGV0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0cml4ID1cbiAgICAgIG9wZXJhdGlvbi50eXBlID09PSBcIm1hdHJpeFwiID8gb3BlcmF0aW9uLm1hdHJpeCA6IElERU5USVRZX01BVFJJWCgpO1xuICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJwZXJzcGVjdGl2ZVwiOlxuICAgICAgICBjb25zdCBmID0gTWF0aC50YW4oXG4gICAgICAgICAgTWF0aC5QSSAqIDAuNSAtIDAuNSAqIG9wZXJhdGlvbi5maWVsZE9mVmlld0luUmFkaWFuc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCByYW5nZUludiA9IDEuMCAvIChvcGVyYXRpb24ubmVhciAtIG9wZXJhdGlvbi5mYXIpO1xuXG4gICAgICAgIG1hdHJpeFswXVswXSA9IGYgLyBvcGVyYXRpb24uYXNwZWN0O1xuICAgICAgICBtYXRyaXhbMV1bMV0gPSBmO1xuICAgICAgICBtYXRyaXhbMl1bMl0gPSAob3BlcmF0aW9uLm5lYXIgKyBvcGVyYXRpb24uZmFyKSAqIHJhbmdlSW52O1xuICAgICAgICBtYXRyaXhbMl1bM10gPSAtMTtcbiAgICAgICAgbWF0cml4WzNdWzJdID0gb3BlcmF0aW9uLm5lYXIgKiBvcGVyYXRpb24uZmFyICogcmFuZ2VJbnYgKiAyO1xuICAgICAgICBtYXRyaXhbM11bM10gPSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0cmFuc2xhdGVcIjpcbiAgICAgICAgbWF0cml4WzNdWzBdID0gb3BlcmF0aW9uLng7XG4gICAgICAgIG1hdHJpeFszXVsxXSA9IG9wZXJhdGlvbi55O1xuICAgICAgICBtYXRyaXhbM11bMl0gPSBvcGVyYXRpb24uejtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicm90YXRlWFwiOlxuICAgICAgY2FzZSBcInJvdGF0ZVlcIjpcbiAgICAgIGNhc2UgXCJyb3RhdGVaXCI6XG4gICAgICAgIGNvbnN0IGFuZ2xlVG9SYWRpYW5zID0gKG9wZXJhdGlvbi5hbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xuICAgICAgICBjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlVG9SYWRpYW5zKTtcbiAgICAgICAgY29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZVRvUmFkaWFucyk7XG4gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwicm90YXRlWlwiOlxuICAgICAgICAgICAgbWF0cml4WzBdWzBdID0gY29zQW5nbGU7XG4gICAgICAgICAgICBtYXRyaXhbMV1bMV0gPSBjb3NBbmdsZTtcbiAgICAgICAgICAgIG1hdHJpeFsxXVswXSA9IC1zaW5BbmdsZTtcbiAgICAgICAgICAgIG1hdHJpeFswXVsxXSA9IHNpbkFuZ2xlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcInJvdGF0ZVlcIjpcbiAgICAgICAgICAgIG1hdHJpeFswXVswXSA9IGNvc0FuZ2xlO1xuICAgICAgICAgICAgbWF0cml4WzJdWzJdID0gY29zQW5nbGU7XG4gICAgICAgICAgICBtYXRyaXhbMF1bMl0gPSAtc2luQW5nbGU7XG4gICAgICAgICAgICBtYXRyaXhbMl1bMF0gPSBzaW5BbmdsZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJyb3RhdGVYXCI6XG4gICAgICAgICAgICBtYXRyaXhbMV1bMV0gPSBjb3NBbmdsZTtcbiAgICAgICAgICAgIG1hdHJpeFsyXVsyXSA9IGNvc0FuZ2xlO1xuICAgICAgICAgICAgbWF0cml4WzJdWzFdID0gLXNpbkFuZ2xlO1xuICAgICAgICAgICAgbWF0cml4WzFdWzJdID0gc2luQW5nbGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzY2FsZVwiOlxuICAgICAgICBtYXRyaXhbMF1bMF0gPSBvcGVyYXRpb24uZmFjdG9yWDtcbiAgICAgICAgbWF0cml4WzFdWzFdID0gb3BlcmF0aW9uLmZhY3Rvclk7XG4gICAgICAgIG1hdHJpeFsyXVsyXSA9IG9wZXJhdGlvbi5mYWN0b3JaO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHJlc3VsdGluZ01hdHJpeCkge1xuICAgICAgcmVzdWx0aW5nTWF0cml4ID0gbXVsdGlwbHlNYXRyaXhlcyhyZXN1bHRpbmdNYXRyaXgsIG1hdHJpeCkgYXMgTWF0cml4M0Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdGluZ01hdHJpeCA9IG1hdHJpeDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0aW5nTWF0cml4IHx8IElERU5USVRZX01BVFJJWCgpO1xufVxuXG50eXBlIE51bWJlck1hdHJpeCA9IHJlYWRvbmx5IChyZWFkb25seSBudW1iZXJbXSlbXTtcbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseU1hdHJpeGVzPFggZXh0ZW5kcyBOdW1iZXJNYXRyaXg+KFxuICBtYXRyaXgxOiBYLFxuICBtYXRyaXgyOiBOdW1iZXJNYXRyaXggJiB7IGxlbmd0aDogWFtudW1iZXJdW1wibGVuZ3RoXCJdIH1cbikge1xuICBjb25zdCByZXN1bHRpbmdNYXRyaXg6IG51bWJlcltdW10gPSBbXTtcbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgJiZcbiAgICBtYXRyaXgyLmxlbmd0aCAhPT0gbWF0cml4MVswXS5sZW5ndGhcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgdGhlIG11bHRpcGxpY2F0aW9uIG9mIG1hdHJpeGVzIHRvIHdvcmsgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgbWF0cml4MSBjb250YWluaW5nIHRoZSBhbW91bnQgb2YgY29sdW1ucyBhcyB0aGUgc2FtZSBhbW91bnQgb2Ygcm93cyBmcm9tIG1hdHJpeCAyLlxuWW91IHByb3ZpZGVkICR7bWF0cml4MVswXS5sZW5ndGh9IGNvbHVtbnMgYW5kICR7bWF0cml4Mi5sZW5ndGh9IHJvd3NgKTtcbiAgfVxuICBmb3IgKGxldCBpMCBpbiBtYXRyaXgxKSB7XG4gICAgZm9yIChsZXQgaSBpbiBtYXRyaXgyWzBdKSB7XG4gICAgICBsZXQgZGltZW5zaW9uUmVzdWx0ID0gMDtcbiAgICAgIGZvciAobGV0IGkyIGluIG1hdHJpeDFbMF0pIHtcbiAgICAgICAgZGltZW5zaW9uUmVzdWx0ICs9IG1hdHJpeDFbaTBdW2kyXSAqIG1hdHJpeDJbaTJdW2ldO1xuICAgICAgfVxuICAgICAgaWYgKCFyZXN1bHRpbmdNYXRyaXhbaTBdKSByZXN1bHRpbmdNYXRyaXhbaTBdID0gW107XG4gICAgICByZXN1bHRpbmdNYXRyaXhbaTBdW2ldID0gZGltZW5zaW9uUmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0aW5nTWF0cml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0TWF0cml4KG1hdHJpeDogTWF0cml4M0QpIHtcbiAgY29uc3QgbSA9IGZsYXR0ZW5NYXRyaXgobWF0cml4KTtcbiAgbGV0IGRldDogbnVtYmVyID0gMDtcbiAgY29uc3QgaW52ID0gW107XG5cbiAgaW52WzBdID1cbiAgICBtWzVdICogbVsxMF0gKiBtWzE1XSAtXG4gICAgbVs1XSAqIG1bMTFdICogbVsxNF0gLVxuICAgIG1bOV0gKiBtWzZdICogbVsxNV0gK1xuICAgIG1bOV0gKiBtWzddICogbVsxNF0gK1xuICAgIG1bMTNdICogbVs2XSAqIG1bMTFdIC1cbiAgICBtWzEzXSAqIG1bN10gKiBtWzEwXTtcblxuICBpbnZbNF0gPVxuICAgIC1tWzRdICogbVsxMF0gKiBtWzE1XSArXG4gICAgbVs0XSAqIG1bMTFdICogbVsxNF0gK1xuICAgIG1bOF0gKiBtWzZdICogbVsxNV0gLVxuICAgIG1bOF0gKiBtWzddICogbVsxNF0gLVxuICAgIG1bMTJdICogbVs2XSAqIG1bMTFdICtcbiAgICBtWzEyXSAqIG1bN10gKiBtWzEwXTtcblxuICBpbnZbOF0gPVxuICAgIG1bNF0gKiBtWzldICogbVsxNV0gLVxuICAgIG1bNF0gKiBtWzExXSAqIG1bMTNdIC1cbiAgICBtWzhdICogbVs1XSAqIG1bMTVdICtcbiAgICBtWzhdICogbVs3XSAqIG1bMTNdICtcbiAgICBtWzEyXSAqIG1bNV0gKiBtWzExXSAtXG4gICAgbVsxMl0gKiBtWzddICogbVs5XTtcblxuICBpbnZbMTJdID1cbiAgICAtbVs0XSAqIG1bOV0gKiBtWzE0XSArXG4gICAgbVs0XSAqIG1bMTBdICogbVsxM10gK1xuICAgIG1bOF0gKiBtWzVdICogbVsxNF0gLVxuICAgIG1bOF0gKiBtWzZdICogbVsxM10gLVxuICAgIG1bMTJdICogbVs1XSAqIG1bMTBdICtcbiAgICBtWzEyXSAqIG1bNl0gKiBtWzldO1xuXG4gIGludlsxXSA9XG4gICAgLW1bMV0gKiBtWzEwXSAqIG1bMTVdICtcbiAgICBtWzFdICogbVsxMV0gKiBtWzE0XSArXG4gICAgbVs5XSAqIG1bMl0gKiBtWzE1XSAtXG4gICAgbVs5XSAqIG1bM10gKiBtWzE0XSAtXG4gICAgbVsxM10gKiBtWzJdICogbVsxMV0gK1xuICAgIG1bMTNdICogbVszXSAqIG1bMTBdO1xuXG4gIGludls1XSA9XG4gICAgbVswXSAqIG1bMTBdICogbVsxNV0gLVxuICAgIG1bMF0gKiBtWzExXSAqIG1bMTRdIC1cbiAgICBtWzhdICogbVsyXSAqIG1bMTVdICtcbiAgICBtWzhdICogbVszXSAqIG1bMTRdICtcbiAgICBtWzEyXSAqIG1bMl0gKiBtWzExXSAtXG4gICAgbVsxMl0gKiBtWzNdICogbVsxMF07XG5cbiAgaW52WzldID1cbiAgICAtbVswXSAqIG1bOV0gKiBtWzE1XSArXG4gICAgbVswXSAqIG1bMTFdICogbVsxM10gK1xuICAgIG1bOF0gKiBtWzFdICogbVsxNV0gLVxuICAgIG1bOF0gKiBtWzNdICogbVsxM10gLVxuICAgIG1bMTJdICogbVsxXSAqIG1bMTFdICtcbiAgICBtWzEyXSAqIG1bM10gKiBtWzldO1xuXG4gIGludlsxM10gPVxuICAgIG1bMF0gKiBtWzldICogbVsxNF0gLVxuICAgIG1bMF0gKiBtWzEwXSAqIG1bMTNdIC1cbiAgICBtWzhdICogbVsxXSAqIG1bMTRdICtcbiAgICBtWzhdICogbVsyXSAqIG1bMTNdICtcbiAgICBtWzEyXSAqIG1bMV0gKiBtWzEwXSAtXG4gICAgbVsxMl0gKiBtWzJdICogbVs5XTtcblxuICBpbnZbMl0gPVxuICAgIG1bMV0gKiBtWzZdICogbVsxNV0gLVxuICAgIG1bMV0gKiBtWzddICogbVsxNF0gLVxuICAgIG1bNV0gKiBtWzJdICogbVsxNV0gK1xuICAgIG1bNV0gKiBtWzNdICogbVsxNF0gK1xuICAgIG1bMTNdICogbVsyXSAqIG1bN10gLVxuICAgIG1bMTNdICogbVszXSAqIG1bNl07XG5cbiAgaW52WzZdID1cbiAgICAtbVswXSAqIG1bNl0gKiBtWzE1XSArXG4gICAgbVswXSAqIG1bN10gKiBtWzE0XSArXG4gICAgbVs0XSAqIG1bMl0gKiBtWzE1XSAtXG4gICAgbVs0XSAqIG1bM10gKiBtWzE0XSAtXG4gICAgbVsxMl0gKiBtWzJdICogbVs3XSArXG4gICAgbVsxMl0gKiBtWzNdICogbVs2XTtcblxuICBpbnZbMTBdID1cbiAgICBtWzBdICogbVs1XSAqIG1bMTVdIC1cbiAgICBtWzBdICogbVs3XSAqIG1bMTNdIC1cbiAgICBtWzRdICogbVsxXSAqIG1bMTVdICtcbiAgICBtWzRdICogbVszXSAqIG1bMTNdICtcbiAgICBtWzEyXSAqIG1bMV0gKiBtWzddIC1cbiAgICBtWzEyXSAqIG1bM10gKiBtWzVdO1xuXG4gIGludlsxNF0gPVxuICAgIC1tWzBdICogbVs1XSAqIG1bMTRdICtcbiAgICBtWzBdICogbVs2XSAqIG1bMTNdICtcbiAgICBtWzRdICogbVsxXSAqIG1bMTRdIC1cbiAgICBtWzRdICogbVsyXSAqIG1bMTNdIC1cbiAgICBtWzEyXSAqIG1bMV0gKiBtWzZdICtcbiAgICBtWzEyXSAqIG1bMl0gKiBtWzVdO1xuXG4gIGludlszXSA9XG4gICAgLW1bMV0gKiBtWzZdICogbVsxMV0gK1xuICAgIG1bMV0gKiBtWzddICogbVsxMF0gK1xuICAgIG1bNV0gKiBtWzJdICogbVsxMV0gLVxuICAgIG1bNV0gKiBtWzNdICogbVsxMF0gLVxuICAgIG1bOV0gKiBtWzJdICogbVs3XSArXG4gICAgbVs5XSAqIG1bM10gKiBtWzZdO1xuXG4gIGludls3XSA9XG4gICAgbVswXSAqIG1bNl0gKiBtWzExXSAtXG4gICAgbVswXSAqIG1bN10gKiBtWzEwXSAtXG4gICAgbVs0XSAqIG1bMl0gKiBtWzExXSArXG4gICAgbVs0XSAqIG1bM10gKiBtWzEwXSArXG4gICAgbVs4XSAqIG1bMl0gKiBtWzddIC1cbiAgICBtWzhdICogbVszXSAqIG1bNl07XG5cbiAgaW52WzExXSA9XG4gICAgLW1bMF0gKiBtWzVdICogbVsxMV0gK1xuICAgIG1bMF0gKiBtWzddICogbVs5XSArXG4gICAgbVs0XSAqIG1bMV0gKiBtWzExXSAtXG4gICAgbVs0XSAqIG1bM10gKiBtWzldIC1cbiAgICBtWzhdICogbVsxXSAqIG1bN10gK1xuICAgIG1bOF0gKiBtWzNdICogbVs1XTtcblxuICBpbnZbMTVdID1cbiAgICBtWzBdICogbVs1XSAqIG1bMTBdIC1cbiAgICBtWzBdICogbVs2XSAqIG1bOV0gLVxuICAgIG1bNF0gKiBtWzFdICogbVsxMF0gK1xuICAgIG1bNF0gKiBtWzJdICogbVs5XSArXG4gICAgbVs4XSAqIG1bMV0gKiBtWzZdIC1cbiAgICBtWzhdICogbVsyXSAqIG1bNV07XG5cbiAgZGV0ID0gbVswXSAqIGludlswXSArIG1bMV0gKiBpbnZbNF0gKyBtWzJdICogaW52WzhdICsgbVszXSAqIGludlsxMl07XG5cbiAgaWYgKGRldCA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkRldGVybWluYXRvciBpcyBlcXVhbCB0byAwLiBUaGlzIG1hdHJpeCBjYW5ub3QgYmUgaW52ZXJ0ZWRcIlxuICAgICk7XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gIHJldHVybiBpbnYucmVkdWNlKChyLCB2YWwsIGkpID0+IHtcbiAgICBjb25zdCByb3cgPSBNYXRoLmZsb29yKGkgLyA0KTtcbiAgICBpZiAoIXJbcm93XSkgcltyb3ddID0gW107XG4gICAgcltyb3ddW2kgJSA0XSA9IHZhbCAqIGRldDtcbiAgICByZXR1cm4gcjtcbiAgfSwgW10gYXMgbnVtYmVyW11bXSkgYXMgTWF0cml4M0Q7XG59XG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbk1hdHJpeChtYXRyaXg6IG51bWJlcltdW10pIHtcbiAgcmV0dXJuIG1hdHJpeC5yZWR1Y2UoKGYsIGRpbWVuc2lvbikgPT4gWy4uLmYsIC4uLmRpbWVuc2lvbl0sIFtdIGFzIG51bWJlcltdKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQWtDTyxTQUFTQSxlQUFlQSxDQUFBLEVBQUc7RUFDaEMsT0FBTyxDQUNMLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDZCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUFFO0VBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFBRTtFQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ2I7QUFDSDtBQUNPLFNBQVNDLDRCQUE0QkEsQ0FBQSxFQUVoQztFQUNWLElBQUlDLGVBQXFDLEdBQUdDLFNBQVM7RUFBQyxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUZuREMsVUFBVSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtJQUFWRixVQUFVLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJQUFBO0VBQUE7RUFHYixLQUFLLElBQUlDLFNBQVMsSUFBSUgsVUFBVSxFQUFFO0lBQ2hDLE1BQU1JLE1BQU0sR0FDVkQsU0FBUyxDQUFDRSxJQUFJLEtBQUssUUFBUSxHQUFHRixTQUFTLENBQUNDLE1BQU0sR0FBR1gsZUFBZSxDQUFDLENBQUM7SUFDcEUsUUFBUVUsU0FBUyxDQUFDRSxJQUFJO01BQ3BCLEtBQUssYUFBYTtRQUNoQixNQUFNQyxDQUFD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LEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFFdEJHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FDSixDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNyQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBRXRCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0pILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFckJHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FDTCxDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0osQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDckJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUV0QkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUNKSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBRXRCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0osQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVyQkcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUNMSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0pILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFckJHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FDSixDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQ0xILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFckJHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FDTCxDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0osQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ2xCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVwQkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUNKSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXBCRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQ0wsQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ2xCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ2xCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVwQkcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUNMSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUNsQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXBCRSxHQUFHLEdBQUdGLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0csR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0csR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUVwRSxJQUFJRCxHQUFHLEtBQUssQ0FBQyxFQUNYLE1BQU0sSUFBSVQsS0FBSyxDQUNiLDREQUNGLENBQUM7RUFFSFMsR0FBRyxHQUFHLEdBQUcsR0FBR0EsR0FBRztFQUVmLE9BQU9DLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLENBQUMsRUFBRUMsR0FBRyxFQUFFVixDQUFDLEtBQUs7SUFDL0IsTUFBTVcsR0FBRyxHQUFHeEMsSUFBSSxDQUFDeUMsS0FBSyxDQUFDWixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQ1MsQ0FBQyxDQUFDRSxHQUFHLENBQUMsRUFBRUYsQ0FBQyxDQUFDRSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQ3hCRixDQUFDLENBQUNFLEdBQUcsQ0FBQyxDQUFDWCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdVLEdBQUcsR0FBR0osR0FBRztJQUN6QixPQUFPRyxDQUFDO0VBQ1YsQ0FBQyxFQUFFLEVBQWdCLENBQUM7QUFDdEI7QUFDTyxTQUFTSixhQUFhQSxDQUFDckMsTUFBa0IsRUFBRTtFQUNoRCxPQUFPQSxNQUFNLENBQUN3QyxNQUFNLENBQUMsQ0FBQ3RDLENBQUMsRUFBRTJDLFNBQVMsS0FBSyxDQUFDLEdBQUczQyxDQUFDLEVBQUUsR0FBRzJDLFNBQVMsQ0FBQyxFQUFFLEVBQWMsQ0FBQztBQUM5RSJ9
@@ -1,80 +1,97 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = require("react");
8
- const OneUIProvider_1 = require("../../context/OneUIProvider");
9
- const Input_1 = __importDefault(require("../Input"));
10
- const Text_1 = __importDefault(require("../Text"));
11
- const PasswordInput_module_scss_1 = __importDefault(require("./PasswordInput.module.scss"));
12
- const BASE_VALIDATION = [
13
- { code: "size", validate: (pass) => pass.length >= 8 },
14
- ];
15
- const RULES = [
16
- {
17
- code: "duplication",
18
- validate: (pass) => {
19
- for (let i = 0; i < pass.length; i++) {
20
- const charCode = pass.charCodeAt(i);
21
- const [firstNext, secondNext] = [
22
- pass.charCodeAt(i + 1) || 0,
23
- pass.charCodeAt(i + 2) || 0,
24
- ];
25
- if (firstNext - charCode === 1 && secondNext - firstNext === 1) {
26
- return false;
27
- }
28
- }
29
- return true;
30
- },
31
- },
32
- ...BASE_VALIDATION,
33
- ];
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _OneUIProvider = require("../../context/OneUIProvider");
9
+ var _Input = _interopRequireDefault(require("../Input"));
10
+ var _Text = _interopRequireDefault(require("../Text"));
11
+ var _PasswordInputModule = _interopRequireDefault(require("./PasswordInput.module.scss"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+ const BASE_VALIDATION = [{
16
+ code: "size",
17
+ validate: pass => pass.length >= 8
18
+ }];
19
+ const RULES = [{
20
+ code: "duplication",
21
+ validate: pass => {
22
+ for (let i = 0; i < pass.length; i++) {
23
+ const charCode = pass.charCodeAt(i);
24
+ const [firstNext, secondNext] = [pass.charCodeAt(i + 1) || 0, pass.charCodeAt(i + 2) || 0];
25
+ if (firstNext - charCode === 1 && secondNext - firstNext === 1) {
26
+ return false;
27
+ }
28
+ }
29
+ return true;
30
+ }
31
+ }, ...BASE_VALIDATION];
34
32
  function _PasswordInput(props, ref) {
35
- const [isPasswordVisibile, setIPV] = (0, react_1.useState)(false);
36
- const { passwordHidden, passwordVisible } = (0, OneUIProvider_1.useOneUIConfig)("component.passwordInput.iconSrc");
37
- function _validatePassword(password) {
38
- switch (props.mode) {
39
- case "creation":
40
- return RULES.reduce((isValid, R) => isValid && R.validate(password), true);
41
- case "comparision":
42
- return password === props.otherPassword;
43
- case "input":
44
- return BASE_VALIDATION.reduce((isValid, R) => isValid && R.validate(password), true);
45
- }
33
+ const [isPasswordVisibile, setIPV] = (0, _react.useState)(false);
34
+ const {
35
+ passwordHidden,
36
+ passwordVisible
37
+ } = (0, _OneUIProvider.useOneUIConfig)("component.passwordInput.iconSrc");
38
+ function _validatePassword(password) {
39
+ switch (props.mode) {
40
+ case "creation":
41
+ return RULES.reduce((isValid, R) => isValid && R.validate(password), true);
42
+ case "comparision":
43
+ return password === props.otherPassword;
44
+ case "input":
45
+ return BASE_VALIDATION.reduce((isValid, R) => isValid && R.validate(password), true);
46
46
  }
47
- (0, react_1.useImperativeHandle)(ref, () => ({
48
- validatePassword: (pass) => _validatePassword(pass),
49
- }));
50
- function _onChange(e) {
51
- const password = e.target.value;
52
- switch (props.mode) {
53
- case "comparision":
54
- case "creation":
55
- props.onChange(password, _validatePassword(password));
56
- break;
57
- case "input":
58
- props.onChange(password);
59
- break;
60
- }
47
+ }
48
+ (0, _react.useImperativeHandle)(ref, () => ({
49
+ validatePassword: pass => _validatePassword(pass)
50
+ }));
51
+ function _onChange(e) {
52
+ const password = e.target.value;
53
+ switch (props.mode) {
54
+ case "comparision":
55
+ case "creation":
56
+ props.onChange(password, _validatePassword(password));
57
+ break;
58
+ case "input":
59
+ props.onChange(password);
60
+ break;
61
61
  }
62
- return ((0, jsx_runtime_1.jsxs)("div", { className: `${PasswordInput_module_scss_1.default.inputContainer} ${PasswordInput_module_scss_1.default[props.mode]} ${PasswordInput_module_scss_1.default.icon}`, children: [(0, jsx_runtime_1.jsx)(Input_1.default, { value: props.value, onChange: _onChange, type: !isPasswordVisibile ? "password" : "", icon: {
63
- src: isPasswordVisibile ? passwordHidden : passwordVisible,
64
- onMouseLeave: () => setIPV(false),
65
- onMouseDown: () => setIPV(true),
66
- onMouseUp: () => setIPV(false),
67
- onTouchMove: () => setIPV(false),
68
- onTouchStart: () => setIPV(true),
69
- onTouchEnd: () => setIPV(false),
70
- }, error: props.mode === "comparision" && !_validatePassword(props.value)
71
- ? props.messages.passwordsAreDifferent
72
- : props.error, disabled: props.disabled, placeholder: props.placeholder }), props.mode === "creation" && ((0, jsx_runtime_1.jsxs)("div", { className: PasswordInput_module_scss_1.default.rules, "data-testid": "password-rules", children: [(0, jsx_runtime_1.jsx)(Text_1.default, { type: "caption", children: props.messages.rulesTitle }), RULES.map((R) => ((0, jsx_runtime_1.jsxs)(Text_1.default, { type: R.validate(props.value) ? "caption" : "error", children: ["- ", props.messages.invalidRules[R.code]] }, R.code)))] }))] }));
62
+ }
63
+ return /*#__PURE__*/_react.default.createElement("div", {
64
+ className: "".concat(_PasswordInputModule.default.inputContainer, " ").concat(_PasswordInputModule.default[props.mode], " ").concat(_PasswordInputModule.default.icon)
65
+ }, /*#__PURE__*/_react.default.createElement(_Input.default, {
66
+ value: props.value,
67
+ onChange: _onChange,
68
+ type: !isPasswordVisibile ? "password" : "",
69
+ icon: {
70
+ src: isPasswordVisibile ? passwordHidden : passwordVisible,
71
+ onMouseLeave: () => setIPV(false),
72
+ onMouseDown: () => setIPV(true),
73
+ onMouseUp: () => setIPV(false),
74
+ onTouchMove: () => setIPV(false),
75
+ onTouchStart: () => setIPV(true),
76
+ onTouchEnd: () => setIPV(false)
77
+ },
78
+ error: props.mode === "comparision" && !_validatePassword(props.value) ? props.messages.passwordsAreDifferent : props.error,
79
+ disabled: props.disabled,
80
+ placeholder: props.placeholder
81
+ }), props.mode === "creation" && /*#__PURE__*/_react.default.createElement("div", {
82
+ className: _PasswordInputModule.default.rules
83
+ }, /*#__PURE__*/_react.default.createElement(_Text.default, {
84
+ type: "caption"
85
+ }, props.messages.rulesTitle), RULES.map(R => /*#__PURE__*/_react.default.createElement(_Text.default, {
86
+ key: R.code,
87
+ type: R.validate(props.value) ? "caption" : "error"
88
+ }, "- ", props.messages.invalidRules[R.code]))));
73
89
  }
90
+
74
91
  /**
75
92
  * A password input component that shows and hides the password text
76
93
  * and provides validation for password strength or matching.
77
94
  */
78
- const PasswordInput = (0, react_1.forwardRef)(_PasswordInput);
79
- exports.default = PasswordInput;
80
- //# sourceMappingURL=PasswordInput.js.map
95
+ const PasswordInput = /*#__PURE__*/(0, _react.forwardRef)(_PasswordInput);
96
+ var _default = exports.default = PasswordInput;
97
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfT25lVUlQcm92aWRlciIsIl9JbnB1dCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfVGV4dCIsIl9QYXNzd29yZElucHV0TW9kdWxlIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIkJBU0VfVkFMSURBVElPTiIsImNvZGUiLCJ2YWxpZGF0ZSIsInBhc3MiLCJsZW5ndGgiLCJSVUxFUyIsImkiLCJjaGFyQ29kZSIsImNoYXJDb2RlQXQiLCJmaXJzdE5leHQiLCJzZWNvbmROZXh0IiwiX1Bhc3N3b3JkSW5wdXQiLCJwcm9wcyIsInJlZiIsImlzUGFzc3dvcmRWaXNpYmlsZSIsInNldElQViIsInVzZVN0YXRlIiwicGFzc3dvcmRIaWRkZW4iLCJwYXNzd29yZFZpc2libGUiLCJ1c2VPbmVVSUNvbmZpZyIsIl92YWxpZGF0ZVBhc3N3b3JkIiwicGFzc3dvcmQiLCJtb2RlIiwicmVkdWNlIiwiaXNWYWxpZCIsIlIiLCJvdGhlclBhc3N3b3JkIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInZhbGlkYXRlUGFzc3dvcmQiLCJfb25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwidmFsdWUiLCJvbkNoYW5nZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb25jYXQiLCJTdHlsZXMiLCJpbnB1dENvbnRhaW5lciIsImljb24iLCJ0eXBlIiwic3JjIiwib25Nb3VzZUxlYXZlIiwib25Nb3VzZURvd24iLCJvbk1vdXNlVXAiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCIsIm9uVG91Y2hFbmQiLCJlcnJvciIsIm1lc3NhZ2VzIiwicGFzc3dvcmRzQXJlRGlmZmVyZW50IiwiZGlzYWJsZWQiLCJwbGFjZWhvbGRlciIsInJ1bGVzIiwicnVsZXNUaXRsZSIsIm1hcCIsImludmFsaWRSdWxlcyIsIlBhc3N3b3JkSW5wdXQiLCJmb3J3YXJkUmVmIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvUGFzc3dvcmRJbnB1dC9QYXNzd29yZElucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgQ2hhbmdlRXZlbnQsXG4gIEZvcndhcmRlZFJlZixcbiAgZm9yd2FyZFJlZixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT25lVUlDb25maWcgfSBmcm9tIFwiLi4vLi4vY29udGV4dC9PbmVVSVByb3ZpZGVyXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcIi4uL0lucHV0XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vVGV4dFwiO1xuaW1wb3J0IFN0eWxlcyBmcm9tIFwiLi9QYXNzd29yZElucHV0Lm1vZHVsZS5zY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEFWQUlMQUJMRV9QQVNTV09SRF9WQUxJREFUSU9OX1JVTEVTID0gXCJzaXplXCIgfCBcImR1cGxpY2F0aW9uXCI7XG5cbmNvbnN0IEJBU0VfVkFMSURBVElPTiA9IFtcbiAgeyBjb2RlOiBcInNpemVcIiwgdmFsaWRhdGU6IChwYXNzOiBzdHJpbmcpID0+IHBhc3MubGVuZ3RoID49IDggfSxcbl0gYXMgY29uc3Q7XG5jb25zdCBSVUxFUyA9IFtcbiAge1xuICAgIGNvZGU6IFwiZHVwbGljYXRpb25cIixcbiAgICB2YWxpZGF0ZTogKHBhc3M6IHN0cmluZykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gcGFzcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBjb25zdCBbZmlyc3ROZXh0LCBzZWNvbmROZXh0XSA9IFtcbiAgICAgICAgICBwYXNzLmNoYXJDb2RlQXQoaSArIDEpIHx8IDAsXG4gICAgICAgICAgcGFzcy5jaGFyQ29kZUF0KGkgKyAyKSB8fCAwLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChmaXJzdE5leHQgLSBjaGFyQ29kZSA9PT0gMSAmJiBzZWNvbmROZXh0IC0gZmlyc3ROZXh0ID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxuICAuLi5CQVNFX1ZBTElEQVRJT04sXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBfUGFzc3dvcmRJbnB1dChcbiAgcHJvcHM6ICh7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgbW9kZTogXCJpbnB1dFwiO1xuICAgICAgICBvbkNoYW5nZTogKHBhc3N3b3JkOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6IFwiY3JlYXRpb25cIjtcbiAgICAgICAgb25DaGFuZ2U6IChwYXNzd29yZDogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKSA9PiB2b2lkO1xuICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgIGludmFsaWRSdWxlczogeyBbciBpbiBBVkFJTEFCTEVfUEFTU1dPUkRfVkFMSURBVElPTl9SVUxFU106IHN0cmluZyB9O1xuICAgICAgICAgIHJ1bGVzVGl0bGU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbW9kZTogXCJjb21wYXJpc2lvblwiO1xuICAgICAgICBvdGhlclBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICAgIG9uQ2hhbmdlOiAocGFzc3dvcmQ6IHN0cmluZywgaXNFcXVhbDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXNzd29yZHNBcmVEaWZmZXJlbnQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgKSkgJlxuICAgIE9taXQ8UmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIElucHV0PiwgXCJ2YWx1ZVwiIHwgXCJvbkNoYW5nZVwiIHwgXCJyZWZcIj4sXG4gIHJlZjogRm9yd2FyZGVkUmVmPHsgdmFsaWRhdGVQYXNzd29yZDogKHBhc3M6IHN0cmluZykgPT4gYm9vbGVhbiB9PlxuKSB7XG4gIGNvbnN0IFtpc1Bhc3N3b3JkVmlzaWJpbGUsIHNldElQVl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgcGFzc3dvcmRIaWRkZW4sIHBhc3N3b3JkVmlzaWJsZSB9ID0gdXNlT25lVUlDb25maWcoXG4gICAgXCJjb21wb25lbnQucGFzc3dvcmRJbnB1dC5pY29uU3JjXCJcbiAgKTtcbiAgZnVuY3Rpb24gX3ZhbGlkYXRlUGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocHJvcHMubW9kZSkge1xuICAgICAgY2FzZSBcImNyZWF0aW9uXCI6XG4gICAgICAgIHJldHVybiBSVUxFUy5yZWR1Y2UoXG4gICAgICAgICAgKGlzVmFsaWQsIFIpID0+IGlzVmFsaWQgJiYgUi52YWxpZGF0ZShwYXNzd29yZCksXG4gICAgICAgICAgdHJ1ZSBhcyBib29sZWFuXG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiY29tcGFyaXNpb25cIjpcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkID09PSBwcm9wcy5vdGhlclBhc3N3b3JkO1xuICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgIHJldHVybiBCQVNFX1ZBTElEQVRJT04ucmVkdWNlKFxuICAgICAgICAgIChpc1ZhbGlkLCBSKSA9PiBpc1ZhbGlkICYmIFIudmFsaWRhdGUocGFzc3dvcmQpLFxuICAgICAgICAgIHRydWUgYXMgYm9vbGVhblxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHZhbGlkYXRlUGFzc3dvcmQ6IChwYXNzKSA9PiBfdmFsaWRhdGVQYXNzd29yZChwYXNzKSxcbiAgfSkpO1xuXG4gIGZ1bmN0aW9uIF9vbkNoYW5nZShlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pikge1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZS50YXJnZXQudmFsdWU7XG4gICAgc3dpdGNoIChwcm9wcy5tb2RlKSB7XG4gICAgICBjYXNlIFwiY29tcGFyaXNpb25cIjpcbiAgICAgIGNhc2UgXCJjcmVhdGlvblwiOlxuICAgICAgICBwcm9wcy5vbkNoYW5nZShwYXNzd29yZCwgX3ZhbGlkYXRlUGFzc3dvcmQocGFzc3dvcmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgcHJvcHMub25DaGFuZ2UocGFzc3dvcmQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YCR7U3R5bGVzLmlucHV0Q29udGFpbmVyfSAke1N0eWxlc1twcm9wcy5tb2RlXX0gJHtcbiAgICAgICAgU3R5bGVzLmljb25cbiAgICAgIH1gfVxuICAgID5cbiAgICAgIDxJbnB1dFxuICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXtfb25DaGFuZ2V9XG4gICAgICAgIHR5cGU9eyFpc1Bhc3N3b3JkVmlzaWJpbGUgPyBcInBhc3N3b3JkXCIgOiBcIlwifVxuICAgICAgICBpY29uPXt7XG4gICAgICAgICAgc3JjOiBpc1Bhc3N3b3JkVmlzaWJpbGUgPyBwYXNzd29yZEhpZGRlbiA6IHBhc3N3b3JkVmlzaWJsZSxcbiAgICAgICAgICBvbk1vdXNlTGVhdmU6ICgpID0+IHNldElQVihmYWxzZSksXG4gICAgICAgICAgb25Nb3VzZURvd246ICgpID0+IHNldElQVih0cnVlKSxcbiAgICAgICAgICBvbk1vdXNlVXA6ICgpID0+IHNldElQVihmYWxzZSksXG4gICAgICAgICAgb25Ub3VjaE1vdmU6ICgpID0+IHNldElQVihmYWxzZSksXG4gICAgICAgICAgb25Ub3VjaFN0YXJ0OiAoKSA9PiBzZXRJUFYodHJ1ZSksXG4gICAgICAgICAgb25Ub3VjaEVuZDogKCkgPT4gc2V0SVBWKGZhbHNlKSxcbiAgICAgICAgfX1cbiAgICAgICAgZXJyb3I9e1xuICAgICAgICAgIHByb3BzLm1vZGUgPT09IFwiY29tcGFyaXNpb25cIiAmJiAhX3ZhbGlkYXRlUGFzc3dvcmQocHJvcHMudmFsdWUpXG4gICAgICAgICAgICA/IHByb3BzLm1lc3NhZ2VzLnBhc3N3b3Jkc0FyZURpZmZlcmVudFxuICAgICAgICAgICAgOiBwcm9wcy5lcnJvclxuICAgICAgICB9XG4gICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgLz5cbiAgICAgIHtwcm9wcy5tb2RlID09PSBcImNyZWF0aW9uXCIgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17U3R5bGVzLnJ1bGVzfSBkYXRhLXRlc3RpZD1cInBhc3N3b3JkLXJ1bGVzXCI+XG4gICAgICAgICAgPFRleHQgdHlwZT1cImNhcHRpb25cIj57cHJvcHMubWVzc2FnZXMucnVsZXNUaXRsZX08L1RleHQ+XG4gICAgICAgICAge1JVTEVTLm1hcCgoUikgPT4gKFxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAga2V5PXtSLmNvZGV9XG4gICAgICAgICAgICAgIHR5cGU9e1IudmFsaWRhdGUocHJvcHMudmFsdWUpID8gXCJjYXB0aW9uXCIgOiBcImVycm9yXCJ9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIC0ge3Byb3BzLm1lc3NhZ2VzLmludmFsaWRSdWxlc1tSLmNvZGVdfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8qKlxuICogQSBwYXNzd29yZCBpbnB1dCBjb21wb25lbnQgdGhhdCBzaG93cyBhbmQgaGlkZXMgdGhlIHBhc3N3b3JkIHRleHRcbiAqIGFuZCBwcm92aWRlcyB2YWxpZGF0aW9uIGZvciBwYXNzd29yZCBzdHJlbmd0aCBvciBtYXRjaGluZy5cbiAqL1xuY29uc3QgUGFzc3dvcmRJbnB1dCA9IGZvcndhcmRSZWYoX1Bhc3N3b3JkSW5wdXQpO1xuZXhwb3J0IGRlZmF1bHQgUGFzc3dvcmRJbnB1dDsiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU9BLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLG9CQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFBaUQsU0FBQUcsdUJBQUFHLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFBQSxTQUFBRyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBWCx3QkFBQU8sR0FBQSxFQUFBSSxXQUFBLFNBQUFBLFdBQUEsSUFBQUosR0FBQSxJQUFBQSxHQUFB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