cubing 0.20.1 → 0.21.0-pre11

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 (760) hide show
  1. package/README.md +6 -9
  2. package/dist/.DS_Store +0 -0
  3. package/dist/bin/puzzle-geometry-bin.js +1124 -1128
  4. package/dist/bin/puzzle-geometry-bin.js.map +3 -3
  5. package/dist/bundle-global/cubing.bundle-global.js +3978 -3587
  6. package/dist/esm/.DS_Store +0 -0
  7. package/dist/esm/{2x2x2.kpuzzle.json_-ZLJSYD5K.js → 2x2x2.kpuzzle.json-JOGUSQ4N.js} +3 -3
  8. package/dist/esm/{2x2x2.kpuzzle.json_-ZLJSYD5K.js.map → 2x2x2.kpuzzle.json-JOGUSQ4N.js.map} +1 -1
  9. package/dist/esm/{2x2x2.kpuzzle.svg-BNXPAM3A.js → 2x2x2.kpuzzle.svg-CQF2FTV7.js} +2 -2
  10. package/dist/esm/{2x2x2.kpuzzle.svg-BNXPAM3A.js.map → 2x2x2.kpuzzle.svg-CQF2FTV7.js.map} +0 -0
  11. package/dist/esm/3d-BRT2MZMN.js +39 -0
  12. package/dist/esm/3d-BRT2MZMN.js.map +7 -0
  13. package/dist/esm/{3x3x3-ll.kpuzzle.svg-EC42JHOH.js → 3x3x3-ll.kpuzzle.svg-53CBPG5O.js} +2 -2
  14. package/dist/esm/{3x3x3-ll.kpuzzle.svg-EC42JHOH.js.map → 3x3x3-ll.kpuzzle.svg-53CBPG5O.js.map} +0 -0
  15. package/dist/esm/{3x3x3.kpuzzle.svg-DUKG2WHC.js → 3x3x3.kpuzzle.svg-ERSSH66P.js} +2 -2
  16. package/dist/esm/{3x3x3.kpuzzle.svg-DUKG2WHC.js.map → 3x3x3.kpuzzle.svg-ERSSH66P.js.map} +0 -0
  17. package/dist/esm/alg/index.js +2 -2
  18. package/dist/esm/bluetooth/index.js +13 -11
  19. package/dist/esm/bluetooth/index.js.map +2 -2
  20. package/dist/esm/chunk-BGFVB2OS.js +740 -0
  21. package/dist/esm/chunk-BGFVB2OS.js.map +7 -0
  22. package/dist/esm/{chunk-YNB7QLBF.js → chunk-BU5PUJK3.js} +9 -10
  23. package/dist/esm/chunk-BU5PUJK3.js.map +7 -0
  24. package/dist/esm/chunk-EM5F24AO.js +2511 -0
  25. package/dist/esm/chunk-EM5F24AO.js.map +7 -0
  26. package/dist/esm/{chunk-KKSDHNLH.js → chunk-H7EP5SIJ.js} +49 -71
  27. package/dist/esm/chunk-H7EP5SIJ.js.map +7 -0
  28. package/dist/esm/{chunk-2GRKPQQL.js → chunk-RE7MIN5R.js} +2 -2
  29. package/dist/esm/{chunk-2GRKPQQL.js.map → chunk-RE7MIN5R.js.map} +0 -0
  30. package/dist/esm/{chunk-WJ7AVUI7.js → chunk-WO2AXYFE.js} +12 -1
  31. package/dist/esm/{chunk-WJ7AVUI7.js.map → chunk-WO2AXYFE.js.map} +0 -0
  32. package/dist/esm/{chunk-CWVB5RRW.js → chunk-YV3RT5PX.js} +625 -1282
  33. package/dist/esm/chunk-YV3RT5PX.js.map +7 -0
  34. package/dist/esm/{clock.kpuzzle.json_-PXORG6YF.js → clock.kpuzzle.json-EKWRMHJM.js} +3 -3
  35. package/dist/esm/{clock.kpuzzle.json_-PXORG6YF.js.map → clock.kpuzzle.json-EKWRMHJM.js.map} +1 -1
  36. package/dist/esm/{clock.kpuzzle.svg-E52B5OQV.js → clock.kpuzzle.svg-B7TMN3SY.js} +2 -2
  37. package/dist/esm/{clock.kpuzzle.svg-E52B5OQV.js.map → clock.kpuzzle.svg-B7TMN3SY.js.map} +0 -0
  38. package/dist/esm/esm-test-worker.js +2 -2
  39. package/dist/esm/esm-test-worker.js.map +1 -1
  40. package/dist/esm/kpuzzle/index.js +5 -3
  41. package/dist/esm/{node-SIGYKAZG.js → node-BSAQKO3G.js} +2 -2
  42. package/dist/esm/{node-SIGYKAZG.js.map → node-BSAQKO3G.js.map} +0 -0
  43. package/dist/esm/{node-BHGOVUN3.js → node-WEHVBEKP.js} +2 -2
  44. package/dist/esm/{node-BHGOVUN3.js.map → node-WEHVBEKP.js.map} +0 -0
  45. package/dist/esm/notation/index.js +3 -3
  46. package/dist/esm/protocol/index.js +3 -3
  47. package/dist/esm/puzzle-geometry/index.js +1085 -1179
  48. package/dist/esm/puzzle-geometry/index.js.map +3 -3
  49. package/dist/esm/puzzles/index.js +10 -4
  50. package/dist/esm/{pyraminx.kpuzzle.svg-QKUJX37T.js → pyraminx.kpuzzle.svg-QBBMZVDY.js} +2 -2
  51. package/dist/esm/{pyraminx.kpuzzle.svg-QKUJX37T.js.map → pyraminx.kpuzzle.svg-QBBMZVDY.js.map} +0 -0
  52. package/dist/esm/scramble/index.js +5 -4
  53. package/dist/esm/search/index.js +7 -4
  54. package/dist/esm/{sq1-hyperorbit.kpuzzle.json_-7KW5LSXC.js → sq1-hyperorbit.kpuzzle.json-N3FGCPML.js} +3 -3
  55. package/dist/esm/{sq1-hyperorbit.kpuzzle.json_-7KW5LSXC.js.map → sq1-hyperorbit.kpuzzle.json-N3FGCPML.js.map} +1 -1
  56. package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-7Y7N37NN.js → sq1-hyperorbit.kpuzzle.svg-ID57EER7.js} +2 -2
  57. package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-7Y7N37NN.js.map → sq1-hyperorbit.kpuzzle.svg-ID57EER7.js.map} +0 -0
  58. package/dist/esm/stream/index.js +3 -3
  59. package/dist/esm/stream/index.js.map +2 -2
  60. package/dist/esm/twisty/index.js +4445 -3213
  61. package/dist/esm/twisty/index.js.map +3 -3
  62. package/dist/esm/worker-inside-generated-string-LA5JHD4B.js +2831 -0
  63. package/dist/esm/worker-inside-generated-string-LA5JHD4B.js.map +7 -0
  64. package/dist/types/alg/Alg.d.ts +88 -0
  65. package/dist/types/alg/Alg.d.ts.map +1 -1
  66. package/dist/types/alg/Alg.spec.d.ts +2 -0
  67. package/dist/types/alg/Alg.spec.d.ts.map +1 -0
  68. package/dist/types/alg/common.d.ts.map +1 -1
  69. package/dist/types/alg/operation.spec.d.ts +2 -0
  70. package/dist/types/alg/operation.spec.d.ts.map +1 -0
  71. package/dist/types/alg/parse.spec.d.ts +2 -0
  72. package/dist/types/alg/parse.spec.d.ts.map +1 -0
  73. package/dist/types/alg/test/alg-comparison.d.ts.map +1 -1
  74. package/dist/types/alg/test/alg.spec.d.ts +2 -0
  75. package/dist/types/alg/test/alg.spec.d.ts.map +1 -0
  76. package/dist/types/alg/units/leaves/LineComment.spec.d.ts +2 -0
  77. package/dist/types/alg/units/leaves/LineComment.spec.d.ts.map +1 -0
  78. package/dist/types/alg/units/leaves/Move.spec.d.ts +2 -0
  79. package/dist/types/alg/units/leaves/Move.spec.d.ts.map +1 -0
  80. package/dist/types/alg/url.spec.d.ts +2 -0
  81. package/dist/types/alg/url.spec.d.ts.map +1 -0
  82. package/dist/types/bluetooth/smart-puzzle/bluetooth-puzzle.d.ts +1 -1
  83. package/dist/types/bluetooth/smart-puzzle/bluetooth-puzzle.d.ts.map +1 -1
  84. package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts +5 -0
  85. package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts.map +1 -0
  86. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts +3 -0
  87. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts.map +1 -0
  88. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts +2 -0
  89. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts.map +1 -0
  90. package/dist/types/kpuzzle/canon.spec.d.ts +2 -0
  91. package/dist/types/kpuzzle/canon.spec.d.ts.map +1 -0
  92. package/dist/types/kpuzzle/index.d.ts +1 -0
  93. package/dist/types/kpuzzle/index.d.ts.map +1 -1
  94. package/dist/types/kpuzzle/kpuzzle.spec.d.ts +2 -0
  95. package/dist/types/kpuzzle/kpuzzle.spec.d.ts.map +1 -0
  96. package/dist/types/kpuzzle/prunetable.spec.d.ts +2 -0
  97. package/dist/types/kpuzzle/prunetable.spec.d.ts.map +1 -0
  98. package/dist/types/kpuzzle/svg.d.ts.map +1 -1
  99. package/dist/types/kpuzzle/transformations.spec.d.ts +2 -0
  100. package/dist/types/kpuzzle/transformations.spec.d.ts.map +1 -0
  101. package/dist/types/protocol/binary/binary3x3x3.spec.d.ts +2 -0
  102. package/dist/types/protocol/binary/binary3x3x3.spec.d.ts.map +1 -0
  103. package/dist/types/protocol/binary/hex.spec.d.ts +2 -0
  104. package/dist/types/protocol/binary/hex.spec.d.ts.map +1 -0
  105. package/dist/types/protocol/binary/orbit-indexing.spec.d.ts +2 -0
  106. package/dist/types/protocol/binary/orbit-indexing.spec.d.ts.map +1 -0
  107. package/dist/types/puzzle-geometry/Options.d.ts +45 -1
  108. package/dist/types/puzzle-geometry/Options.d.ts.map +1 -1
  109. package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts +2 -0
  110. package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts.map +1 -0
  111. package/dist/types/puzzle-geometry/PermOriSet.d.ts +39 -39
  112. package/dist/types/puzzle-geometry/PermOriSet.d.ts.map +1 -1
  113. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts +118 -110
  114. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts.map +1 -1
  115. package/dist/types/puzzle-geometry/Quat.d.ts +0 -11
  116. package/dist/types/puzzle-geometry/Quat.d.ts.map +1 -1
  117. package/dist/types/puzzle-geometry/Quat.spec.d.ts +2 -0
  118. package/dist/types/puzzle-geometry/Quat.spec.d.ts.map +1 -0
  119. package/dist/types/puzzle-geometry/SchreierSims.d.ts.map +1 -1
  120. package/dist/types/puzzle-geometry/index.d.ts +2 -4
  121. package/dist/types/puzzle-geometry/index.d.ts.map +1 -1
  122. package/dist/types/puzzle-geometry/interfaces.d.ts +1 -21
  123. package/dist/types/puzzle-geometry/interfaces.d.ts.map +1 -1
  124. package/dist/types/puzzle-geometry/orientcenters.spec.d.ts +2 -0
  125. package/dist/types/puzzle-geometry/orientcenters.spec.d.ts.map +1 -0
  126. package/dist/types/puzzles/async/async-pg3d.d.ts.map +1 -1
  127. package/dist/types/puzzles/customPGPuzzleLoader.d.ts +12 -0
  128. package/dist/types/puzzles/customPGPuzzleLoader.d.ts.map +1 -0
  129. package/dist/types/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.d.ts → 2x2x2.kpuzzle.json.d.ts} +1 -1
  130. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json.d.ts.map +1 -0
  131. package/dist/types/puzzles/implementations/3x3x3/index.d.ts.map +1 -1
  132. package/dist/types/puzzles/implementations/clock/{clock.kpuzzle.json_.d.ts → clock.kpuzzle.json.d.ts} +1 -1
  133. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json.d.ts.map +1 -0
  134. package/dist/types/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.d.ts → pyraminx.kpuzzle.json.d.ts} +1 -1
  135. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json.d.ts.map +1 -0
  136. package/dist/types/puzzles/implementations/square1/index.d.ts.map +1 -1
  137. package/dist/types/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.d.ts → sq1-hyperorbit.kpuzzle.json.d.ts} +1 -1
  138. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json.d.ts.map +1 -0
  139. package/dist/types/puzzles/index.d.ts +4 -2
  140. package/dist/types/puzzles/index.d.ts.map +1 -1
  141. package/dist/types/puzzles/stickerings/appearance.d.ts +9 -9
  142. package/dist/types/puzzles/stickerings/appearance.d.ts.map +1 -1
  143. package/dist/types/puzzles/stickerings/cube-stickerings.d.ts.map +1 -1
  144. package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts +3 -0
  145. package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts.map +1 -0
  146. package/dist/types/search/index.d.ts +1 -1
  147. package/dist/types/search/index.d.ts.map +1 -1
  148. package/dist/types/search/inside/api.d.ts +2 -1
  149. package/dist/types/search/inside/api.d.ts.map +1 -1
  150. package/dist/types/search/inside/api.spec.d.ts +2 -0
  151. package/dist/types/search/inside/api.spec.d.ts.map +1 -0
  152. package/dist/types/search/inside/solve/parseSGS.d.ts.map +1 -1
  153. package/dist/types/search/inside/solve/puzzles/3x3x3/filter.d.ts.map +1 -1
  154. package/dist/types/search/inside/solve/puzzles/3x3x3/index.d.ts.map +1 -1
  155. package/dist/types/search/inside/solve/puzzles/megaminx.sgs.json.d.ts.map +1 -1
  156. package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts +2 -0
  157. package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts.map +1 -0
  158. package/dist/types/search/inside/solve/puzzles/skewb.sgs.json.d.ts.map +1 -1
  159. package/dist/types/search/inside/solve/tremble.d.ts.map +1 -1
  160. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts +4 -31
  161. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts.map +1 -1
  162. package/dist/types/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.d.ts.map +1 -1
  163. package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts +3 -0
  164. package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts.map +1 -0
  165. package/dist/types/search/inside/solve/vendor/random-uint-below/get-random-values.d.ts.map +1 -1
  166. package/dist/types/search/inside/solve/vendor/random-uint-below/random-int.d.ts.map +1 -1
  167. package/dist/types/search/inside/solve/vendor/sq12phase/scramble_sq1.d.ts.map +1 -1
  168. package/dist/types/search/instantiator.d.ts.map +1 -1
  169. package/dist/types/search/outside.d.ts +4 -2
  170. package/dist/types/search/outside.d.ts.map +1 -1
  171. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  172. package/dist/types/search/worker-inside-generated-string.d.ts.map +1 -1
  173. package/dist/types/stream/twizzle/TwizzleStream.d.ts +9 -8
  174. package/dist/types/stream/twizzle/TwizzleStream.d.ts.map +1 -1
  175. package/dist/types/stream/websocket-proxy.d.ts +1 -1
  176. package/dist/types/stream/websocket-proxy.d.ts.map +1 -1
  177. package/dist/types/twisty/controllers/TwistyAnimationController.d.ts +34 -0
  178. package/dist/types/twisty/controllers/TwistyAnimationController.d.ts.map +1 -0
  179. package/dist/types/twisty/controllers/TwistyPlayerController.d.ts +16 -0
  180. package/dist/types/twisty/controllers/TwistyPlayerController.d.ts.map +1 -0
  181. package/dist/types/twisty/heavy-code-imports/3d.d.ts +3 -0
  182. package/dist/types/twisty/heavy-code-imports/3d.d.ts.map +1 -0
  183. package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts +12 -0
  184. package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts.map +1 -0
  185. package/dist/types/twisty/index.d.ts +20 -15
  186. package/dist/types/twisty/index.d.ts.map +1 -1
  187. package/dist/types/twisty/model/PromiseFreshener.d.ts +14 -0
  188. package/dist/types/twisty/model/PromiseFreshener.d.ts.map +1 -0
  189. package/dist/types/twisty/model/TwistyPlayerModel.d.ts +84 -0
  190. package/dist/types/twisty/model/TwistyPlayerModel.d.ts.map +1 -0
  191. package/dist/types/twisty/model/UserVisibleErrorTracker.d.ts +11 -0
  192. package/dist/types/twisty/model/UserVisibleErrorTracker.d.ts.map +1 -0
  193. package/dist/types/twisty/model/helpers.d.ts +5 -0
  194. package/dist/types/twisty/model/helpers.d.ts.map +1 -0
  195. package/dist/types/twisty/model/props/TwistyProp.d.ts +60 -0
  196. package/dist/types/twisty/model/props/TwistyProp.d.ts.map +1 -0
  197. package/dist/types/twisty/model/props/TwistyProp.spec.d.ts +5 -0
  198. package/dist/types/twisty/model/props/TwistyProp.spec.d.ts.map +1 -0
  199. package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts +28 -0
  200. package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts.map +1 -0
  201. package/dist/types/twisty/model/props/general/URLProp.d.ts +6 -0
  202. package/dist/types/twisty/model/props/general/URLProp.d.ts.map +1 -0
  203. package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts +7 -0
  204. package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts.map +1 -0
  205. package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts +10 -0
  206. package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts.map +1 -0
  207. package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts +6 -0
  208. package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts.map +1 -0
  209. package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts +27 -0
  210. package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts.map +1 -0
  211. package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts +14 -0
  212. package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts.map +1 -0
  213. package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts +15 -0
  214. package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts.map +1 -0
  215. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts +12 -0
  216. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts.map +1 -0
  217. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts +17 -0
  218. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts.map +1 -0
  219. package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts +15 -0
  220. package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts.map +1 -0
  221. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts +17 -0
  222. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts.map +1 -0
  223. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts +12 -0
  224. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts.map +1 -0
  225. package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts +15 -0
  226. package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts.map +1 -0
  227. package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts +12 -0
  228. package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts.map +1 -0
  229. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts +13 -0
  230. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts.map +1 -0
  231. package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts +6 -0
  232. package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts.map +1 -0
  233. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts +11 -0
  234. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts.map +1 -0
  235. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts +6 -0
  236. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts.map +1 -0
  237. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts +11 -0
  238. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts.map +1 -0
  239. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +6 -0
  240. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts.map +1 -0
  241. package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts +13 -0
  242. package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts.map +1 -0
  243. package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts +25 -0
  244. package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts.map +1 -0
  245. package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts +23 -0
  246. package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts.map +1 -0
  247. package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts +15 -0
  248. package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts.map +1 -0
  249. package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts +6 -0
  250. package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts.map +1 -0
  251. package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts +16 -0
  252. package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts.map +1 -0
  253. package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts +7 -0
  254. package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts.map +1 -0
  255. package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts +7 -0
  256. package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts.map +1 -0
  257. package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts +22 -0
  258. package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts.map +1 -0
  259. package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts +7 -0
  260. package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts.map +1 -0
  261. package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts +6 -0
  262. package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts.map +1 -0
  263. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts +16 -0
  264. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts.map +1 -0
  265. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts +15 -0
  266. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts.map +1 -0
  267. package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts +11 -0
  268. package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts.map +1 -0
  269. package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts +7 -0
  270. package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts.map +1 -0
  271. package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts +7 -0
  272. package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts.map +1 -0
  273. package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts +13 -0
  274. package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts.map +1 -0
  275. package/dist/types/twisty/{animation → old/animation}/RenderScheduler.d.ts +3 -0
  276. package/dist/types/twisty/old/animation/RenderScheduler.d.ts.map +1 -0
  277. package/dist/types/twisty/{animation → old/animation}/Timeline.d.ts +0 -0
  278. package/dist/types/twisty/old/animation/Timeline.d.ts.map +1 -0
  279. package/dist/types/twisty/{animation → old/animation}/cursor/AlgCursor.d.ts +4 -4
  280. package/dist/types/twisty/old/animation/cursor/AlgCursor.d.ts.map +1 -0
  281. package/dist/types/twisty/{animation → old/animation}/cursor/CursorTypes.d.ts +4 -4
  282. package/dist/types/twisty/old/animation/cursor/CursorTypes.d.ts.map +1 -0
  283. package/dist/types/twisty/{animation → old/animation}/easing.d.ts +0 -0
  284. package/dist/types/twisty/old/animation/easing.d.ts.map +1 -0
  285. package/dist/types/twisty/{animation → old/animation}/indexer/AlgDuration.d.ts +1 -1
  286. package/dist/types/twisty/old/animation/indexer/AlgDuration.d.ts.map +1 -0
  287. package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts +36 -0
  288. package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts.map +1 -0
  289. package/dist/types/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.d.ts +3 -3
  290. package/dist/types/twisty/old/animation/indexer/SimpleAlgIndexer.d.ts.map +1 -0
  291. package/dist/types/twisty/{animation → old/animation}/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts +6 -5
  292. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +1 -0
  293. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts +22 -0
  294. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts.map +1 -0
  295. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts +26 -0
  296. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +1 -0
  297. package/dist/types/twisty/{animation → old/animation}/indexer/tree/AlgWalker.d.ts +2 -2
  298. package/dist/types/twisty/old/animation/indexer/tree/AlgWalker.d.ts.map +1 -0
  299. package/dist/types/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.d.ts +3 -3
  300. package/dist/types/twisty/old/animation/indexer/tree/TreeAlgIndexer.d.ts.map +1 -0
  301. package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts +3 -0
  302. package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts.map +1 -0
  303. package/dist/types/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.d.ts +1 -1
  304. package/dist/types/twisty/old/animation/stream/timeline-move-calculation-draft.d.ts.map +1 -0
  305. package/dist/types/twisty/{dom/TwistyAlgViewer.css_.d.ts → old/dom/TwistyAlgViewerV1.css.d.ts} +1 -1
  306. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.css.d.ts.map +1 -0
  307. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts +52 -0
  308. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts.map +1 -0
  309. package/dist/types/twisty/{dom/TwistyPlayer.css_.d.ts → old/dom/TwistyPlayer.css.d.ts} +1 -1
  310. package/dist/types/twisty/old/dom/TwistyPlayer.css.d.ts.map +1 -0
  311. package/dist/types/twisty/{dom → old/dom}/TwistyPlayer.d.ts +8 -8
  312. package/dist/types/twisty/old/dom/TwistyPlayer.d.ts.map +1 -0
  313. package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts +5 -0
  314. package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts.map +1 -0
  315. package/dist/types/twisty/{dom → old/dom}/TwistyPlayerConfig.d.ts +9 -5
  316. package/dist/types/twisty/old/dom/TwistyPlayerConfig.d.ts.map +1 -0
  317. package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts +2 -0
  318. package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts.map +1 -0
  319. package/dist/types/twisty/{dom/controls/TwistyScrubber.css_.d.ts → old/dom/controls/TwistyScrubber.css.d.ts} +1 -1
  320. package/dist/types/twisty/old/dom/controls/TwistyScrubber.css.d.ts.map +1 -0
  321. package/dist/types/twisty/{dom → old/dom}/controls/TwistyScrubber.d.ts +1 -1
  322. package/dist/types/twisty/old/dom/controls/TwistyScrubber.d.ts.map +1 -0
  323. package/dist/types/twisty/{dom/controls/buttons.css_.d.ts → old/dom/controls/buttons.css.d.ts} +1 -1
  324. package/dist/types/twisty/old/dom/controls/buttons.css.d.ts.map +1 -0
  325. package/dist/types/twisty/{dom → old/dom}/controls/buttons.d.ts +1 -1
  326. package/dist/types/twisty/old/dom/controls/buttons.d.ts.map +1 -0
  327. package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts +5 -0
  328. package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts.map +1 -0
  329. package/dist/types/twisty/{dom → old/dom}/element/ClassListManager.d.ts +0 -0
  330. package/dist/types/twisty/old/dom/element/ClassListManager.d.ts.map +1 -0
  331. package/dist/types/twisty/{dom → old/dom}/element/ElementConfig.d.ts +1 -1
  332. package/dist/types/twisty/old/dom/element/ElementConfig.d.ts.map +1 -0
  333. package/dist/types/twisty/{dom → old/dom}/element/ManagedCustomElement.d.ts +0 -0
  334. package/dist/types/twisty/old/dom/element/ManagedCustomElement.d.ts.map +1 -0
  335. package/dist/types/twisty/{dom → old/dom}/element/node-custom-element-shims.d.ts +0 -0
  336. package/dist/types/twisty/old/dom/element/node-custom-element-shims.d.ts.map +1 -0
  337. package/dist/types/twisty/{dom/stream/TwistyStreamSource.css_.d.ts → old/dom/stream/TwistyStreamSource.css.d.ts} +1 -1
  338. package/dist/types/twisty/old/dom/stream/TwistyStreamSource.css.d.ts.map +1 -0
  339. package/dist/types/twisty/{dom → old/dom}/stream/TwistyStreamSource.d.ts +0 -0
  340. package/dist/types/twisty/old/dom/stream/TwistyStreamSource.d.ts.map +1 -0
  341. package/dist/types/twisty/{dom → old/dom}/viewers/Twisty2DSVG.d.ts +2 -2
  342. package/dist/types/twisty/old/dom/viewers/Twisty2DSVG.d.ts.map +1 -0
  343. package/dist/types/twisty/{dom/viewers/Twisty2DSVGView.css_.d.ts → old/dom/viewers/Twisty2DSVGView.css.d.ts} +1 -1
  344. package/dist/types/twisty/old/dom/viewers/Twisty2DSVGView.css.d.ts.map +1 -0
  345. package/dist/types/twisty/{dom/viewers/Twisty3DCanvas.css_.d.ts → old/dom/viewers/Twisty3DCanvas.css.d.ts} +1 -1
  346. package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.css.d.ts.map +1 -0
  347. package/dist/types/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.d.ts +1 -2
  348. package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.d.ts.map +1 -0
  349. package/dist/types/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.d.ts +0 -0
  350. package/dist/types/twisty/old/dom/viewers/TwistyOrbitControls.d.ts.map +1 -0
  351. package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts +4 -0
  352. package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts.map +1 -0
  353. package/dist/types/twisty/{dom/viewers/TwistyViewerWrapper.css_.d.ts → old/dom/viewers/TwistyViewerWrapper.css.d.ts} +1 -1
  354. package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.css.d.ts.map +1 -0
  355. package/dist/types/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.d.ts +0 -0
  356. package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.d.ts.map +1 -0
  357. package/dist/types/twisty/old/dom/viewers/canvas.d.ts +3 -0
  358. package/dist/types/twisty/old/dom/viewers/canvas.d.ts.map +1 -0
  359. package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts +29 -0
  360. package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts.map +1 -0
  361. package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts +16 -0
  362. package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts.map +1 -0
  363. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts +20 -0
  364. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts.map +1 -0
  365. package/dist/types/twisty/views/3D/RendererPool.d.ts +4 -0
  366. package/dist/types/twisty/views/3D/RendererPool.d.ts.map +1 -0
  367. package/dist/types/twisty/{3D → views/3D}/TAU.d.ts +0 -0
  368. package/dist/types/twisty/views/3D/TAU.d.ts.map +1 -0
  369. package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts +17 -0
  370. package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts.map +1 -0
  371. package/dist/types/twisty/{3D → views/3D}/Twisty3DRenderTarget.d.ts +0 -0
  372. package/dist/types/twisty/views/3D/Twisty3DRenderTarget.d.ts.map +1 -0
  373. package/dist/types/twisty/{3D → views/3D}/Twisty3DScene.d.ts +0 -0
  374. package/dist/types/twisty/views/3D/Twisty3DScene.d.ts.map +1 -0
  375. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts +28 -0
  376. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts.map +1 -0
  377. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts +32 -0
  378. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts.map +1 -0
  379. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts +41 -0
  380. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts.map +1 -0
  381. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts +5 -0
  382. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts.map +1 -0
  383. package/dist/types/twisty/{3D → views/3D}/puzzles/Cube3D.d.ts +11 -7
  384. package/dist/types/twisty/views/3D/puzzles/Cube3D.d.ts.map +1 -0
  385. package/dist/types/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.d.ts +2 -2
  386. package/dist/types/twisty/views/3D/puzzles/KPuzzleWrapper.d.ts.map +1 -0
  387. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts +57 -0
  388. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts.map +1 -0
  389. package/dist/types/twisty/{3D → views/3D}/puzzles/Twisty3DPuzzle.d.ts +1 -1
  390. package/dist/types/twisty/views/3D/puzzles/Twisty3DPuzzle.d.ts.map +1 -0
  391. package/dist/types/twisty/{3D → views/3D}/puzzles/TwistyTestBox.d.ts +2 -2
  392. package/dist/types/twisty/views/3D/puzzles/TwistyTestBox.d.ts.map +1 -0
  393. package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts +18 -0
  394. package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts.map +1 -0
  395. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts +3 -0
  396. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts.map +1 -0
  397. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts +40 -0
  398. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts.map +1 -0
  399. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts +5 -0
  400. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts.map +1 -0
  401. package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts +61 -0
  402. package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts.map +1 -0
  403. package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts +3 -0
  404. package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts.map +1 -0
  405. package/dist/types/twisty/{dom → views}/TwistyAlgViewer.d.ts +6 -6
  406. package/dist/types/twisty/views/TwistyAlgViewer.d.ts.map +1 -0
  407. package/dist/types/twisty/views/TwistyPlayer.d.ts +97 -0
  408. package/dist/types/twisty/views/TwistyPlayer.d.ts.map +1 -0
  409. package/dist/types/twisty/views/TwistyPlayerSettable.d.ts +71 -0
  410. package/dist/types/twisty/views/TwistyPlayerSettable.d.ts.map +1 -0
  411. package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts +33 -0
  412. package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts.map +1 -0
  413. package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts +14 -0
  414. package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts.map +1 -0
  415. package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts +15 -0
  416. package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts.map +1 -0
  417. package/dist/types/twisty/views/document.d.ts +2 -0
  418. package/dist/types/twisty/views/document.d.ts.map +1 -0
  419. package/dist/types/twisty/views/screenshot.d.ts +12 -0
  420. package/dist/types/twisty/views/screenshot.d.ts.map +1 -0
  421. package/dist/types/vendor/p-lazy/p-lazy.d.ts +10 -0
  422. package/dist/types/vendor/p-lazy/p-lazy.d.ts.map +1 -0
  423. package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts +33 -0
  424. package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts.map +1 -0
  425. package/docs/.DS_Store +0 -0
  426. package/docs/cubing/.DS_Store +0 -0
  427. package/docs/cubing/alg/index.html +37 -23
  428. package/docs/cubing/index.html +56 -252
  429. package/docs/cubing/scramble/index.html +122 -0
  430. package/docs/cubing/twisty/index.html +329 -0
  431. package/docs/main.css +15 -3
  432. package/package.json +83 -57
  433. package/src/cubing/.DS_Store +0 -0
  434. package/src/cubing/alg/.DS_Store +0 -0
  435. package/src/cubing/alg/Alg.ts +89 -0
  436. package/src/cubing/alg/common.ts +4 -2
  437. package/src/cubing/alg/iteration.ts +1 -1
  438. package/src/cubing/alg/parse.ts +2 -0
  439. package/src/cubing/alg/test/alg-comparison.ts +1 -0
  440. package/src/cubing/alg/units/.DS_Store +0 -0
  441. package/src/cubing/alg/units/Unit.ts +0 -3
  442. package/src/cubing/alg/units/containers/Commutator.ts +1 -1
  443. package/src/cubing/alg/units/leaves/Move.ts +4 -4
  444. package/src/cubing/bluetooth/.DS_Store +0 -0
  445. package/src/cubing/bluetooth/connect/index.ts +1 -1
  446. package/src/cubing/bluetooth/smart-puzzle/Heykube.ts +1 -1
  447. package/src/cubing/bluetooth/smart-puzzle/bluetooth-puzzle.ts +1 -1
  448. package/src/cubing/bluetooth/smart-puzzle/gan.ts +5 -5
  449. package/src/cubing/bluetooth/smart-puzzle/giiker.ts +2 -2
  450. package/src/cubing/bluetooth/smart-puzzle/gocube.ts +5 -5
  451. package/src/cubing/bluetooth/smart-robot/GanRobot.ts +5 -5
  452. package/src/cubing/bluetooth/smart-timer/GanTimer.ts +2 -2
  453. package/src/cubing/{solve → kpuzzle}/.DS_Store +0 -0
  454. package/src/cubing/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.ts +40 -0
  455. package/src/cubing/{puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.ts → kpuzzle/3x3x3/3x3x3.kpuzzle.json.ts} +11 -6
  456. package/src/cubing/kpuzzle/canon.spec.ts +6 -11
  457. package/src/cubing/kpuzzle/canonicalize.ts +1 -1
  458. package/src/cubing/kpuzzle/definition_types.ts +0 -3
  459. package/src/cubing/kpuzzle/index.ts +1 -0
  460. package/src/cubing/kpuzzle/prunetable.spec.ts +2 -4
  461. package/src/cubing/kpuzzle/puzzle-orientation.ts +1 -1
  462. package/src/cubing/kpuzzle/svg.ts +4 -9
  463. package/src/cubing/kpuzzle/transformations.ts +1 -1
  464. package/src/cubing/protocol/binary/binary3x3x3.spec.ts +5 -2
  465. package/src/cubing/protocol/binary/hex.ts +4 -4
  466. package/src/cubing/protocol/binary/orbit-indexing.ts +2 -2
  467. package/src/cubing/protocol/binary/puzzle-orientation.ts +2 -2
  468. package/src/cubing/puzzle-geometry/Options.ts +151 -22
  469. package/src/cubing/puzzle-geometry/PGPuzzles.spec.ts +24 -28
  470. package/src/cubing/puzzle-geometry/PermOriSet.ts +99 -98
  471. package/src/cubing/puzzle-geometry/PlatonicGenerator.ts +1 -1
  472. package/src/cubing/puzzle-geometry/PuzzleGeometry.ts +836 -867
  473. package/src/cubing/puzzle-geometry/Quat.ts +1 -68
  474. package/src/cubing/puzzle-geometry/SchreierSims.ts +2 -13
  475. package/src/cubing/puzzle-geometry/index.ts +2 -11
  476. package/src/cubing/puzzle-geometry/interfaces.ts +1 -27
  477. package/src/cubing/puzzle-geometry/orientcenters.spec.ts +24 -30
  478. package/src/cubing/puzzles/.DS_Store +0 -0
  479. package/src/cubing/puzzles/async/async-pg3d.ts +5 -8
  480. package/src/cubing/puzzles/customPGPuzzleLoader.ts +60 -0
  481. package/src/cubing/puzzles/implementations/.DS_Store +0 -0
  482. package/src/cubing/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.ts → 2x2x2.kpuzzle.json.ts} +0 -0
  483. package/src/cubing/puzzles/implementations/2x2x2/index.ts +1 -1
  484. package/src/cubing/puzzles/implementations/3x3x3/index.ts +2 -3
  485. package/src/cubing/puzzles/implementations/clock/{clock.kpuzzle.json_.ts → clock.kpuzzle.json.ts} +0 -0
  486. package/src/cubing/puzzles/implementations/clock/index.ts +1 -1
  487. package/src/cubing/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.ts → pyraminx.kpuzzle.json.ts} +0 -0
  488. package/src/cubing/puzzles/implementations/square1/index.ts +1 -2
  489. package/src/cubing/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.ts → sq1-hyperorbit.kpuzzle.json.ts} +0 -0
  490. package/src/cubing/puzzles/index.ts +5 -2
  491. package/src/cubing/puzzles/stickerings/appearance.ts +10 -9
  492. package/src/cubing/puzzles/stickerings/cube-stickerings.ts +8 -0
  493. package/src/cubing/puzzles/stickerings/global-custom-stickering-hack.ts +61 -0
  494. package/src/cubing/search/.DS_Store +0 -0
  495. package/src/cubing/search/.gitignore +1 -2
  496. package/src/cubing/search/esm-test-worker.js +1 -1
  497. package/src/cubing/search/index.ts +1 -0
  498. package/src/cubing/search/inside/api.ts +5 -1
  499. package/src/cubing/search/inside/solve/parseSGS.ts +7 -11
  500. package/src/cubing/search/inside/solve/puzzles/2x2x2.ts +3 -3
  501. package/src/cubing/search/inside/solve/puzzles/3x3x3/filter.ts +0 -6
  502. package/src/cubing/search/inside/solve/puzzles/3x3x3/index.ts +0 -2
  503. package/src/cubing/search/inside/solve/puzzles/FTO.sgs +264 -0
  504. package/src/cubing/search/inside/solve/puzzles/megaminx.sgs.json.ts +4 -6
  505. package/src/cubing/search/inside/solve/puzzles/skewb.sgs.json.ts +4 -6
  506. package/src/cubing/search/inside/solve/tremble.ts +6 -9
  507. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.ts +20 -822
  508. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.ts +177 -252
  509. package/src/cubing/search/inside/solve/vendor/min2phase/gwt.js +62 -222
  510. package/src/cubing/search/inside/solve/vendor/random-uint-below/get-random-values.ts +4 -5
  511. package/src/cubing/search/inside/solve/vendor/random-uint-below/random-int.ts +9 -11
  512. package/src/cubing/search/inside/solve/vendor/sq12phase/scramble_sq1.js +13 -582
  513. package/src/cubing/search/instantiator.ts +11 -7
  514. package/src/cubing/search/outside.ts +8 -2
  515. package/src/cubing/search/worker-inside-generated-string.js +1 -1
  516. package/src/cubing/stream/.DS_Store +0 -0
  517. package/src/cubing/stream/process/ReorientedStream.ts +1 -1
  518. package/src/cubing/stream/twizzle/TwizzleStream.ts +11 -8
  519. package/src/cubing/stream/websocket-proxy.ts +1 -3
  520. package/src/cubing/twisty/.DS_Store +0 -0
  521. package/src/cubing/twisty/controllers/TwistyAnimationController.ts +248 -0
  522. package/src/cubing/twisty/controllers/TwistyPlayerController.ts +38 -0
  523. package/src/cubing/twisty/heavy-code-imports/3d.ts +18 -0
  524. package/src/cubing/twisty/heavy-code-imports/dynamic-entries/3d.ts +41 -0
  525. package/src/cubing/twisty/index.ts +24 -17
  526. package/src/cubing/{protocol → twisty/model}/.DS_Store +0 -0
  527. package/src/cubing/twisty/model/PromiseFreshener.ts +49 -0
  528. package/src/cubing/twisty/model/TwistyPlayerModel.ts +222 -0
  529. package/src/cubing/twisty/model/UserVisibleErrorTracker.ts +22 -0
  530. package/src/cubing/twisty/model/helpers.ts +47 -0
  531. package/src/cubing/{search/vendor → twisty/model/props}/.DS_Store +0 -0
  532. package/src/cubing/twisty/model/props/TwistyProp.spec.ts +38 -0
  533. package/src/cubing/twisty/model/props/TwistyProp.ts +366 -0
  534. package/src/cubing/twisty/model/props/TwistyPropDebugger.ts +370 -0
  535. package/src/cubing/twisty/model/props/general/URLProp.ts +14 -0
  536. package/src/cubing/twisty/{3D → model/props/puzzle}/.DS_Store +0 -0
  537. package/src/cubing/twisty/model/props/puzzle/display/HintFaceletProp.ts +10 -0
  538. package/src/cubing/twisty/model/props/puzzle/display/SpriteProp.ts +43 -0
  539. package/src/cubing/twisty/model/props/puzzle/display/StickeringProp.ts +8 -0
  540. package/src/cubing/twisty/model/props/puzzle/state/AlgProp.ts +91 -0
  541. package/src/cubing/twisty/model/props/puzzle/state/AlgTransformationProp.ts +28 -0
  542. package/src/cubing/twisty/model/props/puzzle/state/AnchoredStartProp.ts +44 -0
  543. package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesProp.ts +91 -0
  544. package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesSimplified.ts +48 -0
  545. package/src/cubing/twisty/model/props/puzzle/state/CurrentTransformationProp.ts +46 -0
  546. package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorProp.ts +46 -0
  547. package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.ts +15 -0
  548. package/src/cubing/twisty/model/props/puzzle/state/IndexerProp.ts +24 -0
  549. package/src/cubing/twisty/model/props/puzzle/state/LegacyPositionProp.ts +22 -0
  550. package/src/cubing/twisty/model/props/puzzle/state/PuzzleAlgProp.ts +28 -0
  551. package/src/cubing/twisty/model/props/puzzle/state/SetupAnchorProp.ts +8 -0
  552. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDefProp.ts +14 -0
  553. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.ts +14 -0
  554. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDProp.ts +12 -0
  555. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.ts +17 -0
  556. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleLoaderProp.ts +38 -0
  557. package/src/cubing/twisty/model/props/timeline/CoarseTimelineInfoProp.ts +45 -0
  558. package/src/cubing/twisty/model/props/timeline/DetailedTimelineInfoProp.ts +76 -0
  559. package/src/cubing/twisty/model/props/timeline/PlayingInfoProp.ts +51 -0
  560. package/src/cubing/twisty/model/props/timeline/TempoScaleProp.ts +13 -0
  561. package/src/cubing/twisty/model/props/timeline/TimestampRequestProp.ts +38 -0
  562. package/src/cubing/twisty/model/props/viewer/BackViewProp.ts +10 -0
  563. package/src/cubing/twisty/model/props/viewer/BackgroundProp.ts +10 -0
  564. package/src/cubing/twisty/model/props/viewer/ButtonAppearanceProp.ts +86 -0
  565. package/src/cubing/twisty/model/props/viewer/ControlPanelProp.ts +10 -0
  566. package/src/cubing/twisty/model/props/viewer/LatitudeLimit.ts +11 -0
  567. package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesProp.ts +56 -0
  568. package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesRequestProp.ts +69 -0
  569. package/src/cubing/twisty/model/props/viewer/TimeRangeProp.ts +15 -0
  570. package/src/cubing/twisty/model/props/viewer/ViewerLinkProp.ts +10 -0
  571. package/src/cubing/twisty/model/props/viewer/VisualizationProp.ts +10 -0
  572. package/src/cubing/twisty/model/props/viewer/VisualizationStrategyProp.ts +45 -0
  573. package/src/cubing/twisty/{animation → old}/.DS_Store +0 -0
  574. package/src/cubing/{search/inside → twisty/old/animation}/.DS_Store +0 -0
  575. package/src/cubing/twisty/{animation → old/animation}/RenderScheduler.ts +5 -0
  576. package/src/cubing/twisty/{animation → old/animation}/Timeline.ts +0 -0
  577. package/src/cubing/twisty/{animation → old/animation}/cursor/AlgCursor.ts +15 -8
  578. package/src/cubing/twisty/{animation → old/animation}/cursor/CursorTypes.ts +4 -4
  579. package/src/cubing/twisty/{animation → old/animation}/easing.ts +0 -0
  580. package/src/cubing/twisty/old/animation/indexer/.DS_Store +0 -0
  581. package/src/cubing/twisty/{animation → old/animation}/indexer/AlgDuration.ts +1 -1
  582. package/src/cubing/twisty/old/animation/indexer/AlgIndexer.ts +86 -0
  583. package/src/cubing/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.ts +9 -6
  584. package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +181 -0
  585. package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.ts +243 -0
  586. package/src/cubing/twisty/{animation → old/animation}/indexer/simultaneous-moves/simul-moves.ts +46 -34
  587. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/AlgWalker.ts +6 -3
  588. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.ts +8 -5
  589. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/chunkAlgs.ts +2 -2
  590. package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.spec.ts.TODO +0 -0
  591. package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.ts +2 -2
  592. package/src/cubing/{search/vendor/comlink-everywhere → twisty/old/dom}/.DS_Store +0 -0
  593. package/src/cubing/twisty/{dom/TwistyAlgViewer.css_.ts → old/dom/TwistyAlgViewerV1.css.ts} +0 -0
  594. package/src/cubing/twisty/{dom/TwistyAlgViewer.ts → old/dom/TwistyAlgViewerV1.ts} +43 -36
  595. package/src/cubing/twisty/{dom/TwistyPlayer.css_.ts → old/dom/TwistyPlayer.css.ts} +28 -1
  596. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.spec.ts +5 -6
  597. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.ts +36 -43
  598. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayerConfig.ts +26 -10
  599. package/src/cubing/twisty/{dom/controls/TwistyControlElement.ts.ts → old/dom/controls/TwistyControlElement.ts} +0 -0
  600. package/src/cubing/twisty/{dom/controls/TwistyScrubber.css_.ts → old/dom/controls/TwistyScrubber.css.ts} +0 -0
  601. package/src/cubing/twisty/{dom → old/dom}/controls/TwistyScrubber.ts +3 -3
  602. package/src/cubing/twisty/{dom/controls/buttons.css_.ts → old/dom/controls/buttons.css.ts} +14 -1
  603. package/src/cubing/twisty/{dom → old/dom}/controls/buttons.spec.ts +1 -1
  604. package/src/cubing/twisty/{dom → old/dom}/controls/buttons.ts +15 -15
  605. package/src/cubing/twisty/{dom → old/dom}/element/ClassListManager.ts +0 -0
  606. package/src/cubing/twisty/{dom → old/dom}/element/ElementConfig.ts +1 -1
  607. package/src/cubing/twisty/{dom → old/dom}/element/ManagedCustomElement.ts +0 -0
  608. package/src/cubing/twisty/{dom → old/dom}/element/node-custom-element-shims.ts +0 -0
  609. package/src/cubing/twisty/{dom/stream/TwistyStreamSource.css_.ts → old/dom/stream/TwistyStreamSource.css.ts} +0 -0
  610. package/src/cubing/twisty/{dom → old/dom}/stream/TwistyStreamSource.ts +8 -8
  611. package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty2DSVG.ts +7 -9
  612. package/src/cubing/twisty/{dom/viewers/Twisty2DSVGView.css_.ts → old/dom/viewers/Twisty2DSVGView.css.ts} +0 -0
  613. package/src/cubing/twisty/{dom/viewers/Twisty3DCanvas.css_.ts → old/dom/viewers/Twisty3DCanvas.css.ts} +0 -0
  614. package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.ts +5 -12
  615. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.ts +57 -20
  616. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerElement.ts +1 -1
  617. package/src/cubing/twisty/{dom/viewers/TwistyViewerWrapper.css_.ts → old/dom/viewers/TwistyViewerWrapper.css.ts} +0 -0
  618. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.ts +1 -1
  619. package/src/cubing/twisty/old/dom/viewers/canvas.ts +9 -0
  620. package/src/cubing/twisty/{dom/twisty-player-model → views}/.DS_Store +0 -0
  621. package/src/cubing/twisty/views/2D/Twisty2DPuzzle.ts +150 -0
  622. package/src/cubing/twisty/views/2D/Twisty2DPuzzleWrapper.ts +52 -0
  623. package/src/cubing/twisty/views/2D/Twisty2DSceneWrapper.ts +77 -0
  624. package/src/cubing/twisty/views/3D/RendererPool.ts +53 -0
  625. package/src/cubing/twisty/{3D → views/3D}/TAU.ts +0 -0
  626. package/src/cubing/twisty/views/3D/Twisty3DPuzzleWrapper.ts +168 -0
  627. package/src/cubing/twisty/{3D → views/3D}/Twisty3DRenderTarget.ts +0 -0
  628. package/src/cubing/twisty/{3D → views/3D}/Twisty3DScene.ts +0 -0
  629. package/src/cubing/twisty/views/3D/Twisty3DSceneWrapper.ts +144 -0
  630. package/src/cubing/twisty/views/3D/Twisty3DVantage.ts +244 -0
  631. package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.spec.ts +209 -0
  632. package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.ts +270 -0
  633. package/src/cubing/twisty/{3D → views/3D}/puzzles/Cube3D.ts +36 -15
  634. package/src/cubing/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.ts +4 -5
  635. package/src/cubing/twisty/views/3D/puzzles/PG3D.ts +988 -0
  636. package/src/cubing/twisty/views/3D/puzzles/Twisty3DPuzzle.ts +6 -0
  637. package/src/cubing/twisty/{3D → views/3D}/puzzles/TwistyTestBox.ts +2 -2
  638. package/src/cubing/twisty/views/TwistyAlgEditor/LeafTokens.ts +116 -0
  639. package/src/cubing/twisty/{dom/TwistyAlgEditor.css_.ts → views/TwistyAlgEditor/TwistyAlgEditor.css.ts} +3 -1
  640. package/src/cubing/twisty/{dom → views/TwistyAlgEditor}/TwistyAlgEditor.spec.ts +7 -6
  641. package/src/cubing/twisty/views/TwistyAlgEditor/TwistyAlgEditor.ts +360 -0
  642. package/src/cubing/twisty/views/TwistyAlgEditor/model.ts +179 -0
  643. package/src/cubing/twisty/views/TwistyAlgViewer.css.ts +25 -0
  644. package/src/cubing/twisty/views/TwistyAlgViewer.ts +502 -0
  645. package/src/cubing/twisty/views/TwistyPlayer.ts +327 -0
  646. package/src/cubing/twisty/views/TwistyPlayerSettable.ts +111 -0
  647. package/src/cubing/twisty/views/control-panel/TwistyButtonsV2.ts +159 -0
  648. package/src/cubing/twisty/views/control-panel/TwistyScrubberV2.ts +145 -0
  649. package/src/cubing/twisty/views/control-panel/webkit-fullscreen.ts +44 -0
  650. package/src/cubing/twisty/views/document.ts +4 -0
  651. package/src/cubing/twisty/views/screenshot.ts +90 -0
  652. package/src/cubing/{twisty/animation/indexer → vendor}/.DS_Store +0 -0
  653. package/src/cubing/vendor/p-lazy/license +9 -0
  654. package/src/cubing/vendor/p-lazy/p-lazy.ts +52 -0
  655. package/src/cubing/vendor/p-lazy/readme.md +54 -0
  656. package/src/cubing/vendor/three/examples/jsm/libs/stats.modified.module.ts +179 -0
  657. package/dist/esm/chunk-CWVB5RRW.js.map +0 -7
  658. package/dist/esm/chunk-KKSDHNLH.js.map +0 -7
  659. package/dist/esm/chunk-YNB7QLBF.js.map +0 -7
  660. package/dist/esm/worker-inside-generated-string-LT4NV55Q.js +0 -2826
  661. package/dist/esm/worker-inside-generated-string-LT4NV55Q.js.map +0 -7
  662. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json_.d.ts.map +0 -1
  663. package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts +0 -3
  664. package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts.map +0 -1
  665. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json_.d.ts.map +0 -1
  666. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json_.d.ts.map +0 -1
  667. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json_.d.ts.map +0 -1
  668. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts +0 -3
  669. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts.map +0 -1
  670. package/dist/types/twisty/3D/TAU.d.ts.map +0 -1
  671. package/dist/types/twisty/3D/Twisty3DRenderTarget.d.ts.map +0 -1
  672. package/dist/types/twisty/3D/Twisty3DScene.d.ts.map +0 -1
  673. package/dist/types/twisty/3D/puzzles/Cube3D.d.ts.map +0 -1
  674. package/dist/types/twisty/3D/puzzles/KPuzzleWrapper.d.ts.map +0 -1
  675. package/dist/types/twisty/3D/puzzles/PG3D.d.ts +0 -51
  676. package/dist/types/twisty/3D/puzzles/PG3D.d.ts.map +0 -1
  677. package/dist/types/twisty/3D/puzzles/Twisty3DPuzzle.d.ts.map +0 -1
  678. package/dist/types/twisty/3D/puzzles/TwistyTestBox.d.ts.map +0 -1
  679. package/dist/types/twisty/animation/RenderScheduler.d.ts.map +0 -1
  680. package/dist/types/twisty/animation/Timeline.d.ts.map +0 -1
  681. package/dist/types/twisty/animation/cursor/AlgCursor.d.ts.map +0 -1
  682. package/dist/types/twisty/animation/cursor/CursorTypes.d.ts.map +0 -1
  683. package/dist/types/twisty/animation/easing.d.ts.map +0 -1
  684. package/dist/types/twisty/animation/indexer/AlgDuration.d.ts.map +0 -1
  685. package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts +0 -15
  686. package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts.map +0 -1
  687. package/dist/types/twisty/animation/indexer/SimpleAlgIndexer.d.ts.map +0 -1
  688. package/dist/types/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +0 -1
  689. package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts +0 -25
  690. package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +0 -1
  691. package/dist/types/twisty/animation/indexer/tree/AlgWalker.d.ts.map +0 -1
  692. package/dist/types/twisty/animation/indexer/tree/TreeAlgIndexer.d.ts.map +0 -1
  693. package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts +0 -3
  694. package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts.map +0 -1
  695. package/dist/types/twisty/animation/stream/timeline-move-calculation-draft.d.ts.map +0 -1
  696. package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts +0 -3
  697. package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts.map +0 -1
  698. package/dist/types/twisty/dom/TwistyAlgEditor.d.ts +0 -27
  699. package/dist/types/twisty/dom/TwistyAlgEditor.d.ts.map +0 -1
  700. package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts +0 -26
  701. package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts.map +0 -1
  702. package/dist/types/twisty/dom/TwistyAlgViewer.css_.d.ts.map +0 -1
  703. package/dist/types/twisty/dom/TwistyAlgViewer.d.ts.map +0 -1
  704. package/dist/types/twisty/dom/TwistyPlayer.css_.d.ts.map +0 -1
  705. package/dist/types/twisty/dom/TwistyPlayer.d.ts.map +0 -1
  706. package/dist/types/twisty/dom/TwistyPlayerConfig.d.ts.map +0 -1
  707. package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts +0 -2
  708. package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts.map +0 -1
  709. package/dist/types/twisty/dom/controls/TwistyScrubber.css_.d.ts.map +0 -1
  710. package/dist/types/twisty/dom/controls/TwistyScrubber.d.ts.map +0 -1
  711. package/dist/types/twisty/dom/controls/buttons.css_.d.ts.map +0 -1
  712. package/dist/types/twisty/dom/controls/buttons.d.ts.map +0 -1
  713. package/dist/types/twisty/dom/element/ClassListManager.d.ts.map +0 -1
  714. package/dist/types/twisty/dom/element/ElementConfig.d.ts.map +0 -1
  715. package/dist/types/twisty/dom/element/ManagedCustomElement.d.ts.map +0 -1
  716. package/dist/types/twisty/dom/element/node-custom-element-shims.d.ts.map +0 -1
  717. package/dist/types/twisty/dom/stream/TwistyStreamSource.css_.d.ts.map +0 -1
  718. package/dist/types/twisty/dom/stream/TwistyStreamSource.d.ts.map +0 -1
  719. package/dist/types/twisty/dom/viewers/Twisty2DSVG.d.ts.map +0 -1
  720. package/dist/types/twisty/dom/viewers/Twisty2DSVGView.css_.d.ts.map +0 -1
  721. package/dist/types/twisty/dom/viewers/Twisty3DCanvas.css_.d.ts.map +0 -1
  722. package/dist/types/twisty/dom/viewers/Twisty3DCanvas.d.ts.map +0 -1
  723. package/dist/types/twisty/dom/viewers/TwistyOrbitControls.d.ts.map +0 -1
  724. package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts +0 -4
  725. package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts.map +0 -1
  726. package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.css_.d.ts.map +0 -1
  727. package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.d.ts.map +0 -1
  728. package/dist/types/twisty/dom/viewers/canvas.d.ts +0 -2
  729. package/dist/types/twisty/dom/viewers/canvas.d.ts.map +0 -1
  730. package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts +0 -2
  731. package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts.map +0 -1
  732. package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -21
  733. package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts.map +0 -1
  734. package/src/cubing/puzzle-geometry/.DS_Store +0 -0
  735. package/src/cubing/search/inside/solve/.DS_Store +0 -0
  736. package/src/cubing/search/inside/solve/puzzles/.DS_Store +0 -0
  737. package/src/cubing/search/inside/solve/puzzles/3x3x3/.DS_Store +0 -0
  738. package/src/cubing/search/inside/solve/vendor/.DS_Store +0 -0
  739. package/src/cubing/search/inside/solve/vendor/cstimer/.DS_Store +0 -0
  740. package/src/cubing/search/inside/solve/vendor/cstimer/src/.DS_Store +0 -0
  741. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/.DS_Store +0 -0
  742. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/.DS_Store +0 -0
  743. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.ts +0 -13
  744. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/.DS_Store +0 -0
  745. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/.DS_Store +0 -0
  746. package/src/cubing/search/inside/solve/vendor/sgs/.DS_Store +0 -0
  747. package/src/cubing/search/inside/solve/vendor/sgs/src/.DS_Store +0 -0
  748. package/src/cubing/search/inside/solve/vendor/sgs/src/test/.DS_Store +0 -0
  749. package/src/cubing/twisty/3D/puzzles/PG3D.ts +0 -600
  750. package/src/cubing/twisty/3D/puzzles/Twisty3DPuzzle.ts +0 -9
  751. package/src/cubing/twisty/3D/puzzles/mkbhd.svg +0 -5
  752. package/src/cubing/twisty/animation/indexer/AlgIndexer.ts +0 -25
  753. package/src/cubing/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +0 -168
  754. package/src/cubing/twisty/dom/.DS_Store +0 -0
  755. package/src/cubing/twisty/dom/TwistyAlgEditor.ts +0 -373
  756. package/src/cubing/twisty/dom/TwistyAlgEditorStartCharSearch.ts +0 -138
  757. package/src/cubing/twisty/dom/viewers/canvas.ts +0 -4
  758. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.ts +0 -2
  759. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -24
  760. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.js +0 -178
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/puzzles/customPGPuzzleLoader.ts", "../../src/cubing/puzzles/stickerings/appearance.ts", "../../src/cubing/puzzles/stickerings/global-custom-stickering-hack.ts", "../../src/cubing/puzzles/stickerings/cube-stickerings.ts", "../../src/cubing/puzzles/async/async-pg3d.ts", "../../src/cubing/puzzles/implementations/2x2x2/index.ts", "../../src/cubing/puzzles/implementations/3x3x3/index.ts", "../../src/cubing/puzzles/implementations/clock/index.ts", "../../src/cubing/puzzles/stickerings/fto-stickerings.ts", "../../src/cubing/puzzles/implementations/fto/index.ts", "../../src/cubing/puzzles/stickerings/megaminx-stickerings.ts", "../../src/cubing/puzzles/implementations/megaminx/index.ts", "../../src/cubing/puzzles/implementations/pyraminx/index.ts", "../../src/cubing/puzzles/implementations/square1/index.ts", "../../src/cubing/puzzles/index.ts"],
4
+ "sourcesContent": ["import type { KPuzzleDefinition } from \"../kpuzzle\";\nimport type { PuzzleGeometry } from \"../puzzle-geometry\";\nimport type { PuzzleDescriptionString } from \"../puzzle-geometry/PGPuzzles\";\nimport type { PuzzleLoader } from \"./PuzzleLoader\";\n\n// TODO: modify this to handle TwistyPlayer options\nexport async function descAsyncGetPuzzleGeometry(\n desc: PuzzleDescriptionString,\n): Promise<PuzzleGeometry> {\n const puzzleGeometry = await import(\"../puzzle-geometry\");\n return puzzleGeometry.getPuzzleGeometryByDesc(desc, {\n allMoves: true,\n orientCenters: true,\n addRotations: true,\n });\n}\n\n// TODO: can we cache the puzzleGeometry to avoid duplicate calls, without\n// wasting memory? Maybe just save the latest one for successive calls about the\n// same puzzle?\nexport async function dsecAsyncGetDef(\n desc: PuzzleDescriptionString,\n): Promise<KPuzzleDefinition> {\n return (await descAsyncGetPuzzleGeometry(desc)).writekpuzzle(true);\n}\n\n// TODO: Can we avoid relying on IDs to deduplicate work at higher levels?\nlet nextCustomID = 1;\n\nexport function customPGPuzzleLoader(\n desc: PuzzleDescriptionString,\n info?: {\n fullName?: string;\n inventedBy?: string[];\n inventionYear?: number;\n },\n): PuzzleLoader {\n const customID = nextCustomID++;\n const puzzleLoader: PuzzleLoader = {\n id: `custom-${customID}`,\n fullName: info?.fullName ?? `Custom Puzzle (instance #${customID})`,\n def: async () => {\n return dsecAsyncGetDef(desc);\n },\n svg: async () => {\n const pg = await descAsyncGetPuzzleGeometry(desc);\n return pg.generatesvg();\n },\n pg: async () => {\n return descAsyncGetPuzzleGeometry(desc);\n },\n };\n if (info?.inventedBy) {\n puzzleLoader.inventedBy = info.inventedBy;\n }\n if (info?.inventionYear) {\n puzzleLoader.inventionYear = info.inventionYear;\n }\n return puzzleLoader;\n}\n", "// TODO: figure out where to house this permanently.\n\nimport { Move } from \"../../alg\";\nimport { experimentalIs } from \"../../alg\";\nimport { KPuzzleDefinition, transformationForMove } from \"../../kpuzzle\";\n\nexport type FaceletMeshAppearance =\n | \"regular\"\n | \"dim\"\n | \"oriented\"\n | \"ignored\"\n | \"invisible\";\n\nexport type FaceletAppearance = {\n appearance: FaceletMeshAppearance;\n hintAppearance?: FaceletMeshAppearance;\n};\n\nexport type PieceAppearance = {\n // TODO: foundation?\n facelets: (FaceletMeshAppearance | FaceletAppearance | null)[];\n};\n\nexport type OrbitAppearance = {\n pieces: (PieceAppearance | null)[];\n};\n\nexport type PuzzleAppearance = {\n name?: string; // TODO\n orbits: Record<string, OrbitAppearance>;\n};\n\nexport function getFaceletAppearance(\n appearance: PuzzleAppearance,\n orbitName: string,\n pieceIdx: number,\n faceletIdx: number,\n hint: boolean,\n): FaceletMeshAppearance {\n const orbitAppearance = appearance.orbits[orbitName];\n const pieceAppearance: PieceAppearance | null =\n orbitAppearance.pieces[pieceIdx];\n if (pieceAppearance === null) {\n return regular;\n }\n const faceletAppearance: FaceletMeshAppearance | FaceletAppearance | null =\n pieceAppearance.facelets[faceletIdx];\n if (faceletAppearance === null) {\n return regular;\n }\n if (typeof faceletAppearance === \"string\") {\n return faceletAppearance;\n }\n if (hint) {\n return faceletAppearance.hintAppearance ?? faceletAppearance.appearance;\n }\n return faceletAppearance.appearance;\n}\n\n// TODO: Revert this to a normal enum, or write a standard to codify the names?\nexport enum PieceStickering {\n Regular = \"Regular\",\n Dim = \"Dim\",\n Ignored = \"Ignored\",\n OrientationStickers = \"OrientationStickers\",\n Invisible = \"Invisible\",\n Ignoriented = \"Ignoriented\",\n IgnoreNonPrimary = \"IgnoreNonPrimary\",\n PermuteNonPrimary = \"PermuteNonPrimary\",\n OrientationWithoutPermutation = \"OrientationWithoutPermutation\",\n}\n\nexport class PieceAnnotation<T> {\n stickerings: Map<string, T[]> = new Map();\n constructor(def: KPuzzleDefinition, defaultValue: T) {\n for (const [orbitName, orbitDef] of Object.entries(def.orbits)) {\n this.stickerings.set(\n orbitName,\n new Array(orbitDef.numPieces).fill(defaultValue),\n );\n }\n }\n}\n\nconst regular = \"regular\";\nconst ignored = \"ignored\";\nconst oriented = \"oriented\";\nconst invisible = \"invisible\";\nconst dim = \"dim\";\n\n// regular\nconst r: PieceAppearance = {\n facelets: [regular, regular, regular, regular, regular],\n};\n\n// ignored\nconst i: PieceAppearance = {\n facelets: [ignored, ignored, ignored, ignored, ignored],\n};\n\n// oriented stickers\nconst o: PieceAppearance = {\n facelets: [oriented, oriented, oriented, oriented, oriented],\n};\n\n// invisible\nconst invisiblePiece: PieceAppearance = {\n facelets: [invisible, invisible, invisible, invisible], // TODO: 4th entry is for void cube. Should be handled properly for all stickerings.\n};\n\n// \"OLL\"\nconst riiii: PieceAppearance = {\n facelets: [regular, ignored, ignored, ignored, ignored],\n};\n\n// \"PLL\"\nconst drrrr: PieceAppearance = {\n facelets: [dim, regular, regular, regular, regular],\n};\n\n// ignored\nconst d: PieceAppearance = {\n facelets: [dim, dim, dim, dim, dim],\n};\n\n// \"OLL\"\nconst diiii: PieceAppearance = {\n facelets: [dim, ignored, ignored, ignored, ignored],\n};\n\n// oriented\nconst oiiii: PieceAppearance = {\n facelets: [oriented, ignored, ignored, ignored, ignored],\n};\n\nexport function getPieceAppearance(\n pieceStickering: PieceStickering,\n): PieceAppearance {\n switch (pieceStickering) {\n case PieceStickering.Regular:\n return r;\n case PieceStickering.Dim:\n return d;\n case PieceStickering.Ignored:\n return i;\n case PieceStickering.OrientationStickers: // TODO: Hack for centers. This shouldn't be needed.\n return o;\n case PieceStickering.Invisible: // TODO: Hack for centers. This shouldn't be needed.\n return invisiblePiece;\n case PieceStickering.IgnoreNonPrimary:\n return riiii;\n case PieceStickering.PermuteNonPrimary:\n return drrrr;\n case PieceStickering.Ignoriented:\n return diiii;\n case PieceStickering.OrientationWithoutPermutation:\n return oiiii;\n }\n}\n\nexport class PuzzleStickering extends PieceAnnotation<PieceStickering> {\n constructor(def: KPuzzleDefinition) {\n super(def, PieceStickering.Regular);\n }\n\n set(pieceSet: PieceSet, pieceStickering: PieceStickering): PuzzleStickering {\n for (const [orbitName, pieces] of this.stickerings.entries()) {\n for (let i = 0; i < pieces.length; i++) {\n if (pieceSet.stickerings.get(orbitName)![i]) {\n pieces[i] = pieceStickering;\n }\n }\n }\n return this;\n }\n\n toAppearance(): PuzzleAppearance {\n const appearance: PuzzleAppearance = { orbits: {} };\n for (const [orbitName, pieceStickerings] of this.stickerings.entries()) {\n const pieces: PieceAppearance[] = [];\n const orbitAppearance: OrbitAppearance = {\n pieces,\n };\n appearance.orbits[orbitName] = orbitAppearance;\n for (const pieceStickering of pieceStickerings) {\n pieces.push(getPieceAppearance(pieceStickering));\n }\n }\n return appearance;\n }\n}\n\nexport type PieceSet = PieceAnnotation<boolean>;\n\nexport class StickeringManager {\n constructor(private def: KPuzzleDefinition) {}\n\n and(pieceSets: PieceSet[]): PieceSet {\n const newPieceSet = new PieceAnnotation<boolean>(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n pieceLoop: for (let i = 0; i < orbitDef.numPieces; i++) {\n newPieceSet.stickerings.get(orbitName)![i] = true;\n for (const pieceSet of pieceSets) {\n if (!pieceSet.stickerings.get(orbitName)![i]) {\n newPieceSet.stickerings.get(orbitName)![i] = false;\n continue pieceLoop;\n }\n }\n }\n }\n return newPieceSet;\n }\n\n or(pieceSets: PieceSet[]): PieceSet {\n // TODO: unify impl with and?\n const newPieceSet = new PieceAnnotation<boolean>(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n pieceLoop: for (let i = 0; i < orbitDef.numPieces; i++) {\n newPieceSet.stickerings.get(orbitName)![i] = false;\n for (const pieceSet of pieceSets) {\n if (pieceSet.stickerings.get(orbitName)![i]) {\n newPieceSet.stickerings.get(orbitName)![i] = true;\n continue pieceLoop;\n }\n }\n }\n }\n return newPieceSet;\n }\n\n not(pieceSet: PieceSet): PieceSet {\n const newPieceSet = new PieceAnnotation<boolean>(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n for (let i = 0; i < orbitDef.numPieces; i++) {\n newPieceSet.stickerings.get(orbitName)![i] =\n !pieceSet.stickerings.get(orbitName)![i];\n }\n }\n return newPieceSet;\n }\n\n all(): PieceSet {\n return this.and(this.moves([])); // TODO: are the degenerate cases for and/or the wrong way around\n }\n\n move(moveSource: Move | string): PieceSet {\n const transformation = transformationForMove(\n this.def,\n experimentalIs(moveSource, Move)\n ? (moveSource as Move)\n : Move.fromString(moveSource as string),\n );\n const newPieceSet = new PieceAnnotation<boolean>(this.def, false);\n for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n for (let i = 0; i < orbitDef.numPieces; i++) {\n if (\n transformation[orbitName].permutation[i] !== i ||\n transformation[orbitName].orientation[i] !== 0\n ) {\n newPieceSet.stickerings.get(orbitName)![i] = true;\n }\n }\n }\n return newPieceSet;\n }\n\n moves(moveSources: (Move | string)[]): PieceSet[] {\n return moveSources.map((moveSource) => this.move(moveSource));\n }\n\n // orbits(orbitNames: string[]): PieceSet {\n // const pieceSet = new PieceAnnotation<boolean>(this.def, false);\n // for (const orbitName of orbitNames) {\n // pieceSet.stickerings.get(orbitName)!.fill(true);\n // }\n // return pieceSet;\n // }\n\n // trueCounts(pieceSet: PieceSet): Record<string, number> {\n // const counts: Record<string, number> = {};\n // for (const [orbitName, orbitDef] of Object.entries(this.def.orbits)) {\n // let count = 0;\n // for (let i = 0; i < orbitDef.numPieces; i++) {\n // if (pieceSet.stickerings.get(orbitName)![i]) {\n // count++;\n // }\n // }\n // counts[orbitName] = count;\n // }\n // return counts;\n // }\n}\n", "import type { TwistyPlayer } from \"../../twisty\";\nimport {\n PieceStickering,\n PuzzleStickering,\n StickeringManager,\n} from \"./appearance\";\n\ntype Stickerer = (\n puzzleStickering: PuzzleStickering,\n m: StickeringManager,\n) => void;\n\nlet globalCustomStickerer: Stickerer = () => {};\n\nfunction setGlobalCustomStickerer(stickerer: Stickerer): void {\n (async () => {\n globalCustomStickerer = stickerer;\n\n const players: TwistyPlayer[] = Array.from(\n document.body.querySelectorAll(\"twisty-player\"),\n );\n console.log(`Setting the custom stickering for ${players.length} players!`);\n const successPromises = [];\n for (const player of players) {\n successPromises.push(\n (async () => {\n const stickering =\n await player.experimentalModel.stickeringProp.get();\n player.experimentalStickering =\n stickering === \"experimental-global-custom-1\"\n ? \"experimental-global-custom-2\"\n : \"experimental-global-custom-1\";\n })(),\n );\n }\n await Promise.all(successPromises);\n console.log(\"Success!\");\n })();\n}\n\nexport function useGlobalCustomStickerer(\n puzzleStickering: PuzzleStickering,\n m: StickeringManager,\n): void {\n globalCustomStickerer(puzzleStickering, m);\n}\n\nif (\n typeof location !== \"undefined\" &&\n new URL(location.href).searchParams.get(\"global-custom-stickerer\") === \"true\"\n) {\n (window as any).setGlobalCustomStickerer = setGlobalCustomStickerer;\n (window as any).PieceStickering = PieceStickering;\n console.log(\n \"Global custom stickerer enabled! (using: global-custom-stickerer=true)\",\n );\n console.log(\n \"Look here for inspiration:\",\n \"https://github.com/cubing/cubing.js/blob/81b5cab3e27d8defb39dd1e0a10bc9e8ba894d26/src/cubing/puzzles/stickerings/cube-stickerings.ts#L67\",\n );\n}\n", "import type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport {\n PuzzleAppearance,\n PuzzleStickering,\n StickeringManager,\n PieceSet,\n PieceStickering,\n} from \"./appearance\";\nimport { useGlobalCustomStickerer } from \"./global-custom-stickering-hack\";\n\n// TODO: cache calculations?\nexport async function cubeAppearance(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<PuzzleAppearance> {\n const def = await puzzleLoader.def();\n const puzzleStickering = new PuzzleStickering(def);\n const m = new StickeringManager(def);\n\n const LL = (): PieceSet => m.move(\"U\");\n const orUD = (): PieceSet => m.or(m.moves([\"U\", \"D\"]));\n const E = (): PieceSet => m.not(orUD());\n const orLR = (): PieceSet => m.or(m.moves([\"L\", \"R\"]));\n const M = (): PieceSet => m.not(orLR());\n const orFB = (): PieceSet => m.or(m.moves([\"F\", \"B\"]));\n const S = (): PieceSet => m.not(orFB());\n\n const F2L = (): PieceSet => m.not(LL());\n\n const centerU = (): PieceSet => m.and([LL(), M(), S()]);\n\n const edgeFR = (): PieceSet =>\n m.and([m.and(m.moves([\"F\", \"R\"])), m.not(orUD())]);\n const cornerDFR = (): PieceSet => m.and(m.moves([\"D\", \"R\", \"F\"]));\n const slotFR = (): PieceSet => m.or([cornerDFR(), edgeFR()]);\n\n const CENTERS = (): PieceSet =>\n m.or([m.and([M(), E()]), m.and([M(), S()]), m.and([E(), S()])]);\n const EDGES = (): PieceSet =>\n m.or([\n m.and([M(), orUD(), orFB()]),\n m.and([E(), orLR(), orFB()]),\n m.and([S(), orUD(), orLR()]),\n ]);\n const CORNERS = (): PieceSet => m.not(m.or([CENTERS(), EDGES()]));\n const L6E = (): PieceSet => m.or([M(), m.and([LL(), EDGES()])]);\n\n function dimF2L(): void {\n puzzleStickering.set(F2L(), PieceStickering.Dim);\n }\n\n function setPLL(): void {\n puzzleStickering.set(LL(), PieceStickering.PermuteNonPrimary);\n puzzleStickering.set(centerU(), PieceStickering.Dim); // TODO: why is this needed?\n }\n\n function setOLL(): void {\n puzzleStickering.set(LL(), PieceStickering.IgnoreNonPrimary);\n puzzleStickering.set(centerU(), PieceStickering.Regular); // TODO: why is this needed?\n }\n\n function dimOLL(): void {\n puzzleStickering.set(LL(), PieceStickering.Ignoriented);\n puzzleStickering.set(centerU(), PieceStickering.Dim); // TODO: why is this needed?\n }\n\n switch (stickering) {\n case \"full\":\n break;\n case \"PLL\":\n dimF2L();\n setPLL();\n break;\n case \"CLS\":\n dimF2L();\n puzzleStickering.set(\n m.and(m.moves([\"D\", \"R\", \"F\"])),\n PieceStickering.Regular,\n );\n puzzleStickering.set(LL(), PieceStickering.Ignoriented);\n puzzleStickering.set(\n m.and([LL(), CORNERS()]),\n PieceStickering.IgnoreNonPrimary,\n );\n break;\n case \"OLL\":\n dimF2L();\n setOLL();\n break;\n case \"COLL\":\n dimF2L();\n setPLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n case \"OCLL\":\n dimF2L();\n dimOLL();\n puzzleStickering.set(\n m.and([LL(), CORNERS()]),\n PieceStickering.IgnoreNonPrimary,\n );\n break;\n case \"CLL\":\n dimF2L();\n puzzleStickering.set(\n m.not(m.and([CORNERS(), LL()])),\n PieceStickering.Dim,\n );\n break;\n case \"ELL\":\n dimF2L();\n puzzleStickering.set(LL(), PieceStickering.Dim);\n puzzleStickering.set(m.and([LL(), EDGES()]), PieceStickering.Regular);\n break;\n case \"ELS\":\n dimF2L();\n setOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Ignored);\n puzzleStickering.set(edgeFR(), PieceStickering.Regular);\n puzzleStickering.set(cornerDFR(), PieceStickering.Ignored);\n break;\n case \"LL\":\n dimF2L();\n break;\n case \"F2L\":\n puzzleStickering.set(LL(), PieceStickering.Ignored);\n break;\n case \"ZBLL\":\n dimF2L();\n puzzleStickering.set(LL(), PieceStickering.PermuteNonPrimary);\n puzzleStickering.set(centerU(), PieceStickering.Dim); // why is this needed?\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n case \"ZBLS\":\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n setOLL();\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Ignored);\n break;\n case \"WVLS\":\n // fallthrough\n case \"VLS\":\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n setOLL();\n break;\n case \"LS\":\n dimF2L();\n puzzleStickering.set(slotFR(), PieceStickering.Regular);\n puzzleStickering.set(LL(), PieceStickering.Ignored);\n puzzleStickering.set(centerU(), PieceStickering.Dim);\n break;\n case \"EO\":\n puzzleStickering.set(CORNERS(), PieceStickering.Ignored);\n puzzleStickering.set(\n EDGES(),\n PieceStickering.OrientationWithoutPermutation,\n );\n break;\n case \"CMLL\":\n puzzleStickering.set(F2L(), PieceStickering.Dim);\n puzzleStickering.set(L6E(), PieceStickering.Ignored);\n puzzleStickering.set(m.and([LL(), CORNERS()]), PieceStickering.Regular);\n break;\n case \"L6E\":\n puzzleStickering.set(m.not(L6E()), PieceStickering.Dim);\n break;\n case \"L6EO\":\n puzzleStickering.set(m.not(L6E()), PieceStickering.Dim);\n puzzleStickering.set(\n L6E(),\n PieceStickering.OrientationWithoutPermutation,\n );\n puzzleStickering.set(\n m.and([CENTERS(), orUD()]),\n PieceStickering.OrientationStickers,\n ); // TODO: why is this needed?\n break;\n case \"Daisy\":\n puzzleStickering.set(m.all(), PieceStickering.Ignored);\n puzzleStickering.set(CENTERS(), PieceStickering.Dim);\n puzzleStickering.set(\n m.and([m.move(\"D\"), CENTERS()]),\n PieceStickering.Regular,\n );\n puzzleStickering.set(\n m.and([m.move(\"U\"), EDGES()]),\n PieceStickering.IgnoreNonPrimary,\n );\n break;\n case \"Cross\":\n puzzleStickering.set(m.all(), PieceStickering.Ignored);\n puzzleStickering.set(CENTERS(), PieceStickering.Dim);\n puzzleStickering.set(\n m.and([m.move(\"D\"), CENTERS()]),\n PieceStickering.Regular,\n );\n puzzleStickering.set(\n m.and([m.move(\"D\"), EDGES()]),\n PieceStickering.Regular,\n );\n break;\n case \"2x2x2\":\n puzzleStickering.set(\n m.or(m.moves([\"U\", \"F\", \"R\"])),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(\n m.and([m.or(m.moves([\"U\", \"F\", \"R\"])), CENTERS()]),\n PieceStickering.Dim,\n );\n break;\n case \"2x2x3\":\n puzzleStickering.set(m.all(), PieceStickering.Dim);\n puzzleStickering.set(\n m.or(m.moves([\"U\", \"F\", \"R\"])),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(\n m.and([m.or(m.moves([\"U\", \"F\", \"R\"])), CENTERS()]),\n PieceStickering.Dim,\n );\n puzzleStickering.set(\n m.and([m.move(\"F\"), m.not(m.or(m.moves([\"U\", \"R\"])))]),\n PieceStickering.Regular,\n );\n break;\n case \"Void Cube\":\n puzzleStickering.set(CENTERS(), PieceStickering.Invisible);\n break;\n case \"picture\":\n // fallthrough\n case \"invisible\":\n puzzleStickering.set(m.all(), PieceStickering.Invisible);\n break;\n case \"centers-only\":\n puzzleStickering.set(m.not(CENTERS()), PieceStickering.Ignored);\n break;\n case \"experimental-global-custom-1\":\n // fallthrough\n case \"experimental-global-custom-2\":\n useGlobalCustomStickerer(puzzleStickering, m);\n break;\n default:\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n puzzleStickering.set(m.and(m.moves([])), PieceStickering.Dim);\n }\n return puzzleStickering.toAppearance();\n}\n\nexport async function cubeStickerings(): Promise<ExperimentalStickering[]> {\n return [\n \"full\",\n \"PLL\",\n \"CLS\",\n \"OLL\",\n \"COLL\",\n \"OCLL\",\n \"ELL\",\n \"ELS\",\n \"LL\",\n \"F2L\",\n \"ZBLL\",\n \"ZBLS\",\n \"WVLS\",\n \"VLS\",\n \"LS\",\n \"EO\",\n \"CMLL\",\n \"L6E\",\n \"L6EO\",\n \"Daisy\",\n \"Cross\",\n \"2x2x2\",\n \"2x2x3\",\n \"Void Cube\",\n \"picture\",\n \"invisible\",\n \"centers-only\",\n \"experimental-global-custom-1\",\n \"experimental-global-custom-2\",\n ];\n}\n", "import type { KPuzzleDefinition } from \"../../kpuzzle\";\nimport type { PuzzleGeometry } from \"../../puzzle-geometry\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport {\n cubeAppearance,\n cubeStickerings,\n} from \"../stickerings/cube-stickerings\";\n\n// TODO: modify this to handle TwistyPlayer options\nexport async function asyncGetPuzzleGeometry(\n puzzleName: string,\n): Promise<PuzzleGeometry> {\n const puzzleGeometry = await import(\"../../puzzle-geometry\");\n return puzzleGeometry.getPuzzleGeometryByName(puzzleName, {\n allMoves: true,\n orientCenters: true,\n addRotations: true,\n });\n}\n\n// TODO: can we cache the puzzleGeometry to avoid duplicate calls, without\n// wasting memory? Maybe just save the latest one for successive calls about the\n// same puzzle?\nexport async function asyncGetDef(\n puzzleName: string,\n): Promise<KPuzzleDefinition> {\n return (await asyncGetPuzzleGeometry(puzzleName)).writekpuzzle(true);\n}\n\nexport function genericPGPuzzleLoader(\n id: string,\n fullName: string,\n info?: {\n inventedBy?: string[];\n inventionYear?: number;\n },\n): PuzzleLoader {\n const puzzleLoader: PuzzleLoader = {\n id: id,\n fullName: fullName,\n def: async () => {\n return asyncGetDef(id);\n },\n svg: async () => {\n const pg = await asyncGetPuzzleGeometry(id);\n return pg.generatesvg();\n },\n pg: async () => {\n return asyncGetPuzzleGeometry(id);\n },\n };\n if (info?.inventedBy) {\n puzzleLoader.inventedBy = info.inventedBy;\n }\n if (info?.inventionYear) {\n puzzleLoader.inventionYear = info.inventionYear;\n }\n return puzzleLoader;\n}\n\nexport function cubePGPuzzleLoader(\n id: string,\n fullName: string,\n info?: {\n inventedBy?: string[];\n inventionYear?: number;\n },\n): PuzzleLoader {\n const puzzleLoader: PuzzleLoader = genericPGPuzzleLoader(id, fullName, info);\n puzzleLoader.appearance = cubeAppearance.bind(cubeAppearance, puzzleLoader);\n puzzleLoader.stickerings = cubeStickerings;\n return puzzleLoader;\n}\n", "import type { ExperimentalStickering } from \"../../../twisty\";\nimport { asyncGetPuzzleGeometry } from \"../../async/async-pg3d\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport type { PuzzleAppearance } from \"../../stickerings/appearance\";\nimport {\n cubeAppearance,\n cubeStickerings,\n} from \"../../stickerings/cube-stickerings\";\n\nexport const cube2x2x2: PuzzleLoader = {\n id: \"2x2x2\",\n fullName: \"2\u00D72\u00D72 Cube\",\n def: async () => {\n return (await import(\"./2x2x2.kpuzzle.json\")).cube2x2x2KPuzzle;\n },\n svg: async () => {\n return (await import(\"./2x2x2.kpuzzle.svg\")).default;\n },\n pg: async () => {\n return asyncGetPuzzleGeometry(\"2x2x2\");\n },\n appearance: (stickering: ExperimentalStickering): Promise<PuzzleAppearance> =>\n cubeAppearance(cube2x2x2, stickering),\n stickerings: cubeStickerings,\n};\n", "// Include 3x3x3 in the main bundle for better performance.\nimport { experimentalCube3x3x3KPuzzle as cube3x3x3KPuzzle } from \"../../../kpuzzle\";\nimport type { ExperimentalStickering } from \"../../../twisty\";\nimport { asyncGetPuzzleGeometry } from \"../../async/async-pg3d\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\nimport type { PuzzleAppearance } from \"../../stickerings/appearance\";\nimport {\n cubeAppearance,\n cubeStickerings,\n} from \"../../stickerings/cube-stickerings\";\n\nexport const cube3x3x3: PuzzleLoader = {\n id: \"3x3x3\",\n fullName: \"3\u00D73\u00D73 Cube\",\n inventedBy: [\"Ern\u0151 Rubik\"],\n inventionYear: 1974, // https://en.wikipedia.org/wiki/Rubik%27s_Cube#Conception_and_development\n def: async () => {\n // return await import(\"./3x3x3.kpuzzle.json\");\n return cube3x3x3KPuzzle;\n },\n svg: async () => {\n return (await import(\"./3x3x3.kpuzzle.svg\")).default;\n },\n llSVG: async () => {\n return (await import(\"./3x3x3-ll.kpuzzle.svg\")).default;\n },\n pg: async () => {\n return asyncGetPuzzleGeometry(\"3x3x3\");\n },\n appearance: (stickering: ExperimentalStickering): Promise<PuzzleAppearance> =>\n cubeAppearance(cube3x3x3, stickering),\n stickerings: cubeStickerings,\n};\n", "import type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const clock: PuzzleLoader = {\n id: \"clock\",\n fullName: \"Clock\",\n inventedBy: [\"Christopher C. Wiggs\", \"Christopher J. Taylor\"],\n inventionYear: 1988, // Patent application year: https://www.jaapsch.net/puzzles/patents/us4869506.pdf\n def: async () => {\n return (await import(\"./clock.kpuzzle.json\")).clockKPuzzle;\n },\n svg: async () => {\n return (await import(\"./clock.kpuzzle.svg\")).default;\n },\n};\n", "import type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport {\n PuzzleAppearance,\n PuzzleStickering,\n StickeringManager,\n PieceSet,\n PieceStickering,\n} from \"./appearance\";\n\nexport async function ftoStickering(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<PuzzleAppearance> {\n const def = await puzzleLoader.def();\n const puzzleStickering = new PuzzleStickering(def);\n const m = new StickeringManager(def);\n\n const experimentalFTO_FC = (): PieceSet =>\n m.and([m.move(\"U\"), m.not(m.or(m.moves([\"F\", \"BL\", \"BR\"])))]);\n const experimentalFTO_F2T = (): PieceSet =>\n m.and([m.move(\"U\"), m.not(m.move(\"F\"))]);\n const experimentalFTO_SC = (): PieceSet =>\n m.or([\n experimentalFTO_F2T(),\n m.and([m.move(\"F\"), m.not(m.or(m.moves([\"U\", \"BL\", \"BR\"])))]),\n ]);\n const experimentalFTO_L2C = (): PieceSet =>\n m.not(\n m.or([\n m.and([m.move(\"U\"), m.move(\"F\")]),\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")]),\n m.and([m.move(\"BL\"), m.move(\"BR\")]),\n ]),\n );\n const experimentalFTO_LBT = (): PieceSet =>\n m.not(\n m.or([\n m.and([m.move(\"F\"), m.move(\"BL\")]),\n m.and([m.move(\"F\"), m.move(\"BR\")]),\n ]),\n );\n\n switch (stickering) {\n case \"full\":\n break;\n case \"experimental-fto-fc\":\n puzzleStickering.set(\n m.not(experimentalFTO_FC()),\n PieceStickering.Ignored,\n );\n break;\n case \"experimental-fto-f2t\":\n puzzleStickering.set(\n m.not(experimentalFTO_F2T()),\n PieceStickering.Ignored,\n );\n break;\n case \"experimental-fto-sc\":\n puzzleStickering.set(\n m.not(experimentalFTO_SC()),\n PieceStickering.Ignored,\n );\n break;\n case \"experimental-fto-l2c\":\n puzzleStickering.set(\n m.not(experimentalFTO_L2C()),\n PieceStickering.Ignored,\n );\n break;\n case \"experimental-fto-lbt\":\n puzzleStickering.set(\n m.not(experimentalFTO_LBT()),\n PieceStickering.Ignored,\n );\n break;\n default:\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n puzzleStickering.set(m.and(m.moves([])), PieceStickering.Dim);\n }\n return puzzleStickering.toAppearance();\n}\n\nexport async function ftoStickerings(): Promise<ExperimentalStickering[]> {\n return [\n \"full\",\n \"experimental-fto-fc\",\n \"experimental-fto-f2t\",\n \"experimental-fto-sc\",\n \"experimental-fto-l2c\",\n \"experimental-fto-lbt\",\n ];\n}\n", "import type { ExperimentalStickering } from \"../../../twisty\";\nimport { genericPGPuzzleLoader } from \"../../async/async-pg3d\";\nimport type { PuzzleAppearance } from \"../../stickerings/appearance\";\nimport {\n ftoStickering,\n ftoStickerings,\n} from \"../../stickerings/fto-stickerings\";\n\nconst fto = genericPGPuzzleLoader(\"FTO\", \"Face-Turning Octahedron\", {\n inventedBy: [\"Karl Rohrbach\", \"David Pitcher\"], // http://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1663\n inventionYear: 1983, // http://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1663\n});\n\n// TODO: loading the stickering code async.\nfto.appearance = (\n stickering: ExperimentalStickering,\n): Promise<PuzzleAppearance> => ftoStickering(fto, stickering);\nfto.stickerings = ftoStickerings;\n\nexport { fto };\n", "import type { ExperimentalStickering } from \"../../twisty\";\nimport type { PuzzleLoader } from \"../PuzzleLoader\";\nimport type { PuzzleAppearance } from \"./appearance\";\nimport { cubeAppearance } from \"./cube-stickerings\";\n\n// TODO: cache calculations?\nexport async function megaminxAppearance(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<PuzzleAppearance> {\n switch (stickering) {\n case \"full\":\n case \"F2L\":\n case \"LL\":\n return cubeAppearance(puzzleLoader, stickering);\n default:\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n }\n return cubeAppearance(puzzleLoader, \"full\");\n}\n\nexport async function megaminxStickerings(): Promise<ExperimentalStickering[]> {\n return [\"full\", \"F2L\", \"LL\"];\n}\n", "import type { ExperimentalStickering } from \"../../../twisty\";\nimport { genericPGPuzzleLoader } from \"../../async/async-pg3d\";\nimport type { PuzzleAppearance } from \"../../stickerings/appearance\";\nimport {\n megaminxAppearance,\n megaminxStickerings,\n} from \"../../stickerings/megaminx-stickerings\";\n\nconst megaminx = genericPGPuzzleLoader(\"megaminx\", \"Megaminx\", {\n // Too many simultaneous inventors to name.\n inventionYear: 1981, // Earliest date from https://www.jaapsch.net/puzzles/megaminx.htm\n});\n\n// TODO: loading the stickering code async.\nmegaminx.appearance = (\n stickering: ExperimentalStickering,\n): Promise<PuzzleAppearance> => megaminxAppearance(megaminx, stickering);\nmegaminx.stickerings = megaminxStickerings;\n\nexport { megaminx };\n", "import { asyncGetDef, asyncGetPuzzleGeometry } from \"../../async/async-pg3d\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const pyraminx: PuzzleLoader = {\n id: \"pyraminx\",\n fullName: \"Pyraminx\",\n inventedBy: [\"Uwe Meffert\"],\n inventionYear: 1970, // https://en.wikipedia.org/wiki/Pyraminx#Description\n def: async () => {\n return asyncGetDef(\"pyraminx\");\n },\n svg: async () => {\n return (await import(\"./pyraminx.kpuzzle.svg\")).default;\n },\n pg: async () => {\n return asyncGetPuzzleGeometry(\"pyraminx\");\n },\n};\n", "import type { PuzzleLoader } from \"../../PuzzleLoader\";\n\nexport const square1: PuzzleLoader = {\n id: \"square1\",\n fullName: \"Square-1\",\n inventedBy: [\"Karel Hr\u0161el\", \"Vojtech Kopsk\u00FD\"],\n inventionYear: 1990, // Czech patent application year: http://spisy.upv.cz/Patents/FullDocuments/277/277266.pdf\n def: async () => {\n return (await import(\"./sq1-hyperorbit.kpuzzle.json\")).sq1HyperOrbitKPuzzle;\n },\n svg: async () => {\n return (await import(\"./sq1-hyperorbit.kpuzzle.svg\")).default;\n },\n};\n", "export { customPGPuzzleLoader as experimentalCustomPGPuzzleLoader } from \"./customPGPuzzleLoader\";\nexport { experimentalCube3x3x3KPuzzle as experimentalCube3x3x3KPuzzle } from \"../kpuzzle\";\n\nexport { cubeAppearance as experimentalCubeAppearance } from \"./stickerings/cube-stickerings\";\n\nimport type { PuzzleID } from \"../twisty/old/dom/TwistyPlayerConfig\";\nimport { cubePGPuzzleLoader, genericPGPuzzleLoader } from \"./async/async-pg3d\";\nimport { cube2x2x2 } from \"./implementations/2x2x2\";\nimport { cube3x3x3 } from \"./implementations/3x3x3\";\nimport { clock } from \"./implementations/clock\";\nimport { fto } from \"./implementations/fto\";\nimport { megaminx } from \"./implementations/megaminx\";\nimport { pyraminx } from \"./implementations/pyraminx\";\nimport { square1 } from \"./implementations/square1\";\nimport type { PuzzleLoader } from \"./PuzzleLoader\";\n\nexport type { PuzzleLoader };\n\nexport const puzzles: Record<string, PuzzleLoader> = {\n /******** Start of WCA Puzzles *******/\n \"3x3x3\": cube3x3x3,\n \"2x2x2\": cube2x2x2,\n \"4x4x4\": cubePGPuzzleLoader(\"4x4x4\", \"4\u00D74\u00D74 Cube\"),\n \"5x5x5\": cubePGPuzzleLoader(\"5x5x5\", \"5\u00D75\u00D75 Cube\"),\n \"6x6x6\": cubePGPuzzleLoader(\"6x6x6\", \"6\u00D76\u00D76 Cube\"),\n \"7x7x7\": cubePGPuzzleLoader(\"7x7x7\", \"7\u00D77\u00D77 Cube\"),\n \"40x40x40\": cubePGPuzzleLoader(\"40x40x40\", \"40\u00D740\u00D740 Cube\"),\n // 3x3x3 Blindfolded\n // 3x3x3 Fewest Moves\n // 3x3x3 One-Handed\n clock,\n \"megaminx\": megaminx,\n pyraminx,\n \"skewb\": genericPGPuzzleLoader(\"skewb\", \"Skewb\", {\n inventedBy: [\"Tony Durham\"], // https://www.jaapsch.net/puzzles/skewb.htm\n // inventionYear: 1982, // 1982 is actually the year of Hofstadter's column.\n }),\n square1,\n // 4x4x4 Blindfolded\n // 5x5x5 Blindfolded\n /******** End of WCA puzzles ********/\n \"fto\": fto,\n \"gigaminx\": genericPGPuzzleLoader(\"gigaminx\", \"Gigaminx\", {\n inventedBy: [\"Tyler Fox\"],\n inventionYear: 2006, // Earliest date from https://www.twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1475\n }),\n \"master_tetraminx\": genericPGPuzzleLoader(\n \"master tetraminx\",\n \"Master Tetraminx\",\n {\n inventedBy: [\"Katsuhiko Okamoto\"], // Using master pyraminx: https://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1352\n inventionYear: 2002, // Using master pyraminx: https://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1352\n },\n ),\n};\n\nexport { cube2x2x2, cube3x3x3 };\n\nexport { getFaceletAppearance as experimentalGetFaceletAppearance } from \"./stickerings/appearance\";\nexport type {\n FaceletMeshAppearance as ExperimentalFaceletMeshAppearance,\n PuzzleAppearance as ExperimentalPuzzleAppearance,\n} from \"./stickerings/appearance\";\n\nconst wcaEvents: Record<string, PuzzleID> = {\n \"333\": \"3x3x3\",\n \"222\": \"2x2x2\",\n \"444\": \"4x4x4\",\n \"555\": \"5x5x5\",\n \"666\": \"6x6x6\",\n \"777\": \"7x7x7\",\n \"333bf\": \"3x3x3\",\n \"333fm\": \"3x3x3\",\n \"333oh\": \"3x3x3\",\n \"clock\": \"clock\",\n \"minx\": \"megaminx\",\n \"pyram\": \"pyraminx\",\n \"skewb\": \"skewb\",\n \"sq1\": \"square1\",\n \"444bf\": \"4x4x4\",\n \"555bf\": \"5x5x5\",\n};\nexport function puzzleIDForWCAEvent(event: string): PuzzleID | null {\n return wcaEvents[event] ?? null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -2,8 +2,9 @@ import {
2
2
  __privateAdd,
3
3
  __privateGet,
4
4
  __privateMethod,
5
- __privateSet
6
- } from "./chunk-WJ7AVUI7.js";
5
+ __privateSet,
6
+ __privateWrapper
7
+ } from "./chunk-WO2AXYFE.js";
7
8
 
8
9
  // src/cubing/alg/common.ts
9
10
  var writeAlgDebugField = false;
@@ -20,7 +21,7 @@ var AlgCommon = class extends Comparable {
20
21
  super();
21
22
  if (writeAlgDebugField) {
22
23
  Object.defineProperty(this, "_debugStr", {
23
- get: function() {
24
+ get: () => {
24
25
  return this.toString();
25
26
  }
26
27
  });
@@ -55,7 +56,7 @@ function reverse(g) {
55
56
  return Array.from(g).reverse();
56
57
  }
57
58
  function* directedGenerator(g, direction) {
58
- return direction === -1 ? yield* reverseGenerator(g) : yield* g;
59
+ direction === -1 ? yield* reverseGenerator(g) : yield* g;
59
60
  }
60
61
  function* reverseGenerator(g) {
61
62
  for (const t of Array.from(g).reverse()) {
@@ -136,7 +137,7 @@ var _Commutator = class extends AlgCommon {
136
137
  }
137
138
  }
138
139
  toString() {
139
- return `[${__privateGet(this, _A)}, ${__privateGet(this, _B)}]`;
140
+ return `[${__privateGet(this, _A).toString()}, ${__privateGet(this, _B).toString()}]`;
140
141
  }
141
142
  };
142
143
  var Commutator = _Commutator;
@@ -517,15 +518,13 @@ var AlgParser = class {
517
518
  return __privateGet(this, _input).slice(__privateGet(this, _idx));
518
519
  }
519
520
  popNext() {
520
- var _a;
521
521
  const next = __privateGet(this, _input)[__privateGet(this, _idx)];
522
- __privateSet(this, _idx, (_a = +__privateGet(this, _idx)) + 1), _a;
522
+ __privateWrapper(this, _idx)._++;
523
523
  return next;
524
524
  }
525
525
  tryConsumeNext(expected) {
526
- var _a;
527
526
  if (__privateGet(this, _input)[__privateGet(this, _idx)] === expected) {
528
- __privateSet(this, _idx, (_a = +__privateGet(this, _idx)) + 1), _a;
527
+ __privateWrapper(this, _idx)._++;
529
528
  return true;
530
529
  }
531
530
  return false;
@@ -1332,4 +1331,4 @@ export {
1332
1331
  algCubingNetLink,
1333
1332
  experimentalAppendMove
1334
1333
  };
1335
- //# sourceMappingURL=chunk-YNB7QLBF.js.map
1334
+ //# sourceMappingURL=chunk-BU5PUJK3.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/alg/common.ts", "../../src/cubing/alg/iteration.ts", "../../src/cubing/alg/limits.ts", "../../src/cubing/alg/AlgBuilder.ts", "../../src/cubing/alg/units/containers/Commutator.ts", "../../src/cubing/alg/units/containers/Conjugate.ts", "../../src/cubing/alg/units/leaves/LineComment.ts", "../../src/cubing/alg/units/leaves/Newline.ts", "../../src/cubing/alg/units/leaves/Pause.ts", "../../src/cubing/alg/parse.ts", "../../src/cubing/alg/warnOnce.ts", "../../src/cubing/alg/units/QuantumWithAmount.ts", "../../src/cubing/alg/units/leaves/Move.ts", "../../src/cubing/alg/units/containers/Grouping.ts", "../../src/cubing/alg/is.ts", "../../src/cubing/alg/traversal.ts", "../../src/cubing/alg/Alg.ts", "../../src/cubing/alg/example.ts", "../../src/cubing/alg/keyboard.ts", "../../src/cubing/alg/url.ts", "../../src/cubing/alg/operation.ts"],
4
+ "sourcesContent": ["import type { Alg } from \"./Alg\";\nimport type { IterationDirection } from \"./iteration\";\nimport type { LeafUnit, Unit } from \"./units/Unit\";\n\nlet writeAlgDebugField = false;\nexport function setAlgDebugField(debug: boolean): void {\n writeAlgDebugField = debug;\n}\n\nexport abstract class Comparable {\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n is(c: any): boolean {\n return this instanceof c;\n }\n\n as<T>(c: new (...args: any) => T): T | null {\n return this instanceof c ? this : null;\n }\n\n abstract isIdentical(other: Comparable): boolean;\n}\n\nexport interface Repeatable extends Comparable {\n experimentalExpand(\n iterDir?: IterationDirection,\n depth?: number,\n ): Generator<LeafUnit>;\n}\n\n// Common to algs or units\nexport abstract class AlgCommon<T extends Alg | Unit>\n extends Comparable\n implements Repeatable\n{\n constructor() {\n super();\n if (writeAlgDebugField) {\n Object.defineProperty(this, \"_debugStr\", {\n get: () => {\n return this.toString();\n },\n });\n }\n }\n\n get log(): (message?: any) => void {\n // By returning a (bound) version of `console.log`, we ensure that DevTools\n // logs the call site instead of this function.\n return console.log.bind(console, this, this.toString()) as (\n message?: any,\n ) => void;\n }\n\n abstract toString(): string;\n\n abstract invert(): T;\n\n abstract experimentalExpand(iterDir: IterationDirection): Generator<LeafUnit>;\n}\n", "export enum IterationDirection {\n Forwards = 1,\n Backwards = -1,\n}\n\nexport function toggleDirection(\n iterationDirection: IterationDirection,\n flip: boolean = true,\n): IterationDirection {\n if (!flip) {\n return iterationDirection;\n }\n switch (iterationDirection) {\n case IterationDirection.Forwards:\n return IterationDirection.Backwards;\n case IterationDirection.Backwards:\n return IterationDirection.Forwards;\n }\n}\n\nexport function direct<T>(\n g: Iterable<T>,\n iterDir: IterationDirection,\n): Iterable<T> {\n return iterDir === IterationDirection.Backwards ? Array.from(g).reverse() : g;\n}\n\nexport function reverse<T>(g: Iterable<T>): Iterable<T> {\n return Array.from(g).reverse();\n}\n\nexport function* directedGenerator<T>(\n g: Generator<T>,\n direction: IterationDirection,\n): Generator<T> {\n direction === IterationDirection.Backwards\n ? yield* reverseGenerator(g)\n : yield* g;\n}\n\nexport function* reverseGenerator<T>(g: Generator<T>): Generator<T> {\n for (const t of Array.from(g).reverse()) {\n yield t;\n }\n}\n", "export const MAX_INT = 0x7fffffff; // 2^32-1, the max value for signed 32-bit ints.\nexport const MAX_INT_DESCRIPTION = \"2^31 - 1\";\nexport const MIN_INT = -0x80000000;\nexport const MINT_INT_DESCRIPTION = \"-2^31\";\n", "import { Alg } from \"./Alg\";\nimport type { Unit } from \"./units/Unit\";\n\nexport class AlgBuilder {\n #units: Unit[] = [];\n\n push(u: Unit): void {\n this.#units.push(u);\n }\n\n // TODO: Allow FlexibleAlgSource?\n /** @deprecated */\n experimentalPushAlg(alg: Alg): void {\n // TODO: Optimize?\n for (const u of alg.units()) {\n this.push(u);\n }\n }\n\n // TODO: can we guarantee this to be fast in the permanent API?\n experimentalNumUnits(): number {\n return this.#units.length;\n }\n\n // can be called multiple times, even if you push units inbetween.\n toAlg(): Alg {\n return new Alg(this.#units);\n }\n\n reset(): void {\n this.#units = [];\n }\n}\n", "import { Alg, experimentalEnsureAlg, FlexibleAlgSource } from \"../../Alg\";\nimport { AlgCommon, Comparable } from \"../../common\";\nimport { IterationDirection } from \"../../iteration\";\nimport type { LeafUnit } from \"../Unit\";\n\nexport class Commutator extends AlgCommon<Commutator> {\n readonly #A: Alg;\n readonly #B: Alg;\n\n constructor(aSource: FlexibleAlgSource, bSource: FlexibleAlgSource) {\n super();\n this.#A = experimentalEnsureAlg(aSource);\n this.#B = experimentalEnsureAlg(bSource);\n }\n\n get A(): Alg {\n return this.#A;\n }\n\n get B(): Alg {\n return this.#B;\n }\n\n isIdentical(other: Comparable): boolean {\n const otherAsCommutator = other.as(Commutator);\n return !!(\n otherAsCommutator?.A.isIdentical(this.A) &&\n otherAsCommutator?.B.isIdentical(this.B)\n );\n }\n\n invert(): Commutator {\n return new Commutator(this.#B, this.#A);\n }\n\n *experimentalExpand(\n iterDir: IterationDirection = IterationDirection.Forwards,\n depth?: number,\n ): Generator<LeafUnit> {\n depth ??= Infinity;\n if (depth === 0) {\n yield iterDir === IterationDirection.Forwards ? this : this.invert();\n } else {\n if (iterDir === IterationDirection.Forwards) {\n yield* this.A.experimentalExpand(\n IterationDirection.Forwards,\n depth - 1,\n );\n yield* this.B.experimentalExpand(\n IterationDirection.Forwards,\n depth - 1,\n );\n yield* this.A.experimentalExpand(\n IterationDirection.Backwards,\n depth - 1,\n );\n yield* this.B.experimentalExpand(\n IterationDirection.Backwards,\n depth - 1,\n );\n } else {\n yield* this.B.experimentalExpand(\n IterationDirection.Forwards,\n depth - 1,\n );\n yield* this.A.experimentalExpand(\n IterationDirection.Forwards,\n depth - 1,\n );\n yield* this.B.experimentalExpand(\n IterationDirection.Backwards,\n depth - 1,\n );\n yield* this.A.experimentalExpand(\n IterationDirection.Backwards,\n depth - 1,\n );\n }\n }\n }\n\n toString(): string {\n return `[${this.#A.toString()}, ${this.#B.toString()}]`;\n }\n}\n", "import { Alg, experimentalEnsureAlg, FlexibleAlgSource } from \"../../Alg\";\nimport { AlgCommon, Comparable } from \"../../common\";\nimport { IterationDirection } from \"../../iteration\";\nimport type { LeafUnit } from \"../Unit\";\n\nexport class Conjugate extends AlgCommon<Conjugate> {\n readonly #A: Alg;\n readonly #B: Alg;\n\n constructor(aSource: FlexibleAlgSource, bSource: FlexibleAlgSource) {\n super();\n this.#A = experimentalEnsureAlg(aSource);\n this.#B = experimentalEnsureAlg(bSource);\n }\n\n get A(): Alg {\n return this.#A;\n }\n\n get B(): Alg {\n return this.#B;\n }\n\n isIdentical(other: Comparable): boolean {\n const otherAsConjugate = other.as(Conjugate);\n return !!(\n otherAsConjugate?.A.isIdentical(this.A) &&\n otherAsConjugate?.B.isIdentical(this.B)\n );\n }\n\n invert(): Conjugate {\n return new Conjugate(this.#A, this.#B.invert());\n }\n\n *experimentalExpand(\n iterDir: IterationDirection,\n depth?: number,\n ): Generator<LeafUnit> {\n depth ??= Infinity;\n if (depth === 0) {\n yield iterDir === IterationDirection.Forwards ? this : this.invert();\n } else {\n yield* this.A.experimentalExpand(IterationDirection.Forwards, depth - 1);\n yield* this.B.experimentalExpand(iterDir, depth - 1);\n yield* this.A.experimentalExpand(IterationDirection.Backwards, depth - 1);\n }\n }\n\n toString(): string {\n return `[${this.A}: ${this.B}]`;\n }\n}\n", "import { AlgCommon, Comparable } from \"../../common\";\nimport { IterationDirection } from \"../../iteration\";\nimport type { LeafUnit } from \"../Unit\";\n\n// TODO: hash\n// TODO: this conflicts with the HTML `LineComment` class\nexport class LineComment extends AlgCommon<LineComment> {\n readonly #text: string;\n\n constructor(commentText: string) {\n super();\n if (commentText.includes(\"\\n\") || commentText.includes(\"\\r\")) {\n throw new Error(\"LineComment cannot contain newline\");\n }\n this.#text = commentText;\n }\n\n get text(): string {\n return this.#text;\n }\n\n isIdentical(other: Comparable): boolean {\n const otherAsLineComment = other as LineComment;\n return other.is(LineComment) && this.#text === otherAsLineComment.#text;\n }\n\n invert(): LineComment {\n return this;\n }\n\n *experimentalExpand(\n _iterDir: IterationDirection = IterationDirection.Forwards,\n _depth: number = Infinity,\n ): Generator<LeafUnit> {\n yield this;\n }\n\n toString(): string {\n return `//${this.#text}`;\n }\n\n // toJSON(): LineCommentJSON {\n // return {\n // type: \"comment\",\n // text: this.#text,\n // };\n // }\n}\n", "import { AlgCommon, Comparable } from \"../../common\";\nimport { IterationDirection } from \"../../iteration\";\nimport type { LeafUnit } from \"../Unit\";\n\nexport class Newline extends AlgCommon<Newline> {\n toString(): string {\n return `\\n`;\n }\n\n isIdentical(other: Comparable): boolean {\n return other.is(Newline);\n }\n\n invert(): Newline {\n return this;\n }\n\n *experimentalExpand(\n _iterDir: IterationDirection = IterationDirection.Forwards,\n _depth: number = Infinity,\n ): Generator<LeafUnit> {\n yield this;\n }\n}\n", "import { AlgCommon, Comparable } from \"../../common\";\nimport { IterationDirection } from \"../../iteration\";\nimport type { LeafUnit } from \"../Unit\";\n\nexport class Pause extends AlgCommon<Pause> {\n toString(): string {\n return `.`;\n }\n\n isIdentical(other: Comparable): boolean {\n return other.is(Pause);\n }\n\n invert(): Pause {\n return this;\n }\n\n *experimentalExpand(\n _iterDir: IterationDirection = IterationDirection.Forwards,\n _depth: number = Infinity,\n ): Generator<LeafUnit> {\n yield this;\n }\n}\n", "import { Alg } from \"./Alg\";\nimport { AlgBuilder } from \"./AlgBuilder\";\nimport type { Unit } from \"./units\";\nimport { Commutator } from \"./units/containers/Commutator\";\nimport { Conjugate } from \"./units/containers/Conjugate\";\nimport { Grouping } from \"./units/containers/Grouping\";\nimport { LineComment } from \"./units/leaves/LineComment\";\nimport { Move, QuantumMove } from \"./units/leaves/Move\";\nimport { Newline } from \"./units/leaves/Newline\";\nimport { Pause } from \"./units/leaves/Pause\";\n\ntype StoppingChar = \",\" | \":\" | \"]\" | \")\";\n\nfunction parseIntWithEmptyFallback<T>(n: string, emptyFallback: T): number | T {\n return n ? parseInt(n) : emptyFallback;\n}\n\nconst amountRegex = /^(\\d+)?('?)/;\nconst moveStartRegex = /^[_\\dA-Za-z]/; // TODO: Handle slash\nconst quantumMoveRegex = /^((([1-9]\\d*)-)?([1-9]\\d*))?([_A-Za-z]+)?/;\nconst commentTextRegex = /^[^\\n]*/;\nconst square1PairStart = /^(-?\\d+), ?/; // TODO: match up with other whitespace handling?\nconst square1PairEnd = /^(-?\\d+)\\)/; // TODO: match up with other whitespace handling?\n\nexport function parseAlg(s: string): Alg {\n return new AlgParser().parseAlg(s);\n}\n\nexport function parseMove(s: string): Move {\n return new AlgParser().parseMove(s);\n}\n\nexport function parseQuantumMove(s: string): QuantumMove {\n return new AlgParser().parseQuantumMove(s);\n}\n\nexport interface ParserIndexed {\n startCharIndex: number;\n endCharIndex: number;\n}\n\nexport type Parsed<T extends Alg | Unit> = T & ParserIndexed;\n\n// TODO: attach to parser so the end char index can default to `this.#idx`?\nfunction addCharIndices<T extends Alg | Unit>(\n t: T,\n startCharIndex: number,\n endCharIndex: number,\n): Parsed<T> {\n const parsedT = t as ParserIndexed & T;\n parsedT.startCharIndex = startCharIndex;\n parsedT.endCharIndex = endCharIndex;\n return parsedT;\n}\n\nexport function transferCharIndex<T extends Alg | Unit>(from: T, to: T): T {\n if (\"startCharIndex\" in from) {\n (to as Parsed<T>).startCharIndex = (from as Parsed<T>).startCharIndex;\n }\n if (\"endCharIndex\" in from) {\n (to as Parsed<T>).endCharIndex = (from as Parsed<T>).endCharIndex;\n }\n return to;\n}\n\ntype MoveSuffix = \"+\" | \"++\" | \"-\" | \"--\";\n\n// TODO: support recording string locations for moves.\nclass AlgParser {\n #input: string = \"\";\n #idx: number = 0;\n\n parseAlg(input: string): Parsed<Alg> {\n this.#input = input;\n this.#idx = 0;\n const alg = this.parseAlgWithStopping([]);\n this.mustBeAtEndOfInput();\n return alg;\n }\n\n parseMove(input: string): Parsed<Move> {\n this.#input = input;\n this.#idx = 0;\n const move = this.parseMoveImpl();\n this.mustBeAtEndOfInput();\n return move;\n }\n\n parseQuantumMove(input: string): QuantumMove {\n this.#input = input;\n this.#idx = 0;\n const quantumMove = this.parseQuantumMoveImpl();\n this.mustBeAtEndOfInput();\n return quantumMove;\n }\n\n private mustBeAtEndOfInput() {\n if (this.#idx !== this.#input.length) {\n throw new Error(\"parsing unexpectedly ended early\");\n }\n }\n\n private parseAlgWithStopping(stopBefore: StoppingChar[]): Parsed<Alg> {\n let algStartIdx = this.#idx;\n let algEndIdx = this.#idx;\n const algBuilder = new AlgBuilder();\n\n // We're \"crowded\" if there was not a space or newline since the last unit.\n let crowded = false;\n\n const mustNotBeCrowded = (idx: number): void => {\n if (crowded) {\n throw new Error(\n `Unexpected character at index ${idx}. Are you missing a space?`,\n ); // TODO better error message\n }\n };\n\n mainLoop: while (this.#idx < this.#input.length) {\n const savedCharIndex = this.#idx;\n if ((stopBefore as string[]).includes(this.#input[this.#idx])) {\n return addCharIndices(algBuilder.toAlg(), algStartIdx, algEndIdx);\n }\n if (this.tryConsumeNext(\" \")) {\n crowded = false;\n if (algBuilder.experimentalNumUnits() === 0) {\n algStartIdx = this.#idx;\n }\n continue mainLoop;\n } else if (moveStartRegex.test(this.#input[this.#idx])) {\n mustNotBeCrowded(savedCharIndex);\n const move = this.parseMoveImpl();\n algBuilder.push(move);\n crowded = true;\n algEndIdx = this.#idx;\n continue mainLoop;\n } else if (this.tryConsumeNext(\"(\")) {\n mustNotBeCrowded(savedCharIndex);\n const sq1PairStartMatch = this.tryRegex(square1PairStart);\n if (sq1PairStartMatch) {\n const topAmountString = sq1PairStartMatch[1];\n const savedCharIndexD = this.#idx;\n const sq1PairEndMatch = this.parseRegex(square1PairEnd);\n const uMove = addCharIndices(\n new Move(new QuantumMove(\"U_SQ_\"), parseInt(topAmountString)),\n savedCharIndex + 1,\n savedCharIndex + 1 + topAmountString.length,\n );\n const dMove = addCharIndices(\n new Move(new QuantumMove(\"D_SQ_\"), parseInt(sq1PairEndMatch[1])),\n savedCharIndexD,\n this.#idx - 1,\n );\n const alg = addCharIndices(\n new Alg([uMove, dMove]),\n savedCharIndex + 1,\n this.#idx - 1,\n );\n algBuilder.push(\n addCharIndices(new Grouping(alg), savedCharIndex, this.#idx),\n );\n crowded = true;\n algEndIdx = this.#idx;\n continue mainLoop;\n } else {\n const alg = this.parseAlgWithStopping([\")\"]);\n this.mustConsumeNext(\")\");\n const amount = this.parseAmount();\n algBuilder.push(\n addCharIndices(\n new Grouping(alg, amount),\n savedCharIndex,\n this.#idx,\n ),\n );\n crowded = true;\n algEndIdx = this.#idx;\n continue mainLoop;\n }\n } else if (this.tryConsumeNext(\"[\")) {\n mustNotBeCrowded(savedCharIndex);\n const A = this.parseAlgWithStopping([\",\", \":\"]);\n const separator = this.popNext();\n const B = this.parseAlgWithStopping([\"]\"]);\n this.mustConsumeNext(\"]\");\n switch (separator) {\n case \":\":\n algBuilder.push(\n addCharIndices(new Conjugate(A, B), savedCharIndex, this.#idx),\n );\n crowded = true;\n algEndIdx = this.#idx;\n continue mainLoop;\n case \",\":\n algBuilder.push(\n addCharIndices(new Commutator(A, B), savedCharIndex, this.#idx),\n );\n crowded = true;\n algEndIdx = this.#idx;\n continue mainLoop;\n default:\n throw \"unexpected parsing error\";\n }\n } else if (this.tryConsumeNext(\"\\n\")) {\n algBuilder.push(\n addCharIndices(new Newline(), savedCharIndex, this.#idx),\n );\n crowded = false;\n algEndIdx = this.#idx;\n continue mainLoop;\n } else if (this.tryConsumeNext(\"/\")) {\n if (this.tryConsumeNext(\"/\")) {\n mustNotBeCrowded(savedCharIndex);\n const [text] = this.parseRegex(commentTextRegex);\n algBuilder.push(\n addCharIndices(new LineComment(text), savedCharIndex, this.#idx),\n );\n crowded = false;\n algEndIdx = this.#idx;\n continue mainLoop;\n } else {\n // We allow crowding here to account for csTimer scrambles, which don't have a space between a Square-1 tuple and the following slash.\n algBuilder.push(\n addCharIndices(new Move(\"_SLASH_\"), savedCharIndex, this.#idx),\n );\n crowded = true;\n algEndIdx = this.#idx;\n continue mainLoop;\n }\n } else if (this.tryConsumeNext(\".\")) {\n mustNotBeCrowded(savedCharIndex);\n algBuilder.push(addCharIndices(new Pause(), savedCharIndex, this.#idx));\n crowded = true;\n algEndIdx = this.#idx;\n continue mainLoop;\n } else {\n throw new Error(`Unexpected character: ${this.popNext()}`);\n }\n }\n\n if (this.#idx !== this.#input.length) {\n throw new Error(\"did not finish parsing?\");\n }\n if (stopBefore.length > 0) {\n throw new Error(\"expected stopping\");\n }\n return addCharIndices(algBuilder.toAlg(), algStartIdx, algEndIdx);\n }\n\n private parseQuantumMoveImpl(): QuantumMove {\n const [, , , outerLayerStr, innerLayerStr, family] =\n this.parseRegex(quantumMoveRegex);\n\n return new QuantumMove(\n family,\n parseIntWithEmptyFallback(innerLayerStr, undefined),\n parseIntWithEmptyFallback(outerLayerStr, undefined),\n );\n }\n\n private parseMoveImpl(): Parsed<Move> {\n const savedCharIndex = this.#idx;\n\n if (this.tryConsumeNext(\"/\")) {\n return addCharIndices(new Move(\"_SLASH_\"), savedCharIndex, this.#idx);\n }\n\n let quantumMove = this.parseQuantumMoveImpl();\n // Only `hadEmptyAbsAmount` is `const`.\n // eslint-disable-next-line prefer-const\n let [amount, hadEmptyAbsAmount] = this.parseAmountAndTrackEmptyAbsAmount();\n const suffix = this.parseMoveSuffix();\n\n if (suffix) {\n if (amount < 0) {\n throw new Error(\"uh-oh\");\n }\n if ((suffix === \"++\" || suffix === \"--\") && amount !== 1) {\n // TODO: Handle 1 vs. null\n throw new Error(\n \"Pochmann ++ or -- moves cannot have an amount other than 1.\",\n );\n }\n if ((suffix === \"++\" || suffix === \"--\") && !hadEmptyAbsAmount) {\n throw new Error(\n \"Pochmann ++ or -- moves cannot have an amount written as a number.\",\n );\n }\n if ((suffix === \"+\" || suffix === \"-\") && hadEmptyAbsAmount) {\n throw new Error(\n \"Clock dial moves must have an amount written as a natural number followed by + or -.\",\n );\n }\n if (suffix.startsWith(\"+\")) {\n quantumMove = quantumMove.modified({\n family: `${quantumMove.family}_${\n suffix === \"+\" ? \"PLUS\" : \"PLUSPLUS\"\n }_`, // TODO\n });\n }\n if (suffix.startsWith(\"-\")) {\n quantumMove = quantumMove.modified({\n family: `${quantumMove.family}_${\n suffix === \"-\" ? \"PLUS\" : \"PLUSPLUS\"\n }_`, // TODO\n });\n amount *= -1;\n }\n }\n\n const move = addCharIndices(\n new Move(quantumMove, amount),\n savedCharIndex,\n this.#idx,\n );\n return move;\n }\n\n private parseMoveSuffix(): MoveSuffix | null {\n if (this.tryConsumeNext(\"+\")) {\n if (this.tryConsumeNext(\"+\")) {\n return \"++\";\n }\n return \"+\";\n }\n if (this.tryConsumeNext(\"-\")) {\n if (this.tryConsumeNext(\"-\")) {\n return \"--\";\n }\n return \"-\";\n }\n return null;\n }\n\n private parseAmountAndTrackEmptyAbsAmount(): [number, boolean] {\n const savedIdx = this.#idx;\n const [, absAmountStr, primeStr] = this.parseRegex(amountRegex);\n if (absAmountStr?.startsWith(\"0\") && absAmountStr !== \"0\") {\n throw new Error(\n `Error at char index ${savedIdx}: An amount can only start with 0 if it's exactly the digit 0.`,\n );\n }\n return [\n parseIntWithEmptyFallback(absAmountStr, 1) * (primeStr === \"'\" ? -1 : 1),\n !absAmountStr,\n ];\n }\n\n private parseAmount(): number {\n const savedIdx = this.#idx;\n const [, absAmountStr, primeStr] = this.parseRegex(amountRegex);\n if (absAmountStr?.startsWith(\"0\") && absAmountStr !== \"0\") {\n throw new Error(\n `Error at char index ${savedIdx}: An amount number can only start with 0 if it's exactly the digit 0.`,\n );\n }\n return (\n parseIntWithEmptyFallback(absAmountStr, 1) * (primeStr === \"'\" ? -1 : 1)\n );\n }\n\n private parseRegex(regex: RegExp): RegExpExecArray {\n const arr = regex.exec(this.remaining());\n if (arr === null) {\n throw new Error(\"internal parsing error\"); // TODO\n }\n this.#idx += arr[0].length;\n return arr;\n }\n\n // TOD: can we avoid this?\n private tryRegex(regex: RegExp): RegExpExecArray | null {\n const arr = regex.exec(this.remaining());\n if (arr === null) {\n return null;\n }\n this.#idx += arr[0].length;\n return arr;\n }\n\n private remaining(): string {\n return this.#input.slice(this.#idx);\n }\n\n private popNext(): string {\n const next = this.#input[this.#idx];\n this.#idx++;\n return next;\n }\n\n private tryConsumeNext(expected: string): boolean {\n if (this.#input[this.#idx] === expected) {\n this.#idx++;\n return true;\n }\n return false;\n }\n\n private mustConsumeNext(expected: string): string {\n const next = this.popNext();\n if (next !== expected) {\n throw new Error(\n `expected \\`${expected}\\` while parsing, encountered ${next}`,\n ); // TODO: be more helpful\n }\n return next;\n }\n}\n", "const warned = new Set<string>();\nexport function warnOnce(s: string): void {\n if (!warned.has(s)) {\n console.warn(s);\n warned.add(s);\n }\n}\n", "import type { Repeatable } from \"../common\";\nimport { IterationDirection, toggleDirection } from \"../iteration\";\nimport { MAX_INT, MAX_INT_DESCRIPTION, MIN_INT } from \"../limits\";\nimport type { LeafUnit } from \"./Unit\";\n\nexport class QuantumWithAmount<Q extends Repeatable> {\n readonly quantum: Q;\n readonly amount: number;\n\n constructor(quantum: Q, amount: number = 1) {\n this.quantum = quantum;\n this.amount = amount;\n\n if (\n !Number.isInteger(this.amount) ||\n this.amount < MIN_INT ||\n this.amount > MAX_INT\n ) {\n throw new Error(\n `Unit amount absolute value must be a non-negative integer from ${MAX_INT_DESCRIPTION} to ${MAX_INT_DESCRIPTION}.`,\n );\n }\n }\n\n suffix(): string {\n let s: string = \"\";\n // TODO\n const absAmount = Math.abs(this.amount);\n if (absAmount !== 1) {\n s += absAmount;\n }\n if (this.amount < 0) {\n s += \"'\";\n }\n return s;\n }\n\n isIdentical(other: QuantumWithAmount<Q>): boolean {\n return (\n this.quantum.isIdentical(other.quantum) && this.amount === other.amount\n );\n }\n\n // TODO: `Conjugate` and `Commutator` decrement `depth` inside the quantum, `Grouping` has to do it outside the quantum.\n *experimentalExpand(\n iterDir: IterationDirection,\n depth: number,\n ): Generator<LeafUnit> {\n const absAmount = Math.abs(this.amount);\n const newIterDir = toggleDirection(iterDir, this.amount < 0);\n for (let i = 0; i < absAmount; i++) {\n yield* this.quantum.experimentalExpand(newIterDir, depth);\n }\n }\n}\n", "import { AlgCommon, Comparable } from \"../../common\";\nimport { IterationDirection } from \"../../iteration\";\nimport { MAX_INT, MAX_INT_DESCRIPTION } from \"../../limits\";\nimport { parseMove, parseQuantumMove, transferCharIndex } from \"../../parse\";\nimport { warnOnce } from \"../../warnOnce\";\nimport { QuantumWithAmount } from \"../QuantumWithAmount\";\nimport type { LeafUnit } from \"../Unit\";\n\ninterface QuantumMoveModifications {\n outerLayer?: number;\n innerLayer?: number;\n family?: string;\n}\n\nexport class QuantumMove extends Comparable {\n readonly #family: string;\n readonly #innerLayer: number | null;\n readonly #outerLayer: number | null;\n\n constructor(\n family: string,\n innerLayer?: number | null,\n outerLayer?: number | null,\n ) {\n super();\n this.#family = family;\n this.#innerLayer = innerLayer ?? null;\n this.#outerLayer = outerLayer ?? null;\n Object.freeze(this);\n\n if (\n this.#innerLayer !== null &&\n (!Number.isInteger(this.#innerLayer) ||\n this.#innerLayer < 1 ||\n this.#innerLayer > MAX_INT)\n ) {\n throw new Error(\n `QuantumMove inner layer must be a positive integer below ${MAX_INT_DESCRIPTION}.`,\n );\n }\n\n if (\n this.#outerLayer !== null &&\n (!Number.isInteger(this.#outerLayer) ||\n this.#outerLayer < 1 ||\n this.#outerLayer > MAX_INT)\n ) {\n throw new Error(\n `QuantumMove outer layer must be a positive integer below ${MAX_INT_DESCRIPTION}.`,\n );\n }\n\n if (\n this.#outerLayer !== null &&\n this.#innerLayer !== null &&\n this.#innerLayer <= this.#outerLayer\n ) {\n throw new Error(\n \"QuantumMove outer layer must be smaller than inner layer.\",\n );\n }\n\n if (this.#outerLayer !== null && this.#innerLayer === null) {\n throw new Error(\n \"QuantumMove with an outer layer must have an inner layer\",\n ); // TODO: test\n }\n }\n\n static fromString(s: string): QuantumMove {\n return parseQuantumMove(s);\n }\n\n // TODO: `modify`?\n modified(modifications: QuantumMoveModifications): QuantumMove {\n return new QuantumMove(\n modifications.family ?? this.#family,\n modifications.innerLayer ?? this.#innerLayer,\n modifications.outerLayer ?? this.#outerLayer,\n );\n }\n\n isIdentical(other: QuantumMove): boolean {\n const otherAsQuantumMove = other;\n return (\n other.is(QuantumMove) &&\n this.#family === otherAsQuantumMove.#family &&\n this.#innerLayer === otherAsQuantumMove.#innerLayer &&\n this.#outerLayer === otherAsQuantumMove.#outerLayer\n );\n }\n\n // TODO: provide something more useful on average.\n /** @deprecated */\n get family(): string {\n return this.#family;\n }\n\n // TODO: provide something more useful on average.\n /** @deprecated */\n get outerLayer(): number | null {\n return this.#outerLayer;\n }\n\n // TODO: provide something more useful on average.\n /** @deprecated */\n get innerLayer(): number | null {\n return this.#innerLayer;\n }\n\n experimentalExpand(): Generator<LeafUnit> {\n throw new Error(\n \"experimentalExpand() cannot be called on a `QuantumMove` directly.\",\n );\n }\n\n toString(): string {\n let s = this.#family;\n if (this.#innerLayer !== null) {\n s = String(this.#innerLayer) + s;\n if (this.#outerLayer !== null) {\n s = String(this.#outerLayer) + \"-\" + s;\n }\n }\n return s;\n }\n}\n\ninterface MoveModifications {\n outerLayer?: number;\n innerLayer?: number;\n family?: string;\n amount?: number;\n}\n\nexport class Move extends AlgCommon<Move> {\n readonly #quantumWithAmount: QuantumWithAmount<QuantumMove>;\n\n constructor(\n ...args: [QuantumMove] | [QuantumMove, number] | [string] | [string, number]\n ) {\n super();\n if (typeof args[0] === \"string\") {\n if (args[1] ?? null) {\n this.#quantumWithAmount = new QuantumWithAmount(\n QuantumMove.fromString(args[0]),\n args[1],\n );\n return;\n } else {\n return Move.fromString(args[0]); // TODO: can we return here?\n }\n }\n this.#quantumWithAmount = new QuantumWithAmount<QuantumMove>(\n args[0],\n args[1],\n );\n }\n\n isIdentical(other: Comparable): boolean {\n const otherAsMove = other.as(Move);\n return (\n !!otherAsMove &&\n this.#quantumWithAmount.isIdentical(otherAsMove.#quantumWithAmount)\n );\n }\n\n invert(): Move {\n // TODO: handle char indices more consistently among units.\n return transferCharIndex(\n this,\n new Move(this.#quantumWithAmount.quantum, -this.amount),\n );\n }\n\n *experimentalExpand(\n iterDir: IterationDirection = IterationDirection.Forwards,\n ): Generator<LeafUnit> {\n if (iterDir === IterationDirection.Forwards) {\n yield this;\n } else {\n yield this.modified({\n amount: -this.amount,\n });\n }\n }\n\n get quantum(): QuantumMove {\n return this.#quantumWithAmount.quantum;\n }\n\n // TODO: `modify`?\n modified(modifications: MoveModifications): Move {\n // TODO: Avoid creating a new quantum move\n return new Move(\n this.#quantumWithAmount.quantum.modified(modifications),\n modifications.amount ?? this.amount,\n );\n }\n\n static fromString(s: string): Move {\n return parseMove(s);\n }\n\n get amount(): number {\n return this.#quantumWithAmount.amount;\n }\n\n /** @deprecated */\n get type(): string {\n warnOnce(\"deprecated: type\");\n return \"blockMove\";\n }\n\n /** @deprecated */\n get family(): string {\n return this.#quantumWithAmount.quantum.family ?? undefined;\n }\n\n /** @deprecated */\n get outerLayer(): number | undefined {\n return this.#quantumWithAmount.quantum.outerLayer ?? undefined;\n }\n\n /** @deprecated */\n get innerLayer(): number | undefined {\n return this.#quantumWithAmount.quantum.innerLayer ?? undefined;\n }\n\n toString(): string {\n if (this.family === \"_SLASH_\") {\n return \"/\"; // TODO: validate no amount\n }\n if (this.family.endsWith(\"_PLUS_\")) {\n return (\n this.#quantumWithAmount.quantum.toString().slice(0, -6) +\n Math.abs(this.amount) +\n (this.amount < 0 ? \"-\" : \"+\")\n ); // TODO\n }\n if (this.family.endsWith(\"_PLUSPLUS_\")) {\n const absAmount = Math.abs(this.amount);\n return (\n this.#quantumWithAmount.quantum.toString().slice(0, -10) +\n (absAmount === 1 ? \"\" : absAmount) +\n (this.amount < 0 ? \"--\" : \"++\")\n ); // TODO\n }\n\n return (\n this.#quantumWithAmount.quantum.toString() +\n this.#quantumWithAmount.suffix()\n );\n }\n\n // // TODO: Serialize as a string?\n // toJSON(): MoveJSON {\n // return {\n // type: \"move\",\n // family: this.family,\n // innerLayer: this.innerLayer,\n // outerLayer: this.outerLayer,\n // };\n // }\n}\n", "import { Alg, experimentalEnsureAlg, FlexibleAlgSource } from \"../../Alg\";\nimport { AlgCommon, Comparable } from \"../../common\";\nimport { IterationDirection } from \"../../iteration\";\nimport { Move, QuantumMove } from \"../leaves/Move\";\nimport { QuantumWithAmount } from \"../QuantumWithAmount\";\nimport type { LeafUnit } from \"../Unit\";\n\n// This is a workaround for `jest`, which doesn't handle cycles of imports inside `cubing/alg`.\n// We need to lazy-initialize the reusable quantum moves for Square-1, so we create this wrapper for it.\nclass Square1TupleFormatter {\n quantumU_SQ_: QuantumMove | null = null;\n quantumD_SQ_: QuantumMove | null = null;\n\n format(grouping: Grouping): string | null {\n const amounts = this.tuple(grouping);\n if (!amounts) {\n return null;\n }\n return `(${amounts.map((move) => move.amount).join(\", \")})`;\n }\n\n tuple(grouping: Grouping): [moveU: Move, moveD: Move] | null {\n this.quantumU_SQ_ ||= new QuantumMove(\"U_SQ_\");\n this.quantumD_SQ_ ||= new QuantumMove(\"D_SQ_\");\n\n const quantumAlg = grouping.alg;\n if (quantumAlg.experimentalNumUnits() === 2) {\n const [U, D] = quantumAlg.units();\n if (\n U.as(Move)?.quantum.isIdentical(this.quantumU_SQ_) &&\n D.as(Move)?.quantum.isIdentical(this.quantumD_SQ_)\n ) {\n if (grouping.amount !== 1) {\n throw new Error(\n \"Square-1 tuples cannot have an amount other than 1.\",\n );\n }\n return [U as Move, D as Move]; // TODO: can we reuse the casting from above?\n }\n }\n return null;\n }\n}\nconst square1TupleFormatterInstance = new Square1TupleFormatter();\n\nexport class Grouping extends AlgCommon<Grouping> {\n readonly #quantumWithAmount: QuantumWithAmount<Alg>;\n\n constructor(algSource: FlexibleAlgSource, amount?: number) {\n super();\n const alg = experimentalEnsureAlg(algSource);\n this.#quantumWithAmount = new QuantumWithAmount(alg, amount);\n }\n\n isIdentical(other: Comparable): boolean {\n const otherAsGrouping = other as Grouping;\n return (\n other.is(Grouping) &&\n this.#quantumWithAmount.isIdentical(otherAsGrouping.#quantumWithAmount)\n );\n }\n\n get alg(): Alg {\n return this.#quantumWithAmount.quantum;\n }\n\n get amount(): number {\n return this.#quantumWithAmount.amount;\n }\n\n /** @deprecated */\n get experimentalRepetitionSuffix(): string {\n return this.#quantumWithAmount.suffix();\n }\n\n invert(): Grouping {\n return new Grouping(\n this.#quantumWithAmount.quantum,\n -this.#quantumWithAmount.amount,\n );\n }\n\n *experimentalExpand(\n iterDir: IterationDirection = IterationDirection.Forwards,\n depth?: number,\n ): Generator<LeafUnit> {\n depth ??= Infinity;\n if (depth === 0) {\n yield iterDir === IterationDirection.Forwards ? this : this.invert();\n } else {\n yield* this.#quantumWithAmount.experimentalExpand(iterDir, depth - 1);\n }\n }\n\n static fromString(): Grouping {\n throw new Error(\"unimplemented\");\n }\n\n toString(): string {\n return (\n square1TupleFormatterInstance.format(this) ??\n `(${this.#quantumWithAmount.quantum.toString()})${this.#quantumWithAmount.suffix()}`\n );\n }\n\n experimentalAsSquare1Tuple(): [moveU: Move, moveD: Move] | null {\n return square1TupleFormatterInstance.tuple(this);\n }\n\n // toJSON(): GroupingJSON {\n // return {\n // type: \"grouping\",\n // alg: this.#quanta.quantum.toJSON(),\n // };\n // }\n}\n", "import type { Alg } from \"./Alg\";\nimport {\n Commutator,\n Conjugate,\n Grouping,\n LineComment,\n Move,\n Newline,\n Pause,\n} from \"./units\";\n\nexport function experimentalIs(\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n v: any,\n c:\n | typeof Alg\n | typeof Grouping\n | typeof LineComment\n | typeof Commutator\n | typeof Conjugate\n | typeof Move\n | typeof Newline\n | typeof Pause,\n): boolean {\n return v instanceof c;\n}\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function experimentalIsUnit(v: any): boolean {\n return (\n experimentalIs(v, Grouping) ||\n experimentalIs(v, LineComment) ||\n experimentalIs(v, Commutator) ||\n experimentalIs(v, Conjugate) ||\n experimentalIs(v, Move) ||\n experimentalIs(v, Newline) ||\n experimentalIs(v, Pause)\n );\n}\n", "import type { Alg } from \"./Alg\";\nimport { Grouping } from \"./units/containers/Grouping\";\nimport type { Comparable } from \"./common\";\nimport { Commutator } from \"./units/containers/Commutator\";\nimport { Move, QuantumMove } from \"./units/leaves/Move\";\nimport { Newline } from \"./units/leaves/Newline\";\nimport { Pause } from \"./units/leaves/Pause\";\nimport { Conjugate } from \"./units/containers/Conjugate\";\nimport { LineComment } from \"./units/leaves/LineComment\";\nimport type { Unit } from \"./units/Unit\";\n\nfunction dispatch<DataDown, DataAlgUp, DataUnitUp>(\n t: TraversalDownUp<DataDown, DataAlgUp, DataUnitUp>,\n unit: Unit,\n dataDown: DataDown,\n): DataUnitUp {\n // TODO: Can we turn this back into a `switch` or something more efficiently?\n if (unit.is(Grouping)) {\n return t.traverseGrouping(unit as Grouping, dataDown);\n }\n if (unit.is(Move)) {\n return t.traverseMove(unit as Move, dataDown);\n }\n if (unit.is(Commutator)) {\n return t.traverseCommutator(unit as Commutator, dataDown);\n }\n if (unit.is(Conjugate)) {\n return t.traverseConjugate(unit as Conjugate, dataDown);\n }\n if (unit.is(Pause)) {\n return t.traversePause(unit as Pause, dataDown);\n }\n if (unit.is(Newline)) {\n return t.traverseNewline(unit as Newline, dataDown);\n }\n if (unit.is(LineComment)) {\n return t.traverseLineComment(unit as LineComment, dataDown);\n }\n throw new Error(`unknown unit`);\n}\n\nfunction assertIsUnit(t: Comparable): Unit {\n if (\n t.is(Grouping) ||\n t.is(Move) ||\n t.is(Commutator) ||\n t.is(Conjugate) ||\n t.is(Pause) ||\n t.is(Newline) ||\n t.is(LineComment)\n ) {\n return t as Unit;\n }\n throw \"internal error: expected unit\"; // TODO: Make more helpful, add tests\n}\n\nexport abstract class TraversalDownUp<\n DataDown,\n DataAlgUp,\n DataUnitUp = DataAlgUp,\n> {\n // Immediate subclasses should overwrite this.\n public traverseUnit(unit: Unit, dataDown: DataDown): DataUnitUp {\n return dispatch(this, unit, dataDown);\n }\n\n public traverseIntoUnit(unit: Unit, dataDown: DataDown): Unit {\n return assertIsUnit(this.traverseUnit(unit, dataDown) as any);\n }\n\n public abstract traverseAlg(alg: Alg, dataDown: DataDown): DataAlgUp;\n\n public abstract traverseGrouping(\n grouping: Grouping,\n dataDown: DataDown,\n ): DataUnitUp;\n\n public abstract traverseMove(move: Move, dataDown: DataDown): DataUnitUp;\n\n public abstract traverseCommutator(\n commutator: Commutator,\n dataDown: DataDown,\n ): DataUnitUp;\n\n public abstract traverseConjugate(\n conjugate: Conjugate,\n dataDown: DataDown,\n ): DataUnitUp;\n\n public abstract traversePause(pause: Pause, dataDown: DataDown): DataUnitUp;\n public abstract traverseNewline(\n newline: Newline,\n dataDown: DataDown,\n ): DataUnitUp;\n\n public abstract traverseLineComment(\n comment: LineComment,\n dataDown: DataDown,\n ): DataUnitUp;\n}\n\nexport abstract class TraversalUp<\n DataAlgUp,\n DataUnitUp = DataAlgUp,\n> extends TraversalDownUp<undefined, DataAlgUp, DataUnitUp> {\n public traverseUnit(unit: Unit): DataUnitUp {\n return dispatch<unknown, DataAlgUp, DataUnitUp>(this, unit, undefined);\n }\n\n public traverseIntoUnit(unit: Unit): Unit {\n return assertIsUnit(this.traverseUnit(unit) as any);\n }\n\n public abstract traverseAlg(alg: Alg): DataAlgUp;\n public abstract traverseGrouping(grouping: Grouping): DataUnitUp;\n public abstract traverseMove(move: Move): DataUnitUp;\n public abstract traverseCommutator(commutator: Commutator): DataUnitUp;\n public abstract traverseConjugate(conjugate: Conjugate): DataUnitUp;\n public abstract traversePause(pause: Pause): DataUnitUp;\n public abstract traverseNewline(newline: Newline): DataUnitUp;\n public abstract traverseLineComment(comment: LineComment): DataUnitUp;\n}\n\nexport interface SimplifyOptions {\n collapseMoves?: boolean;\n quantumMoveOrder?: (quantumMove: QuantumMove) => number;\n depth?: number | null; // TODO: test\n}\n\n// TODO: Test that inverses are bijections.\nclass Simplify extends TraversalDownUp<SimplifyOptions, Generator<Unit>> {\n static #newAmount(\n move: Move,\n deltaAmount: number,\n options: SimplifyOptions,\n ): number {\n let newAmount = move.amount + deltaAmount;\n if (options?.quantumMoveOrder) {\n const order = options.quantumMoveOrder(move.quantum);\n // Examples:\n // \u2022 order 4 \u2192 min -1 (e.g. cube)\n // \u2022 order 5 \u2192 min -2 (e.g. Megaminx)\n // \u2022 order 3 \u2192 min -1 (e.g. Pyraminx)\n const min = Math.floor(order / 2) + 1 - order;\n newAmount = (((newAmount % order) + order - min) % order) + min; // TODO\n }\n return newAmount;\n }\n\n // TODO: Handle\n public *traverseAlg(alg: Alg, options: SimplifyOptions): Generator<Unit> {\n if (options.depth === 0) {\n yield* alg.units();\n return;\n }\n\n const newUnits: Unit[] = [];\n let lastUnit: Unit | null = null;\n const collapseMoves = options?.collapseMoves ?? true;\n function appendMoveWithNewAmount(move: Move, deltaAmount: number): boolean {\n const newAmount = Simplify.#newAmount(move, deltaAmount, options);\n if (newAmount === 0) {\n return false;\n }\n const newMove = new Move(move.quantum, newAmount);\n newUnits.push(newMove);\n lastUnit = newMove;\n return true;\n }\n function appendCollapsed(newUnit: Unit) {\n if (\n collapseMoves &&\n lastUnit?.is(Move) &&\n newUnit.is(Move) &&\n (lastUnit as Move).quantum.isIdentical((newUnit as Move).quantum)\n ) {\n newUnits.pop();\n if (\n !appendMoveWithNewAmount(lastUnit as Move, (newUnit as Move).amount)\n ) {\n lastUnit = newUnits.slice(-1)[0];\n }\n } else {\n if (newUnit.is(Move)) {\n appendMoveWithNewAmount(newUnit as Move, 0);\n } else {\n newUnits.push(newUnit);\n lastUnit = newUnit;\n }\n }\n }\n\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null,\n }; // TODO: avoid allocations?\n for (const unit of alg.units()) {\n for (const ancestorUnit of this.traverseUnit(unit, newOptions)) {\n appendCollapsed(ancestorUnit);\n }\n }\n for (const unit of newUnits) {\n yield unit;\n }\n }\n\n public *traverseGrouping(\n grouping: Grouping,\n options: SimplifyOptions,\n ): Generator<Unit> {\n if (options.depth === 0) {\n yield grouping;\n return;\n }\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null,\n }; // TODO: avoid allocations?\n yield new Grouping(this.traverseAlg(grouping.alg, newOptions));\n }\n\n public *traverseMove(move: Move, _options: SimplifyOptions): Generator<Unit> {\n yield move;\n }\n\n public *traverseCommutator(\n commutator: Commutator,\n options: SimplifyOptions,\n ): Generator<Unit> {\n if (options.depth === 0) {\n yield commutator;\n return;\n }\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null,\n }; // TODO: avoid allocations?\n yield new Commutator(\n this.traverseAlg(commutator.A, newOptions),\n this.traverseAlg(commutator.B, newOptions),\n );\n }\n\n public *traverseConjugate(\n conjugate: Conjugate,\n options: SimplifyOptions,\n ): Generator<Unit> {\n if (options.depth === 0) {\n yield conjugate;\n return;\n }\n const newOptions = {\n depth: options.depth ? options.depth - 1 : null,\n }; // TODO: avoid allocations?\n yield new Conjugate(\n this.traverseAlg(conjugate.A, newOptions),\n this.traverseAlg(conjugate.B, newOptions),\n );\n }\n\n public *traversePause(\n pause: Pause,\n _options: SimplifyOptions,\n ): Generator<Unit> {\n yield pause;\n }\n\n public *traverseNewline(\n newline: Newline,\n _options: SimplifyOptions,\n ): Generator<Unit> {\n yield newline;\n }\n\n public *traverseLineComment(\n comment: LineComment,\n _options: SimplifyOptions,\n ): Generator<Unit> {\n yield comment;\n }\n}\n\nconst simplifyInstance = new Simplify();\nexport const simplify = simplifyInstance.traverseAlg.bind(simplifyInstance) as (\n alg: Alg,\n options: SimplifyOptions,\n) => Generator<Unit>;\n", "import { AlgCommon, Comparable } from \"./common\";\nimport { experimentalIs, experimentalIsUnit } from \"./is\";\nimport { direct, IterationDirection, reverse } from \"./iteration\";\nimport { parseAlg } from \"./parse\";\nimport { simplify, SimplifyOptions } from \"./traversal\";\nimport { LineComment } from \"./units/leaves/LineComment\";\nimport { Move } from \"./units/leaves/Move\";\nimport { Newline } from \"./units/leaves/Newline\";\nimport type { LeafUnit, Unit } from \"./units/Unit\";\nimport { warnOnce } from \"./warnOnce\";\n\nexport type FlexibleAlgSource = string | Iterable<Unit> | Alg;\n\n// TODO: validate\nfunction toIterable(input?: FlexibleAlgSource): Iterable<Unit> {\n if (!input) {\n return [];\n }\n\n if (experimentalIs(input, Alg)) {\n return (input as Alg).units();\n }\n\n if (typeof input === \"string\") {\n return parseAlg(input).units(); // TODO: something more direct?\n }\n\n // const seq = inputUnits as Sequence;\n // if (seq.type === \"sequence\" && seq.nestedUnits) {\n // throw new Error(\"unimplemented\");\n // // return seq.nestedUnits;\n // }\n\n const iter = input as Iterable<Unit>;\n if (typeof iter[Symbol.iterator] === \"function\") {\n return iter; // TODO: avoid allocations\n }\n\n throw \"Invalid unit\";\n}\n\n// Preserves the alg if it's already an `Alg`.\nexport function experimentalEnsureAlg(alg: FlexibleAlgSource): Alg {\n if (experimentalIs(alg, Alg)) {\n return alg as Alg;\n }\n return new Alg(alg);\n}\n\n/**\n * Alg is a class that encapsulated a structured alg. To create an alg from a string, use:\n *\n * new Alg(\"R U R'\"); // Convenient\n * Alg.fromString(dynamicString); // Recommended when handling dynamic input.\n *\n * Once you have an Alg, you can call methods to transform it:\n *\n * new Alg(\"[[R: U], R U R2']\").expand().simplify().invert();\n *\n * To convert an Alg to a string, use .toString():\n *\n * new Alg(\"R U F\").invert().toString();\n *\n * If you need to debug, you may also find it convenient to use .log():\n *\n * if (alg.isIdentical(alg.invert())) {\n * alg.log(\"A self-inverse!\")\n * }\n *\n * For more information, see: {@link https://js.cubing.net/cubing/alg/}\n *\n */\nexport class Alg extends AlgCommon<Alg> {\n // #debugString: string;\n #units: Iterable<Unit>; // TODO: freeze?\n constructor(alg?: FlexibleAlgSource) {\n super();\n this.#units = Array.from(toIterable(alg)); // TODO: can we avoid array-casting?\n // this.#debugString = this.toString();\n\n for (const unit of this.#units) {\n if (!experimentalIsUnit(unit)) {\n throw new Error(\"An alg can only contain units.\");\n }\n }\n }\n\n /**\n * Checks whether this Alg is structurally identical to another Alg. This\n * essentially means that they are written identically apart from whitespace.\n *\n * const alg1 = new Alg(\"R U L'\");\n * const alg2 = new Alg(\"L U' R'\").invert();\n * // true\n * alg1.isIdentical(alg2);\n *\n * // false\n * new Alg(\"[R, U]\").isIdentical(new Alg(\"R U R' U'\"));\n * // true\n * new Alg(\"[R, U]\").expand().isIdentical(new Alg(\"R U R' U'\"));\n *\n * Note that .isIdentical() efficiently compares algorithms, but mainly exists\n * to help optimize code when the structure of an algorithm hasn't changed.\n * There are many ways to write the \"same\" alg on most puzzles, but is\n * *highly* recommended to avoid expanding two Alg instances to compare them,\n * since that can easily slow your program to a crawl if someone inputs an alg\n * containing a large repetition. In general, you should use `cubing/kpuzzle`\n * to compare if two algs have the same effect on a puzzle.\n *\n * Also note that parser annotations are not take into account while comparing\n * algs:\n *\n * const alg = new Alg([new Move(\"R\"), new Move(\"U2\")]);\n * // true, even though one of the algs has parser annotations\n * alg.isIdentical(new Alg(\"R U2\"))\n *\n */\n isIdentical(other: Comparable): boolean {\n const otherAsAlg = other as Alg;\n if (!other.is(Alg)) {\n return false;\n }\n\n // TODO: avoid converting to array\n const l1 = Array.from(this.#units);\n const l2 = Array.from(otherAsAlg.#units);\n if (l1.length !== l2.length) {\n return false;\n }\n for (let i = 0; i < l1.length; i++) {\n if (!l1[i].isIdentical(l2[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Returns the inverse of the given alg.\n *\n * Note that that this does not make any assumptions about what puzzle the alg\n * is for. For example, U2 is its own inverse on a cube, but U2' has the same\n * effect U3 (and not U2) on Megaminx:\n *\n * // Outputs: R U2' L'\n * new Alg(\"L U2 R'\").invert().log();\n */\n invert(): Alg {\n // TODO: Handle newLines and comments correctly\n // TODO: Make more efficient.\n return new Alg(reverse(Array.from(this.#units).map((u) => u.invert())));\n }\n\n /** @deprecated Use {@link Alg.expand} instead. */\n *experimentalExpand(\n iterDir: IterationDirection = IterationDirection.Forwards,\n depth?: number,\n ): Generator<LeafUnit> {\n depth ??= Infinity;\n for (const unit of direct(this.#units, iterDir)) {\n yield* unit.experimentalExpand(iterDir, depth);\n }\n }\n\n /**\n * Expands all Grouping, Commutator, and Conjugate parts nested inside the\n * alg.\n *\n * // F R U R' U' F'\n * new Alg(\"[F: [R, U]]\").expand().log();\n *\n * // F [R, U] F'\n * new Alg(\"[F: [R, U]]\").expand(({ depth: 1 }).log();\n *\n * Avoid calling this on a user-provided alg unless the user explicitly asks\n * to see the expanded alg. Otherwise, it's easy to make your program freeze\n * when someone passes in an alg like: (R U)10000000\n *\n * Generally, if you want to perform an operation on an entire alg, you'll\n * want to use something based on the `Traversal` mechanism, like countMoves()\n * from `cubing/notation`.\n */\n expand(options?: { depth?: number }): Alg {\n return new Alg(\n this.experimentalExpand(\n IterationDirection.Forwards,\n options?.depth ?? Infinity,\n ),\n );\n }\n\n /** @deprecated */\n *experimentalLeafMoves(): Generator<Move> {\n for (const leaf of this.experimentalExpand()) {\n if (leaf.is(Move)) {\n yield leaf as Move;\n }\n }\n }\n\n concat(input: FlexibleAlgSource): Alg {\n return new Alg(\n Array.from(this.#units).concat(Array.from(toIterable(input))),\n );\n }\n\n /** @deprecated */\n experimentalIsEmpty(): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const _ of this.#units) {\n return false;\n }\n return true;\n }\n\n static fromString(s: string): Alg {\n return parseAlg(s);\n }\n\n *units(): Generator<Unit> {\n for (const unit of this.#units) {\n yield unit;\n }\n }\n\n experimentalNumUnits(): number {\n return Array.from(this.#units).length;\n }\n\n /** @deprecated */\n get type(): string {\n warnOnce(\"deprecated: type\");\n return \"sequence\";\n }\n\n // toJSON(): AlgJSON {\n // return {\n // type: \"alg\",\n // units: Array.from(this.#units) as UnitJSON[],\n // };\n // }\n\n /**\n * Converts the Alg to a string:\n *\n * const alg = new Alg([new Move(\"R\"), new Move(\"U2\"), new Move(\"L\")])\n * // R U2 L\n * console.log(alg.toString())\n */\n toString(): string {\n let output = \"\";\n let previousUnit: Unit | null = null;\n for (const unit of this.#units) {\n if (previousUnit) {\n output += spaceBetween(previousUnit, unit);\n // console.log(\"l\", previousUnit.toString(), unit.toString(), output);\n }\n output += unit.toString();\n previousUnit = unit;\n }\n return output;\n }\n\n // *experimentalExpand(options: ExperimentalExpandOptions): Generator<Unit> {\n // // if (options.depth === 0) {\n // // yield* this.units();\n // // return;\n // // }\n // // const newOptions = {\n // // depth: options.depth ? options.depth - 1 : null,\n // // }; // TODO: avoid allocations?\n // // for (const unit of this.#units) {\n // // yield* unit.experimentalExpandIntoAlg(newOptions);\n // // }\n // }\n\n simplify(options?: SimplifyOptions): Alg {\n return new Alg(simplify(this, options ?? {}));\n }\n}\n\nfunction spaceBetween(u1: Unit, u2: Unit): string {\n if (u1.is(Newline) || u2.is(Newline)) {\n return \"\";\n }\n if (u1.is(LineComment) && !u2.is(Newline)) {\n return \"\\n\"; /// TODO\n }\n return \" \";\n}\n", "// tslint:disable-next-line no-namespace // TODO: nested module\n\nimport { Alg } from \"./Alg\";\nimport { Grouping } from \"./units\";\nimport { Commutator } from \"./units/containers/Commutator\";\nimport { Conjugate } from \"./units/containers/Conjugate\";\nimport { Move } from \"./units/leaves/Move\";\nimport { Pause } from \"./units/leaves/Pause\";\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport const Example = {\n Sune: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"U\", 1),\n new Move(\"R\", 1),\n new Move(\"U\", -2),\n new Move(\"R\", -1),\n ]),\n\n AntiSune: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", 2),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"R\", 1),\n new Move(\"U\", -1),\n new Move(\"R\", -1),\n ]),\n\n SuneCommutator: new Alg([\n new Commutator(\n new Alg([new Move(\"R\", 1), new Move(\"U\", 1), new Move(\"R\", -2)]),\n new Alg([\n new Conjugate(new Alg([new Move(\"R\", 1)]), new Alg([new Move(\"U\", 1)])),\n ]),\n ),\n ]),\n\n Niklas: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", -1),\n new Move(\"L\", -1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"L\", 1),\n new Move(\"U\", 1),\n ]),\n\n EPerm: new Alg([\n new Move(\"x\", -1),\n new Commutator(\n new Alg([\n new Conjugate(\n new Alg([new Move(\"R\", 1)]),\n new Alg([new Move(\"U\", -1)]),\n ),\n ]),\n new Alg([new Move(\"D\", 1)]),\n ),\n new Commutator(\n new Alg([\n new Conjugate(new Alg([new Move(\"R\", 1)]), new Alg([new Move(\"U\", 1)])),\n ]),\n new Alg([new Move(\"D\", 1)]),\n ),\n new Move(\"x\", 1),\n ]),\n\n FURURFCompact: new Alg([\n new Conjugate(\n new Alg([new Move(\"F\", 1)]),\n new Alg([\n new Commutator(\n new Alg([new Move(\"U\", 1)]),\n new Alg([new Move(\"R\", 1)]),\n ),\n ]),\n ),\n ]),\n\n APermCompact: new Alg([\n new Conjugate(\n new Alg([new Move(\"R\", 2)]),\n new Alg([\n new Commutator(\n new Alg([new Move(\"F\", 2)]),\n new Alg([new Move(\"R\", -1), new Move(\"B\", -1), new Move(\"R\", 1)]),\n ),\n ]),\n ),\n ]),\n\n FURURFMoves: new Alg([\n new Move(\"F\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", 1),\n new Move(\"U\", -1),\n new Move(\"R\", -1),\n new Move(\"F\", -1),\n ]),\n\n TPerm: new Alg([\n new Move(\"R\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"R\", -1),\n new Move(\"F\", 1),\n new Move(\"R\", 2),\n new Move(\"U\", -1),\n new Move(\"R\", -1),\n new Move(\"U\", -1),\n new Move(\"R\", 1),\n new Move(\"U\", 1),\n new Move(\"R\", -1),\n new Move(\"F\", -1),\n ]),\n\n HeadlightSwaps: new Alg([\n new Conjugate(\n new Alg([new Move(\"F\", 1)]),\n new Alg([\n new Grouping(\n new Alg([\n new Commutator(\n new Alg([new Move(\"R\", 1)]),\n new Alg([new Move(\"U\", 1)]),\n ),\n ]),\n 3,\n ),\n ]),\n ),\n ]),\n\n TriplePause: new Alg([new Pause(), new Pause(), new Pause()]),\n\n // AllAlgParts: [\n // new Alg([new Move(\"R\", 1), new Move(\"U\", -1)]),\n // new Grouping(new Alg([new Move(\"F\", 1)]), 2),\n // // new Rotation(\"y\", -1),\n // new Move(\"R\", 2),\n // new Commutator(new Alg([new Move(\"R\", 2)]), new Alg([new Move(\"U\", 2)]), 2),\n // new Conjugate(new Alg([new Move(\"L\", 2)]), new Alg([new Move(\"D\", -1)]), 2),\n // new Pause(),\n // new Newline(),\n // new LineComment(\"line comment\"),\n // ],\n};\n", "import { Move } from \"./units/leaves/Move\";\n\nconst cubeKeyMapping: { [key: number]: Move } = {\n 73: new Move(\"R\"),\n 75: new Move(\"R'\"),\n 87: new Move(\"B\"),\n 79: new Move(\"B'\"),\n 83: new Move(\"D\"),\n 76: new Move(\"D'\"),\n 68: new Move(\"L\"),\n 69: new Move(\"L'\"),\n 74: new Move(\"U\"),\n 70: new Move(\"U'\"),\n 72: new Move(\"F\"),\n 71: new Move(\"F'\"),\n\n 78: new Move(\"x'\"),\n 67: new Move(\"l\"),\n 82: new Move(\"l'\"),\n 85: new Move(\"r\"),\n 77: new Move(\"r'\"),\n\n 88: new Move(\"d\"),\n 188: new Move(\"d'\"),\n\n 84: new Move(\"x\"),\n 89: new Move(\"x\"),\n 66: new Move(\"x'\"),\n 186: new Move(\"y\"),\n 59: new Move(\"y\"),\n 65: new Move(\"y'\"), // 186 is WebKit, 59 is Mozilla; see http://unixpapa.com/js/key.html\n 80: new Move(\"z\"),\n 81: new Move(\"z'\"),\n\n 90: new Move(\"M'\"),\n 190: new Move(\"M'\"),\n};\n\n// TODO: options about whether to ignore modifier keys (e.g. alt, ctrl).\n// TODO: Support different mappings.\n// TODO: Return BaseMove instead?\nexport function keyToMove(e: KeyboardEvent): Move | null {\n if (e.altKey || e.ctrlKey) {\n return null;\n }\n\n return cubeKeyMapping[e.keyCode] || null;\n}\n", "import type { Alg } from \"./Alg\";\n\n// This is not the most sophisticated scheme, but it has been used in production\n// at alg.cubing.net for years.\nfunction serializeURLParam(a: Alg): string {\n let escaped = a.toString();\n escaped = escaped.replace(/_/g, \"&#95;\").replace(/ /g, \"_\");\n escaped = escaped.replace(/\\+/g, \"&#2b;\");\n escaped = escaped.replace(/-/g, \"&#45;\").replace(/'/g, \"-\");\n return escaped;\n}\n\nexport interface AlgCubingNetOptions {\n alg?: Alg;\n setup?: Alg;\n title?: string;\n puzzle?:\n | \"1x1x1\"\n | \"2x2x2\"\n | \"3x3x3\"\n | \"4x4x4\"\n | \"5x5x5\"\n | \"6x6x6\"\n | \"7x7x7\"\n | \"8x8x8\"\n | \"9x9x9\"\n | \"10x10x10\"\n | \"11x11x11\"\n | \"12x12x12\"\n | \"13x13x13\"\n | \"14x14x14\"\n | \"16x16x16\"\n | \"17x17x17\";\n stage?:\n | \"full\"\n | \"cross\"\n | \"F2L\"\n | \"LL\"\n | \"OLL\"\n | \"PLL\"\n | \"CLS\"\n | \"ELS\"\n | \"L6E\"\n | \"CMLL\"\n | \"WV\"\n | \"ZBLL\"\n | \"void\";\n view?: \"editor\" | \"playback\" | \"fullscreen\";\n type?: \"moves\" | \"reconstruction\" | \"alg\" | \"reconstruction-end-with-setup\";\n}\n\n// TODO: runtime validation?\nexport function algCubingNetLink(options: AlgCubingNetOptions): string {\n const url = new URL(\"https://alg.cubing.net\");\n if (!options.alg) {\n throw new Error(\"An alg parameter is required.\");\n }\n url.searchParams.set(\"alg\", serializeURLParam(options.alg));\n\n if (options.setup) {\n url.searchParams.set(\"setup\", serializeURLParam(options.setup));\n }\n if (options.title) {\n url.searchParams.set(\"title\", options.title);\n }\n if (options.puzzle) {\n if (\n ![\n \"1x1x1\",\n \"2x2x2\",\n \"3x3x3\",\n \"4x4x4\",\n \"5x5x5\",\n \"6x6x6\",\n \"7x7x7\",\n \"8x8x8\",\n \"9x9x9\",\n \"10x10x10\",\n \"11x11x11\",\n \"12x12x12\",\n \"13x13x13\",\n \"14x14x14\",\n \"16x16x16\",\n \"17x17x17\",\n ].includes(options.puzzle)\n ) {\n throw new Error(`Invalid puzzle parameter: ${options.puzzle}`);\n }\n url.searchParams.set(\"puzzle\", options.puzzle);\n }\n if (options.stage) {\n if (\n ![\n \"full\",\n \"cross\",\n \"F2L\",\n \"LL\",\n \"OLL\",\n \"PLL\",\n \"CLS\",\n \"ELS\",\n \"L6E\",\n \"CMLL\",\n \"WV\",\n \"ZBLL\",\n \"void\",\n ].includes(options.stage)\n ) {\n throw new Error(`Invalid stage parameter: ${options.stage}`);\n }\n url.searchParams.set(\"stage\", options.stage);\n }\n if (options.view) {\n if (![\"editor\", \"playback\", \"fullscreen\"].includes(options.view)) {\n throw new Error(`Invalid view parameter: ${options.view}`);\n }\n url.searchParams.set(\"view\", options.view);\n }\n if (options.type) {\n if (\n ![\n \"moves\",\n \"reconstruction\",\n \"alg\",\n \"reconstruction-end-with-setup\",\n ].includes(options.type)\n ) {\n throw new Error(`Invalid type parameter: ${options.type}`);\n }\n url.searchParams.set(\"type\", options.type);\n }\n return url.toString();\n}\n", "import { Alg } from \"./Alg\";\nimport type { Move } from \"./units/leaves/Move\";\n\nexport function experimentalAppendMove(\n alg: Alg,\n newMove: Move,\n options?: {\n coalesce?: boolean; // defaults to false\n mod?: number;\n },\n): Alg {\n const oldUnits = Array.from(alg.units());\n const oldLastMove = oldUnits[oldUnits.length - 1] as Move | undefined;\n if (\n options?.coalesce &&\n oldLastMove &&\n oldLastMove.quantum &&\n oldLastMove.quantum.isIdentical(newMove.quantum)\n ) {\n const newUnits = oldUnits.slice(0, oldUnits.length - 1);\n let newAmount = oldLastMove.amount + newMove.amount;\n const mod = options?.mod;\n if (mod) {\n newAmount = ((newAmount % mod) + mod) % mod;\n if (newAmount * 2 > mod) {\n newAmount -= mod;\n }\n }\n if (newAmount !== 0) {\n newUnits.push(oldLastMove.modified({ amount: newAmount }));\n }\n return new Alg(newUnits);\n } else {\n return new Alg([...oldUnits, newMove]);\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;AAIA,IAAI,qBAAqB;AAKlB,uBAA0B;AAAA,EAE/B,GAAG,GAAiB;AAClB,WAAO,gBAAgB;AAAA;AAAA,EAGzB,GAAM,GAAsC;AAC1C,WAAO,gBAAgB,IAAI,OAAO;AAAA;AAAA;AAc/B,8BACG,WAEV;AAAA,EACE,cAAc;AACZ;AACA,QAAI,oBAAoB;AACtB,aAAO,eAAe,MAAM,aAAa;AAAA,QACvC,KAAK,MAAM;AACT,iBAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,MAA+B;AAGjC,WAAO,QAAQ,IAAI,KAAK,SAAS,MAAM,KAAK;AAAA;AAAA;;;AChDzC,IAAK;AAAL,UAAK,qBAAL;AACL,wDAAW,KAAX;AACA,yDAAY,MAAZ;AAAA,GAFU;AAKL,yBACL,oBACA,OAAgB,MACI;AACpB,MAAI,CAAC,MAAM;AACT,WAAO;AAAA;AAET,UAAQ;AAAA,SACD;AACH,aAAO;AAAA,SACJ;AACH,aAAO;AAAA;AAAA;AAIN,gBACL,GACA,SACa;AACb,SAAO,YAAY,KAA+B,MAAM,KAAK,GAAG,YAAY;AAAA;AAGvE,iBAAoB,GAA6B;AACtD,SAAO,MAAM,KAAK,GAAG;AAAA;AAGhB,4BACL,GACA,WACc;AACd,gBAAc,KACV,OAAO,iBAAiB,KACxB,OAAO;AAAA;AAGN,2BAA8B,GAA+B;AAClE,aAAW,KAAK,MAAM,KAAK,GAAG,WAAW;AACvC,UAAM;AAAA;AAAA;;;AC1CH,IAAM,UAAU;AAChB,IAAM,sBAAsB;AAC5B,IAAM,UAAU;;;ACFvB;AAGO,uBAAiB;AAAA,EAAjB,cAHP;AAIE,+BAAiB;AAAA;AAAA,EAEjB,KAAK,GAAe;AAClB,uBAAK,QAAO,KAAK;AAAA;AAAA,EAKnB,oBAAoB,KAAgB;AAElC,eAAW,KAAK,IAAI,SAAS;AAC3B,WAAK,KAAK;AAAA;AAAA;AAAA,EAKd,uBAA+B;AAC7B,WAAO,mBAAK,QAAO;AAAA;AAAA,EAIrB,QAAa;AACX,WAAO,IAAI,IAAI,mBAAK;AAAA;AAAA,EAGtB,QAAc;AACZ,uBAAK,QAAS;AAAA;AAAA;AA1BhB;;;ACJF;AAKO,gCAAyB,UAAsB;AAAA,EAIpD,YAAY,SAA4B,SAA4B;AAClE;AAJO;AACA;AAIP,uBAAK,IAAK,sBAAsB;AAChC,uBAAK,IAAK,sBAAsB;AAAA;AAAA,MAG9B,IAAS;AACX,WAAO,mBAAK;AAAA;AAAA,MAGV,IAAS;AACX,WAAO,mBAAK;AAAA;AAAA,EAGd,YAAY,OAA4B;AACtC,UAAM,oBAAoB,MAAM,GAAG;AACnC,WAAO,CAAC,CACN,oBAAmB,EAAE,YAAY,KAAK,MACtC,mBAAmB,EAAE,YAAY,KAAK;AAAA;AAAA,EAI1C,SAAqB;AACnB,WAAO,IAAI,YAAW,mBAAK,KAAI,mBAAK;AAAA;AAAA,GAGrC,mBACC,UAA8B,mBAAmB,UACjD,OACqB;AACrB,sBAAU;AACV,QAAI,UAAU,GAAG;AACf,YAAM,YAAY,mBAAmB,WAAW,OAAO,KAAK;AAAA,WACvD;AACL,UAAI,YAAY,mBAAmB,UAAU;AAC3C,eAAO,KAAK,EAAE,mBACZ,mBAAmB,UACnB,QAAQ;AAEV,eAAO,KAAK,EAAE,mBACZ,mBAAmB,UACnB,QAAQ;AAEV,eAAO,KAAK,EAAE,mBACZ,mBAAmB,WACnB,QAAQ;AAEV,eAAO,KAAK,EAAE,mBACZ,mBAAmB,WACnB,QAAQ;AAAA,aAEL;AACL,eAAO,KAAK,EAAE,mBACZ,mBAAmB,UACnB,QAAQ;AAEV,eAAO,KAAK,EAAE,mBACZ,mBAAmB,UACnB,QAAQ;AAEV,eAAO,KAAK,EAAE,mBACZ,mBAAmB,WACnB,QAAQ;AAEV,eAAO,KAAK,EAAE,mBACZ,mBAAmB,WACnB,QAAQ;AAAA;AAAA;AAAA;AAAA,EAMhB,WAAmB;AACjB,WAAO,IAAI,mBAAK,IAAG,eAAe,mBAAK,IAAG;AAAA;AAAA;AA7EvC;AACI;AACA;;;ACPX;AAKO,+BAAwB,UAAqB;AAAA,EAIlD,YAAY,SAA4B,SAA4B;AAClE;AAJO;AACA;AAIP,uBAAK,KAAK,sBAAsB;AAChC,uBAAK,KAAK,sBAAsB;AAAA;AAAA,MAG9B,IAAS;AACX,WAAO,mBAAK;AAAA;AAAA,MAGV,IAAS;AACX,WAAO,mBAAK;AAAA;AAAA,EAGd,YAAY,OAA4B;AACtC,UAAM,mBAAmB,MAAM,GAAG;AAClC,WAAO,CAAC,CACN,mBAAkB,EAAE,YAAY,KAAK,MACrC,kBAAkB,EAAE,YAAY,KAAK;AAAA;AAAA,EAIzC,SAAoB;AAClB,WAAO,IAAI,WAAU,mBAAK,MAAI,mBAAK,KAAG;AAAA;AAAA,GAGvC,mBACC,SACA,OACqB;AACrB,sBAAU;AACV,QAAI,UAAU,GAAG;AACf,YAAM,YAAY,mBAAmB,WAAW,OAAO,KAAK;AAAA,WACvD;AACL,aAAO,KAAK,EAAE,mBAAmB,mBAAmB,UAAU,QAAQ;AACtE,aAAO,KAAK,EAAE,mBAAmB,SAAS,QAAQ;AAClD,aAAO,KAAK,EAAE,mBAAmB,mBAAmB,WAAW,QAAQ;AAAA;AAAA;AAAA,EAI3E,WAAmB;AACjB,WAAO,IAAI,KAAK,MAAM,KAAK;AAAA;AAAA;AA7CxB;AACI;AACA;;;ACPX;AAMO,iCAA0B,UAAuB;AAAA,EAGtD,YAAY,aAAqB;AAC/B;AAHO;AAIP,QAAI,YAAY,SAAS,SAAS,YAAY,SAAS,OAAO;AAC5D,YAAM,IAAI,MAAM;AAAA;AAElB,uBAAK,OAAQ;AAAA;AAAA,MAGX,OAAe;AACjB,WAAO,mBAAK;AAAA;AAAA,EAGd,YAAY,OAA4B;AACtC,UAAM,qBAAqB;AAC3B,WAAO,MAAM,GAAG,iBAAgB,mBAAK,WAAU,iCAAmB;AAAA;AAAA,EAGpE,SAAsB;AACpB,WAAO;AAAA;AAAA,GAGR,mBACC,WAA+B,mBAAmB,UAClD,SAAiB,UACI;AACrB,UAAM;AAAA;AAAA,EAGR,WAAmB;AACjB,WAAO,KAAK,mBAAK;AAAA;AAAA;AAhCd;AACI;;;ACHJ,4BAAsB,UAAmB;AAAA,EAC9C,WAAmB;AACjB,WAAO;AAAA;AAAA;AAAA,EAGT,YAAY,OAA4B;AACtC,WAAO,MAAM,GAAG;AAAA;AAAA,EAGlB,SAAkB;AAChB,WAAO;AAAA;AAAA,GAGR,mBACC,WAA+B,mBAAmB,UAClD,SAAiB,UACI;AACrB,UAAM;AAAA;AAAA;;;ACjBH,0BAAoB,UAAiB;AAAA,EAC1C,WAAmB;AACjB,WAAO;AAAA;AAAA,EAGT,YAAY,OAA4B;AACtC,WAAO,MAAM,GAAG;AAAA;AAAA,EAGlB,SAAgB;AACd,WAAO;AAAA;AAAA,GAGR,mBACC,WAA+B,mBAAmB,UAClD,SAAiB,UACI;AACrB,UAAM;AAAA;AAAA;;;ACRV,mCAAsC,GAAW,eAA8B;AAC7E,SAAO,IAAI,SAAS,KAAK;AAAA;AAG3B,IAAM,cAAc;AACpB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AAEhB,kBAAkB,GAAgB;AACvC,SAAO,IAAI,YAAY,SAAS;AAAA;AAG3B,mBAAmB,GAAiB;AACzC,SAAO,IAAI,YAAY,UAAU;AAAA;AAG5B,0BAA0B,GAAwB;AACvD,SAAO,IAAI,YAAY,iBAAiB;AAAA;AAW1C,wBACE,GACA,gBACA,cACW;AACX,QAAM,UAAU;AAChB,UAAQ,iBAAiB;AACzB,UAAQ,eAAe;AACvB,SAAO;AAAA;AAGF,2BAAiD,MAAS,IAAU;AACzE,MAAI,oBAAoB,MAAM;AAC5B,IAAC,GAAiB,iBAAkB,KAAmB;AAAA;AAEzD,MAAI,kBAAkB,MAAM;AAC1B,IAAC,GAAiB,eAAgB,KAAmB;AAAA;AAEvD,SAAO;AAAA;AA9DT;AAoEA,sBAAgB;AAAA,EAAhB,cApEA;AAqEE,+BAAiB;AACjB,6BAAe;AAAA;AAAA,EAEf,SAAS,OAA4B;AACnC,uBAAK,QAAS;AACd,uBAAK,MAAO;AACZ,UAAM,MAAM,KAAK,qBAAqB;AACtC,SAAK;AACL,WAAO;AAAA;AAAA,EAGT,UAAU,OAA6B;AACrC,uBAAK,QAAS;AACd,uBAAK,MAAO;AACZ,UAAM,OAAO,KAAK;AAClB,SAAK;AACL,WAAO;AAAA;AAAA,EAGT,iBAAiB,OAA4B;AAC3C,uBAAK,QAAS;AACd,uBAAK,MAAO;AACZ,UAAM,cAAc,KAAK;AACzB,SAAK;AACL,WAAO;AAAA;AAAA,EAGD,qBAAqB;AAC3B,QAAI,mBAAK,UAAS,mBAAK,QAAO,QAAQ;AACpC,YAAM,IAAI,MAAM;AAAA;AAAA;AAAA,EAIZ,qBAAqB,YAAyC;AACpE,QAAI,cAAc,mBAAK;AACvB,QAAI,YAAY,mBAAK;AACrB,UAAM,aAAa,IAAI;AAGvB,QAAI,UAAU;AAEd,UAAM,mBAAmB,CAAC,QAAsB;AAC9C,UAAI,SAAS;AACX,cAAM,IAAI,MACR,iCAAiC;AAAA;AAAA;AAKvC;AAAU,aAAO,mBAAK,QAAO,mBAAK,QAAO,QAAQ;AAC/C,cAAM,iBAAiB,mBAAK;AAC5B,YAAK,WAAwB,SAAS,mBAAK,QAAO,mBAAK,SAAQ;AAC7D,iBAAO,eAAe,WAAW,SAAS,aAAa;AAAA;AAEzD,YAAI,KAAK,eAAe,MAAM;AAC5B,oBAAU;AACV,cAAI,WAAW,2BAA2B,GAAG;AAC3C,0BAAc,mBAAK;AAAA;AAErB;AAAA,mBACS,eAAe,KAAK,mBAAK,QAAO,mBAAK,SAAQ;AACtD,2BAAiB;AACjB,gBAAM,OAAO,KAAK;AAClB,qBAAW,KAAK;AAChB,oBAAU;AACV,sBAAY,mBAAK;AACjB;AAAA,mBACS,KAAK,eAAe,MAAM;AACnC,2BAAiB;AACjB,gBAAM,oBAAoB,KAAK,SAAS;AACxC,cAAI,mBAAmB;AACrB,kBAAM,kBAAkB,kBAAkB;AAC1C,kBAAM,kBAAkB,mBAAK;AAC7B,kBAAM,kBAAkB,KAAK,WAAW;AACxC,kBAAM,QAAQ,eACZ,IAAI,KAAK,IAAI,YAAY,UAAU,SAAS,mBAC5C,iBAAiB,GACjB,iBAAiB,IAAI,gBAAgB;AAEvC,kBAAM,QAAQ,eACZ,IAAI,KAAK,IAAI,YAAY,UAAU,SAAS,gBAAgB,MAC5D,iBACA,mBAAK,QAAO;AAEd,kBAAM,MAAM,eACV,IAAI,IAAI,CAAC,OAAO,SAChB,iBAAiB,GACjB,mBAAK,QAAO;AAEd,uBAAW,KACT,eAAe,IAAI,SAAS,MAAM,gBAAgB,mBAAK;AAEzD,sBAAU;AACV,wBAAY,mBAAK;AACjB;AAAA,iBACK;AACL,kBAAM,MAAM,KAAK,qBAAqB,CAAC;AACvC,iBAAK,gBAAgB;AACrB,kBAAM,SAAS,KAAK;AACpB,uBAAW,KACT,eACE,IAAI,SAAS,KAAK,SAClB,gBACA,mBAAK;AAGT,sBAAU;AACV,wBAAY,mBAAK;AACjB;AAAA;AAAA,mBAEO,KAAK,eAAe,MAAM;AACnC,2BAAiB;AACjB,gBAAM,IAAI,KAAK,qBAAqB,CAAC,KAAK;AAC1C,gBAAM,YAAY,KAAK;AACvB,gBAAM,IAAI,KAAK,qBAAqB,CAAC;AACrC,eAAK,gBAAgB;AACrB,kBAAQ;AAAA,iBACD;AACH,yBAAW,KACT,eAAe,IAAI,UAAU,GAAG,IAAI,gBAAgB,mBAAK;AAE3D,wBAAU;AACV,0BAAY,mBAAK;AACjB;AAAA,iBACG;AACH,yBAAW,KACT,eAAe,IAAI,WAAW,GAAG,IAAI,gBAAgB,mBAAK;AAE5D,wBAAU;AACV,0BAAY,mBAAK;AACjB;AAAA;AAEA,oBAAM;AAAA;AAAA,mBAED,KAAK,eAAe,OAAO;AACpC,qBAAW,KACT,eAAe,IAAI,WAAW,gBAAgB,mBAAK;AAErD,oBAAU;AACV,sBAAY,mBAAK;AACjB;AAAA,mBACS,KAAK,eAAe,MAAM;AACnC,cAAI,KAAK,eAAe,MAAM;AAC5B,6BAAiB;AACjB,kBAAM,CAAC,QAAQ,KAAK,WAAW;AAC/B,uBAAW,KACT,eAAe,IAAI,YAAY,OAAO,gBAAgB,mBAAK;AAE7D,sBAAU;AACV,wBAAY,mBAAK;AACjB;AAAA,iBACK;AAEL,uBAAW,KACT,eAAe,IAAI,KAAK,YAAY,gBAAgB,mBAAK;AAE3D,sBAAU;AACV,wBAAY,mBAAK;AACjB;AAAA;AAAA,mBAEO,KAAK,eAAe,MAAM;AACnC,2BAAiB;AACjB,qBAAW,KAAK,eAAe,IAAI,SAAS,gBAAgB,mBAAK;AACjE,oBAAU;AACV,sBAAY,mBAAK;AACjB;AAAA,eACK;AACL,gBAAM,IAAI,MAAM,yBAAyB,KAAK;AAAA;AAAA;AAIlD,QAAI,mBAAK,UAAS,mBAAK,QAAO,QAAQ;AACpC,YAAM,IAAI,MAAM;AAAA;AAElB,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,IAAI,MAAM;AAAA;AAElB,WAAO,eAAe,WAAW,SAAS,aAAa;AAAA;AAAA,EAGjD,uBAAoC;AAC1C,UAAM,CAAC,EAAE,EAAE,EAAE,eAAe,eAAe,UACzC,KAAK,WAAW;AAElB,WAAO,IAAI,YACT,QACA,0BAA0B,eAAe,SACzC,0BAA0B,eAAe;AAAA;AAAA,EAIrC,gBAA8B;AACpC,UAAM,iBAAiB,mBAAK;AAE5B,QAAI,KAAK,eAAe,MAAM;AAC5B,aAAO,eAAe,IAAI,KAAK,YAAY,gBAAgB,mBAAK;AAAA;AAGlE,QAAI,cAAc,KAAK;AAGvB,QAAI,CAAC,QAAQ,qBAAqB,KAAK;AACvC,UAAM,SAAS,KAAK;AAEpB,QAAI,QAAQ;AACV,UAAI,SAAS,GAAG;AACd,cAAM,IAAI,MAAM;AAAA;AAElB,UAAK,YAAW,QAAQ,WAAW,SAAS,WAAW,GAAG;AAExD,cAAM,IAAI,MACR;AAAA;AAGJ,UAAK,YAAW,QAAQ,WAAW,SAAS,CAAC,mBAAmB;AAC9D,cAAM,IAAI,MACR;AAAA;AAGJ,UAAK,YAAW,OAAO,WAAW,QAAQ,mBAAmB;AAC3D,cAAM,IAAI,MACR;AAAA;AAGJ,UAAI,OAAO,WAAW,MAAM;AAC1B,sBAAc,YAAY,SAAS;AAAA,UACjC,QAAQ,GAAG,YAAY,UACrB,WAAW,MAAM,SAAS;AAAA;AAAA;AAIhC,UAAI,OAAO,WAAW,MAAM;AAC1B,sBAAc,YAAY,SAAS;AAAA,UACjC,QAAQ,GAAG,YAAY,UACrB,WAAW,MAAM,SAAS;AAAA;AAG9B,kBAAU;AAAA;AAAA;AAId,UAAM,OAAO,eACX,IAAI,KAAK,aAAa,SACtB,gBACA,mBAAK;AAEP,WAAO;AAAA;AAAA,EAGD,kBAAqC;AAC3C,QAAI,KAAK,eAAe,MAAM;AAC5B,UAAI,KAAK,eAAe,MAAM;AAC5B,eAAO;AAAA;AAET,aAAO;AAAA;AAET,QAAI,KAAK,eAAe,MAAM;AAC5B,UAAI,KAAK,eAAe,MAAM;AAC5B,eAAO;AAAA;AAET,aAAO;AAAA;AAET,WAAO;AAAA;AAAA,EAGD,oCAAuD;AAC7D,UAAM,WAAW,mBAAK;AACtB,UAAM,CAAC,EAAE,cAAc,YAAY,KAAK,WAAW;AACnD,QAAI,cAAc,WAAW,QAAQ,iBAAiB,KAAK;AACzD,YAAM,IAAI,MACR,uBAAuB;AAAA;AAG3B,WAAO;AAAA,MACL,0BAA0B,cAAc,KAAM,cAAa,MAAM,KAAK;AAAA,MACtE,CAAC;AAAA;AAAA;AAAA,EAIG,cAAsB;AAC5B,UAAM,WAAW,mBAAK;AACtB,UAAM,CAAC,EAAE,cAAc,YAAY,KAAK,WAAW;AACnD,QAAI,cAAc,WAAW,QAAQ,iBAAiB,KAAK;AACzD,YAAM,IAAI,MACR,uBAAuB;AAAA;AAG3B,WACE,0BAA0B,cAAc,KAAM,cAAa,MAAM,KAAK;AAAA;AAAA,EAIlE,WAAW,OAAgC;AACjD,UAAM,MAAM,MAAM,KAAK,KAAK;AAC5B,QAAI,QAAQ,MAAM;AAChB,YAAM,IAAI,MAAM;AAAA;AAElB,uBAAK,MAAQ,AAAb,mBAAK,QAAQ,IAAI,GAAG;AACpB,WAAO;AAAA;AAAA,EAID,SAAS,OAAuC;AACtD,UAAM,MAAM,MAAM,KAAK,KAAK;AAC5B,QAAI,QAAQ,MAAM;AAChB,aAAO;AAAA;AAET,uBAAK,MAAQ,AAAb,mBAAK,QAAQ,IAAI,GAAG;AACpB,WAAO;AAAA;AAAA,EAGD,YAAoB;AAC1B,WAAO,mBAAK,QAAO,MAAM,mBAAK;AAAA;AAAA,EAGxB,UAAkB;AACxB,UAAM,OAAO,mBAAK,QAAO,mBAAK;AAC9B,IAAK,AAAL,uBAAK,MAAL;AACA,WAAO;AAAA;AAAA,EAGD,eAAe,UAA2B;AAChD,QAAI,mBAAK,QAAO,mBAAK,WAAU,UAAU;AACvC,MAAK,AAAL,uBAAK,MAAL;AACA,aAAO;AAAA;AAET,WAAO;AAAA;AAAA,EAGD,gBAAgB,UAA0B;AAChD,UAAM,OAAO,KAAK;AAClB,QAAI,SAAS,UAAU;AACrB,YAAM,IAAI,MACR,cAAc,yCAAyC;AAAA;AAG3D,WAAO;AAAA;AAAA;AAhVT;AACA;;;ACtEF,IAAM,SAAS,IAAI;AACZ,kBAAkB,GAAiB;AACxC,MAAI,CAAC,OAAO,IAAI,IAAI;AAClB,YAAQ,KAAK;AACb,WAAO,IAAI;AAAA;AAAA;;;ACCR,8BAA8C;AAAA,EAInD,YAAY,SAAY,SAAiB,GAAG;AAC1C,SAAK,UAAU;AACf,SAAK,SAAS;AAEd,QACE,CAAC,OAAO,UAAU,KAAK,WACvB,KAAK,SAAS,WACd,KAAK,SAAS,SACd;AACA,YAAM,IAAI,MACR,kEAAkE,0BAA0B;AAAA;AAAA;AAAA,EAKlG,SAAiB;AACf,QAAI,IAAY;AAEhB,UAAM,YAAY,KAAK,IAAI,KAAK;AAChC,QAAI,cAAc,GAAG;AACnB,WAAK;AAAA;AAEP,QAAI,KAAK,SAAS,GAAG;AACnB,WAAK;AAAA;AAEP,WAAO;AAAA;AAAA,EAGT,YAAY,OAAsC;AAChD,WACE,KAAK,QAAQ,YAAY,MAAM,YAAY,KAAK,WAAW,MAAM;AAAA;AAAA,GAKpE,mBACC,SACA,OACqB;AACrB,UAAM,YAAY,KAAK,IAAI,KAAK;AAChC,UAAM,aAAa,gBAAgB,SAAS,KAAK,SAAS;AAC1D,aAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,aAAO,KAAK,QAAQ,mBAAmB,YAAY;AAAA;AAAA;AAAA;;;ACnDzD;AAcO,iCAA0B,WAAW;AAAA,EAK1C,YACE,QACA,YACA,YACA;AACA;AATO;AACA;AACA;AAQP,uBAAK,SAAU;AACf,uBAAK,aAAc,cAAc;AACjC,uBAAK,aAAc,cAAc;AACjC,WAAO,OAAO;AAEd,QACE,mBAAK,iBAAgB,QACpB,EAAC,OAAO,UAAU,mBAAK,iBACtB,mBAAK,eAAc,KACnB,mBAAK,eAAc,UACrB;AACA,YAAM,IAAI,MACR,4DAA4D;AAAA;AAIhE,QACE,mBAAK,iBAAgB,QACpB,EAAC,OAAO,UAAU,mBAAK,iBACtB,mBAAK,eAAc,KACnB,mBAAK,eAAc,UACrB;AACA,YAAM,IAAI,MACR,4DAA4D;AAAA;AAIhE,QACE,mBAAK,iBAAgB,QACrB,mBAAK,iBAAgB,QACrB,mBAAK,gBAAe,mBAAK,cACzB;AACA,YAAM,IAAI,MACR;AAAA;AAIJ,QAAI,mBAAK,iBAAgB,QAAQ,mBAAK,iBAAgB,MAAM;AAC1D,YAAM,IAAI,MACR;AAAA;AAAA;AAAA,SAKC,WAAW,GAAwB;AACxC,WAAO,iBAAiB;AAAA;AAAA,EAI1B,SAAS,eAAsD;AAC7D,WAAO,IAAI,aACT,cAAc,UAAU,mBAAK,UAC7B,cAAc,cAAc,mBAAK,cACjC,cAAc,cAAc,mBAAK;AAAA;AAAA,EAIrC,YAAY,OAA6B;AACvC,UAAM,qBAAqB;AAC3B,WACE,MAAM,GAAG,iBACT,mBAAK,aAAY,iCAAmB,YACpC,mBAAK,iBAAgB,iCAAmB,gBACxC,mBAAK,iBAAgB,iCAAmB;AAAA;AAAA,MAMxC,SAAiB;AACnB,WAAO,mBAAK;AAAA;AAAA,MAKV,aAA4B;AAC9B,WAAO,mBAAK;AAAA;AAAA,MAKV,aAA4B;AAC9B,WAAO,mBAAK;AAAA;AAAA,EAGd,qBAA0C;AACxC,UAAM,IAAI,MACR;AAAA;AAAA,EAIJ,WAAmB;AACjB,QAAI,IAAI,mBAAK;AACb,QAAI,mBAAK,iBAAgB,MAAM;AAC7B,UAAI,OAAO,mBAAK,gBAAe;AAC/B,UAAI,mBAAK,iBAAgB,MAAM;AAC7B,YAAI,OAAO,mBAAK,gBAAe,MAAM;AAAA;AAAA;AAGzC,WAAO;AAAA;AAAA;AA9GJ;AACI;AACA;AACA;AAjBX;AAuIO,0BAAmB,UAAgB;AAAA,EAGxC,eACK,MACH;AACA;AALO;AAMP,QAAI,OAAO,KAAK,OAAO,UAAU;AAC/B,UAAI,KAAK,MAAM,MAAM;AACnB,2BAAK,oBAAqB,IAAI,kBAC5B,YAAY,WAAW,KAAK,KAC5B,KAAK;AAEP;AAAA,aACK;AACL,eAAO,MAAK,WAAW,KAAK;AAAA;AAAA;AAGhC,uBAAK,oBAAqB,IAAI,kBAC5B,KAAK,IACL,KAAK;AAAA;AAAA,EAIT,YAAY,OAA4B;AACtC,UAAM,cAAc,MAAM,GAAG;AAC7B,WACE,CAAC,CAAC,eACF,mBAAK,oBAAmB,YAAY,0BAAY;AAAA;AAAA,EAIpD,SAAe;AAEb,WAAO,kBACL,MACA,IAAI,MAAK,mBAAK,oBAAmB,SAAS,CAAC,KAAK;AAAA;AAAA,GAInD,mBACC,UAA8B,mBAAmB,UAC5B;AACrB,QAAI,YAAY,mBAAmB,UAAU;AAC3C,YAAM;AAAA,WACD;AACL,YAAM,KAAK,SAAS;AAAA,QAClB,QAAQ,CAAC,KAAK;AAAA;AAAA;AAAA;AAAA,MAKhB,UAAuB;AACzB,WAAO,mBAAK,oBAAmB;AAAA;AAAA,EAIjC,SAAS,eAAwC;AAE/C,WAAO,IAAI,MACT,mBAAK,oBAAmB,QAAQ,SAAS,gBACzC,cAAc,UAAU,KAAK;AAAA;AAAA,SAI1B,WAAW,GAAiB;AACjC,WAAO,UAAU;AAAA;AAAA,MAGf,SAAiB;AACnB,WAAO,mBAAK,oBAAmB;AAAA;AAAA,MAI7B,OAAe;AACjB,aAAS;AACT,WAAO;AAAA;AAAA,MAIL,SAAiB;AACnB,WAAO,mBAAK,oBAAmB,QAAQ,UAAU;AAAA;AAAA,MAI/C,aAAiC;AACnC,WAAO,mBAAK,oBAAmB,QAAQ,cAAc;AAAA;AAAA,MAInD,aAAiC;AACnC,WAAO,mBAAK,oBAAmB,QAAQ,cAAc;AAAA;AAAA,EAGvD,WAAmB;AACjB,QAAI,KAAK,WAAW,WAAW;AAC7B,aAAO;AAAA;AAET,QAAI,KAAK,OAAO,SAAS,WAAW;AAClC,aACE,mBAAK,oBAAmB,QAAQ,WAAW,MAAM,GAAG,MACpD,KAAK,IAAI,KAAK,UACb,MAAK,SAAS,IAAI,MAAM;AAAA;AAG7B,QAAI,KAAK,OAAO,SAAS,eAAe;AACtC,YAAM,YAAY,KAAK,IAAI,KAAK;AAChC,aACE,mBAAK,oBAAmB,QAAQ,WAAW,MAAM,GAAG,OACnD,eAAc,IAAI,KAAK,aACvB,MAAK,SAAS,IAAI,OAAO;AAAA;AAI9B,WACE,mBAAK,oBAAmB,QAAQ,aAChC,mBAAK,oBAAmB;AAAA;AAAA;AApHvB;AACI;;;AC/HX,kCAA4B;AAAA,EAA5B,cATA;AAUE,wBAAmC;AACnC,wBAAmC;AAAA;AAAA,EAEnC,OAAO,UAAmC;AACxC,UAAM,UAAU,KAAK,MAAM;AAC3B,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA;AAET,WAAO,IAAI,QAAQ,IAAI,CAAC,SAAS,KAAK,QAAQ,KAAK;AAAA;AAAA,EAGrD,MAAM,UAAuD;AAC3D,SAAK,gBAAL,MAAK,eAAiB,IAAI,YAAY;AACtC,SAAK,gBAAL,MAAK,eAAiB,IAAI,YAAY;AAEtC,UAAM,aAAa,SAAS;AAC5B,QAAI,WAAW,2BAA2B,GAAG;AAC3C,YAAM,CAAC,GAAG,KAAK,WAAW;AAC1B,UACE,EAAE,GAAG,OAAO,QAAQ,YAAY,KAAK,iBACrC,EAAE,GAAG,OAAO,QAAQ,YAAY,KAAK,eACrC;AACA,YAAI,SAAS,WAAW,GAAG;AACzB,gBAAM,IAAI,MACR;AAAA;AAGJ,eAAO,CAAC,GAAW;AAAA;AAAA;AAGvB,WAAO;AAAA;AAAA;AAGX,IAAM,gCAAgC,IAAI;AA3C1C;AA6CO,8BAAuB,UAAoB;AAAA,EAGhD,YAAY,WAA8B,QAAiB;AACzD;AAHO;AAIP,UAAM,MAAM,sBAAsB;AAClC,uBAAK,qBAAqB,IAAI,kBAAkB,KAAK;AAAA;AAAA,EAGvD,YAAY,OAA4B;AACtC,UAAM,kBAAkB;AACxB,WACE,MAAM,GAAG,cACT,mBAAK,qBAAmB,YAAY,8BAAgB;AAAA;AAAA,MAIpD,MAAW;AACb,WAAO,mBAAK,qBAAmB;AAAA;AAAA,MAG7B,SAAiB;AACnB,WAAO,mBAAK,qBAAmB;AAAA;AAAA,MAI7B,+BAAuC;AACzC,WAAO,mBAAK,qBAAmB;AAAA;AAAA,EAGjC,SAAmB;AACjB,WAAO,IAAI,UACT,mBAAK,qBAAmB,SACxB,CAAC,mBAAK,qBAAmB;AAAA;AAAA,GAI5B,mBACC,UAA8B,mBAAmB,UACjD,OACqB;AACrB,sBAAU;AACV,QAAI,UAAU,GAAG;AACf,YAAM,YAAY,mBAAmB,WAAW,OAAO,KAAK;AAAA,WACvD;AACL,aAAO,mBAAK,qBAAmB,mBAAmB,SAAS,QAAQ;AAAA;AAAA;AAAA,SAIhE,aAAuB;AAC5B,UAAM,IAAI,MAAM;AAAA;AAAA,EAGlB,WAAmB;AACjB,WACE,8BAA8B,OAAO,SACrC,IAAI,mBAAK,qBAAmB,QAAQ,cAAc,mBAAK,qBAAmB;AAAA;AAAA,EAI9E,6BAAgE;AAC9D,WAAO,8BAA8B,MAAM;AAAA;AAAA;AA7DxC;AACI;;;ACnCJ,wBAEL,GACA,GASS;AACT,SAAO,aAAa;AAAA;AAGf,4BAA4B,GAAiB;AAClD,SACE,eAAe,GAAG,aAClB,eAAe,GAAG,gBAClB,eAAe,GAAG,eAClB,eAAe,GAAG,cAClB,eAAe,GAAG,SAClB,eAAe,GAAG,YAClB,eAAe,GAAG;AAAA;;;ACxBtB,kBACE,GACA,MACA,UACY;AAEZ,MAAI,KAAK,GAAG,WAAW;AACrB,WAAO,EAAE,iBAAiB,MAAkB;AAAA;AAE9C,MAAI,KAAK,GAAG,OAAO;AACjB,WAAO,EAAE,aAAa,MAAc;AAAA;AAEtC,MAAI,KAAK,GAAG,aAAa;AACvB,WAAO,EAAE,mBAAmB,MAAoB;AAAA;AAElD,MAAI,KAAK,GAAG,YAAY;AACtB,WAAO,EAAE,kBAAkB,MAAmB;AAAA;AAEhD,MAAI,KAAK,GAAG,QAAQ;AAClB,WAAO,EAAE,cAAc,MAAe;AAAA;AAExC,MAAI,KAAK,GAAG,UAAU;AACpB,WAAO,EAAE,gBAAgB,MAAiB;AAAA;AAE5C,MAAI,KAAK,GAAG,cAAc;AACxB,WAAO,EAAE,oBAAoB,MAAqB;AAAA;AAEpD,QAAM,IAAI,MAAM;AAAA;AAGlB,sBAAsB,GAAqB;AACzC,MACE,EAAE,GAAG,aACL,EAAE,GAAG,SACL,EAAE,GAAG,eACL,EAAE,GAAG,cACL,EAAE,GAAG,UACL,EAAE,GAAG,YACL,EAAE,GAAG,cACL;AACA,WAAO;AAAA;AAET,QAAM;AAAA;AAGD,4BAIL;AAAA,EAEO,aAAa,MAAY,UAAgC;AAC9D,WAAO,SAAS,MAAM,MAAM;AAAA;AAAA,EAGvB,iBAAiB,MAAY,UAA0B;AAC5D,WAAO,aAAa,KAAK,aAAa,MAAM;AAAA;AAAA;AAkCzC,gCAGG,gBAAkD;AAAA,EACnD,aAAa,MAAwB;AAC1C,WAAO,SAAyC,MAAM,MAAM;AAAA;AAAA,EAGvD,iBAAiB,MAAkB;AACxC,WAAO,aAAa,KAAK,aAAa;AAAA;AAAA;AA9G1C;AAkIA,8BAAuB,gBAAkD;AAAA,GAoB/D,YAAY,KAAU,SAA2C;AACvE,QAAI,QAAQ,UAAU,GAAG;AACvB,aAAO,IAAI;AACX;AAAA;AAGF,UAAM,WAAmB;AACzB,QAAI,WAAwB;AAC5B,UAAM,gBAAgB,SAAS,iBAAiB;AAChD,qCAAiC,MAAY,aAA8B;AA/J/E;AAgKM,YAAM,YAAY,gCAAS,0BAAT,SAAoB,MAAM,aAAa;AACzD,UAAI,cAAc,GAAG;AACnB,eAAO;AAAA;AAET,YAAM,UAAU,IAAI,KAAK,KAAK,SAAS;AACvC,eAAS,KAAK;AACd,iBAAW;AACX,aAAO;AAAA;AAET,6BAAyB,SAAe;AACtC,UACE,iBACA,UAAU,GAAG,SACb,QAAQ,GAAG,SACV,SAAkB,QAAQ,YAAa,QAAiB,UACzD;AACA,iBAAS;AACT,YACE,CAAC,wBAAwB,UAAmB,QAAiB,SAC7D;AACA,qBAAW,SAAS,MAAM,IAAI;AAAA;AAAA,aAE3B;AACL,YAAI,QAAQ,GAAG,OAAO;AACpB,kCAAwB,SAAiB;AAAA,eACpC;AACL,mBAAS,KAAK;AACd,qBAAW;AAAA;AAAA;AAAA;AAKjB,UAAM,aAAa;AAAA,MACjB,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,IAAI;AAAA;AAE7C,eAAW,QAAQ,IAAI,SAAS;AAC9B,iBAAW,gBAAgB,KAAK,aAAa,MAAM,aAAa;AAC9D,wBAAgB;AAAA;AAAA;AAGpB,eAAW,QAAQ,UAAU;AAC3B,YAAM;AAAA;AAAA;AAAA,GAIF,iBACN,UACA,SACiB;AACjB,QAAI,QAAQ,UAAU,GAAG;AACvB,YAAM;AACN;AAAA;AAEF,UAAM,aAAa;AAAA,MACjB,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,IAAI;AAAA;AAE7C,UAAM,IAAI,SAAS,KAAK,YAAY,SAAS,KAAK;AAAA;AAAA,GAG5C,aAAa,MAAY,UAA4C;AAC3E,UAAM;AAAA;AAAA,GAGA,mBACN,YACA,SACiB;AACjB,QAAI,QAAQ,UAAU,GAAG;AACvB,YAAM;AACN;AAAA;AAEF,UAAM,aAAa;AAAA,MACjB,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,IAAI;AAAA;AAE7C,UAAM,IAAI,WACR,KAAK,YAAY,WAAW,GAAG,aAC/B,KAAK,YAAY,WAAW,GAAG;AAAA;AAAA,GAI3B,kBACN,WACA,SACiB;AACjB,QAAI,QAAQ,UAAU,GAAG;AACvB,YAAM;AACN;AAAA;AAEF,UAAM,aAAa;AAAA,MACjB,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,IAAI;AAAA;AAE7C,UAAM,IAAI,UACR,KAAK,YAAY,UAAU,GAAG,aAC9B,KAAK,YAAY,UAAU,GAAG;AAAA;AAAA,GAI1B,cACN,OACA,UACiB;AACjB,UAAM;AAAA;AAAA,GAGA,gBACN,SACA,UACiB;AACjB,UAAM;AAAA;AAAA,GAGA,oBACN,SACA,UACiB;AACjB,UAAM;AAAA;AAAA;AAjJV;AACS;AAAA,eAAU,SACf,MACA,aACA,SACQ;AACR,MAAI,YAAY,KAAK,SAAS;AAC9B,MAAI,SAAS,kBAAkB;AAC7B,UAAM,QAAQ,QAAQ,iBAAiB,KAAK;AAK5C,UAAM,MAAM,KAAK,MAAM,QAAQ,KAAK,IAAI;AACxC,gBAAe,aAAY,QAAS,QAAQ,OAAO,QAAS;AAAA;AAE9D,SAAO;AAAA;AAfF,aADT,UACS;AAoJT,IAAM,mBAAmB,IAAI;AACtB,IAAM,WAAW,iBAAiB,YAAY,KAAK;;;AC1Q1D,oBAAoB,OAA2C;AAC7D,MAAI,CAAC,OAAO;AACV,WAAO;AAAA;AAGT,MAAI,eAAe,OAAO,MAAM;AAC9B,WAAQ,MAAc;AAAA;AAGxB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,SAAS,OAAO;AAAA;AASzB,QAAM,OAAO;AACb,MAAI,OAAO,KAAK,OAAO,cAAc,YAAY;AAC/C,WAAO;AAAA;AAGT,QAAM;AAAA;AAID,+BAA+B,KAA6B;AACjE,MAAI,eAAe,KAAK,MAAM;AAC5B,WAAO;AAAA;AAET,SAAO,IAAI,IAAI;AAAA;AA9CjB;AAwEO,yBAAkB,UAAe;AAAA,EAGtC,YAAY,KAAyB;AACnC;AAFF;AAGE,uBAAK,SAAS,MAAM,KAAK,WAAW;AAGpC,eAAW,QAAQ,mBAAK,UAAQ;AAC9B,UAAI,CAAC,mBAAmB,OAAO;AAC7B,cAAM,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA,EAmCtB,YAAY,OAA4B;AACtC,UAAM,aAAa;AACnB,QAAI,CAAC,MAAM,GAAG,OAAM;AAClB,aAAO;AAAA;AAIT,UAAM,KAAK,MAAM,KAAK,mBAAK;AAC3B,UAAM,KAAK,MAAM,KAAK,yBAAW;AACjC,QAAI,GAAG,WAAW,GAAG,QAAQ;AAC3B,aAAO;AAAA;AAET,aAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAClC,UAAI,CAAC,GAAG,GAAG,YAAY,GAAG,KAAK;AAC7B,eAAO;AAAA;AAAA;AAGX,WAAO;AAAA;AAAA,EAaT,SAAc;AAGZ,WAAO,IAAI,KAAI,QAAQ,MAAM,KAAK,mBAAK,UAAQ,IAAI,CAAC,MAAM,EAAE;AAAA;AAAA,GAI7D,mBACC,UAA8B,mBAAmB,UACjD,OACqB;AACrB,sBAAU;AACV,eAAW,QAAQ,OAAO,mBAAK,UAAQ,UAAU;AAC/C,aAAO,KAAK,mBAAmB,SAAS;AAAA;AAAA;AAAA,EAsB5C,OAAO,SAAmC;AACxC,WAAO,IAAI,KACT,KAAK,mBACH,mBAAmB,UACnB,SAAS,SAAS;AAAA;AAAA,GAMvB,wBAAyC;AACxC,eAAW,QAAQ,KAAK,sBAAsB;AAC5C,UAAI,KAAK,GAAG,OAAO;AACjB,cAAM;AAAA;AAAA;AAAA;AAAA,EAKZ,OAAO,OAA+B;AACpC,WAAO,IAAI,KACT,MAAM,KAAK,mBAAK,UAAQ,OAAO,MAAM,KAAK,WAAW;AAAA;AAAA,EAKzD,sBAA+B;AAE7B,eAAW,KAAK,mBAAK,UAAQ;AAC3B,aAAO;AAAA;AAET,WAAO;AAAA;AAAA,SAGF,WAAW,GAAgB;AAChC,WAAO,SAAS;AAAA;AAAA,GAGjB,QAAyB;AACxB,eAAW,QAAQ,mBAAK,UAAQ;AAC9B,YAAM;AAAA;AAAA;AAAA,EAIV,uBAA+B;AAC7B,WAAO,MAAM,KAAK,mBAAK,UAAQ;AAAA;AAAA,MAI7B,OAAe;AACjB,aAAS;AACT,WAAO;AAAA;AAAA,EAiBT,WAAmB;AACjB,QAAI,SAAS;AACb,QAAI,eAA4B;AAChC,eAAW,QAAQ,mBAAK,UAAQ;AAC9B,UAAI,cAAc;AAChB,kBAAU,aAAa,cAAc;AAAA;AAGvC,gBAAU,KAAK;AACf,qBAAe;AAAA;AAEjB,WAAO;AAAA;AAAA,EAgBT,SAAS,SAAgC;AACvC,WAAO,IAAI,KAAI,SAAS,MAAM,WAAW;AAAA;AAAA;AA7MtC;AAEL;AA+MF,sBAAsB,IAAU,IAAkB;AAChD,MAAI,GAAG,GAAG,YAAY,GAAG,GAAG,UAAU;AACpC,WAAO;AAAA;AAET,MAAI,GAAG,GAAG,gBAAgB,CAAC,GAAG,GAAG,UAAU;AACzC,WAAO;AAAA;AAET,SAAO;AAAA;;;ACtRF,IAAM,UAAU;AAAA,EACrB,MAAM,IAAI,IAAI;AAAA,IACZ,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA;AAAA,EAGhB,UAAU,IAAI,IAAI;AAAA,IAChB,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA;AAAA,EAGhB,gBAAgB,IAAI,IAAI;AAAA,IACtB,IAAI,WACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAC3D,IAAI,IAAI;AAAA,MACN,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAA;AAAA;AAAA,EAKxE,QAAQ,IAAI,IAAI;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA;AAAA,EAGhB,OAAO,IAAI,IAAI;AAAA,IACb,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,WACF,IAAI,IAAI;AAAA,MACN,IAAI,UACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MACvB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAA,QAG3B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAA,IAEzB,IAAI,WACF,IAAI,IAAI;AAAA,MACN,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAA,QAEpE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAA,IAEzB,IAAI,KAAK,KAAK;AAAA;AAAA,EAGhB,eAAe,IAAI,IAAI;AAAA,IACrB,IAAI,UACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MACvB,IAAI,IAAI;AAAA,MACN,IAAI,WACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MACvB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAA;AAAA;AAAA,EAM/B,cAAc,IAAI,IAAI;AAAA,IACpB,IAAI,UACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MACvB,IAAI,IAAI;AAAA,MACN,IAAI,WACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MACvB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA;AAAA;AAAA,EAMrE,aAAa,IAAI,IAAI;AAAA,IACnB,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA;AAAA,EAGhB,OAAO,IAAI,IAAI;AAAA,IACb,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA,IACd,IAAI,KAAK,KAAK;AAAA;AAAA,EAGhB,gBAAgB,IAAI,IAAI;AAAA,IACtB,IAAI,UACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MACvB,IAAI,IAAI;AAAA,MACN,IAAI,SACF,IAAI,IAAI;AAAA,QACN,IAAI,WACF,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,MACvB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAA,UAG3B;AAAA;AAAA;AAAA,EAMR,aAAa,IAAI,IAAI,CAAC,IAAI,SAAS,IAAI,SAAS,IAAI;AAAA;;;ACxItD,IAAM,iBAA0C;AAAA,EAC9C,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EAEb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EAEb,IAAI,IAAI,KAAK;AAAA,EACb,KAAK,IAAI,KAAK;AAAA,EAEd,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,KAAK,IAAI,KAAK;AAAA,EACd,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EACb,IAAI,IAAI,KAAK;AAAA,EAEb,IAAI,IAAI,KAAK;AAAA,EACb,KAAK,IAAI,KAAK;AAAA;AAMT,mBAAmB,GAA+B;AACvD,MAAI,EAAE,UAAU,EAAE,SAAS;AACzB,WAAO;AAAA;AAGT,SAAO,eAAe,EAAE,YAAY;AAAA;;;AC1CtC,2BAA2B,GAAgB;AACzC,MAAI,UAAU,EAAE;AAChB,YAAU,QAAQ,QAAQ,MAAM,SAAS,QAAQ,MAAM;AACvD,YAAU,QAAQ,QAAQ,OAAO;AACjC,YAAU,QAAQ,QAAQ,MAAM,SAAS,QAAQ,MAAM;AACvD,SAAO;AAAA;AA2CF,0BAA0B,SAAsC;AACrE,QAAM,MAAM,IAAI,IAAI;AACpB,MAAI,CAAC,QAAQ,KAAK;AAChB,UAAM,IAAI,MAAM;AAAA;AAElB,MAAI,aAAa,IAAI,OAAO,kBAAkB,QAAQ;AAEtD,MAAI,QAAQ,OAAO;AACjB,QAAI,aAAa,IAAI,SAAS,kBAAkB,QAAQ;AAAA;AAE1D,MAAI,QAAQ,OAAO;AACjB,QAAI,aAAa,IAAI,SAAS,QAAQ;AAAA;AAExC,MAAI,QAAQ,QAAQ;AAClB,QACE,CAAC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,QAAQ,SACnB;AACA,YAAM,IAAI,MAAM,6BAA6B,QAAQ;AAAA;AAEvD,QAAI,aAAa,IAAI,UAAU,QAAQ;AAAA;AAEzC,MAAI,QAAQ,OAAO;AACjB,QACE,CAAC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,QAAQ,QACnB;AACA,YAAM,IAAI,MAAM,4BAA4B,QAAQ;AAAA;AAEtD,QAAI,aAAa,IAAI,SAAS,QAAQ;AAAA;AAExC,MAAI,QAAQ,MAAM;AAChB,QAAI,CAAC,CAAC,UAAU,YAAY,cAAc,SAAS,QAAQ,OAAO;AAChE,YAAM,IAAI,MAAM,2BAA2B,QAAQ;AAAA;AAErD,QAAI,aAAa,IAAI,QAAQ,QAAQ;AAAA;AAEvC,MAAI,QAAQ,MAAM;AAChB,QACE,CAAC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,QAAQ,OACnB;AACA,YAAM,IAAI,MAAM,2BAA2B,QAAQ;AAAA;AAErD,QAAI,aAAa,IAAI,QAAQ,QAAQ;AAAA;AAEvC,SAAO,IAAI;AAAA;;;AChIN,gCACL,KACA,SACA,SAIK;AACL,QAAM,WAAW,MAAM,KAAK,IAAI;AAChC,QAAM,cAAc,SAAS,SAAS,SAAS;AAC/C,MACE,SAAS,YACT,eACA,YAAY,WACZ,YAAY,QAAQ,YAAY,QAAQ,UACxC;AACA,UAAM,WAAW,SAAS,MAAM,GAAG,SAAS,SAAS;AACrD,QAAI,YAAY,YAAY,SAAS,QAAQ;AAC7C,UAAM,MAAM,SAAS;AACrB,QAAI,KAAK;AACP,kBAAc,aAAY,MAAO,OAAO;AACxC,UAAI,YAAY,IAAI,KAAK;AACvB,qBAAa;AAAA;AAAA;AAGjB,QAAI,cAAc,GAAG;AACnB,eAAS,KAAK,YAAY,SAAS,EAAE,QAAQ;AAAA;AAE/C,WAAO,IAAI,IAAI;AAAA,SACV;AACL,WAAO,IAAI,IAAI,CAAC,GAAG,UAAU;AAAA;AAAA;",
6
+ "names": []
7
+ }