cubing 0.66.0 → 0.66.1

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 (106) hide show
  1. package/dist/bin/chunks/{chunk-VTD7RU7S.js → chunk-HS7R54XN.js} +2 -2
  2. package/dist/bin/order.js +1 -1
  3. package/dist/bin/puzzle-geometry-bin.js +1 -1
  4. package/dist/bin/scramble.js +1 -1
  5. package/dist/bin/svg.js +1 -1
  6. package/dist/lib/cubing/alg/index.d.ts +1 -1
  7. package/dist/lib/cubing/alg/index.js +1 -2
  8. package/dist/lib/cubing/bluetooth/index.d.ts +2 -2
  9. package/dist/lib/cubing/bluetooth/index.js +5 -6
  10. package/dist/lib/cubing/chunks/{big-puzzle-orientation-KCHMEEM7.js → big-puzzle-orientation-KJL4OFV2.js} +1 -2
  11. package/dist/lib/cubing/chunks/{chunk-XAOXLHYH.js → chunk-6R47S6MP.js} +24 -25
  12. package/dist/lib/cubing/chunks/{chunk-ZCZVKGKB.js → chunk-7LEVC3YR.js} +1 -2
  13. package/dist/lib/cubing/chunks/{chunk-7GUL3OBQ.js → chunk-BHVTDDUY.js} +0 -1
  14. package/dist/lib/cubing/chunks/{chunk-JL5REGXZ.js → chunk-IIJFVP3K.js} +6 -7
  15. package/dist/lib/cubing/chunks/{chunk-6RZGNWLS.js → chunk-KH2MQ7KY.js} +2 -3
  16. package/dist/lib/cubing/chunks/{chunk-L6OQRJJX.js → chunk-LBER75W4.js} +1 -2
  17. package/dist/lib/cubing/chunks/{chunk-ZV7PYR2S.js → chunk-NJ66FRKF.js} +3 -4
  18. package/dist/lib/cubing/chunks/{chunk-CAQY24I5.js → chunk-QOLD6GH2.js} +5 -6
  19. package/dist/lib/cubing/chunks/{chunk-CFZLXDM6.js → chunk-QZK3M7IM.js} +0 -1
  20. package/dist/lib/cubing/chunks/chunk-RDKH6CDA.js +0 -0
  21. package/dist/lib/cubing/chunks/{chunk-4KLW7Y6J.js → chunk-T5M3DY5P.js} +2 -3
  22. package/dist/lib/cubing/chunks/{chunk-K237RIQJ.js → chunk-UKAXYOG2.js} +2 -3
  23. package/dist/lib/cubing/chunks/{chunk-GHFBZYSV.js → chunk-YJH5LHFN.js} +0 -1
  24. package/dist/lib/cubing/chunks/{inside-BAQGCKLY.js → inside-UWSZBO4Y.js} +14 -15
  25. package/dist/lib/cubing/chunks/{puzzles-dynamic-3x3x3-FYXD7SIU.js → puzzles-dynamic-3x3x3-CMH2HHH5.js} +0 -1
  26. package/dist/lib/cubing/chunks/{puzzles-dynamic-4x4x4-AIGABOAR.js → puzzles-dynamic-4x4x4-UFAQS3QG.js} +0 -1
  27. package/dist/lib/cubing/chunks/{puzzles-dynamic-megaminx-2LVHIDL4.js → puzzles-dynamic-megaminx-EFR4GQFA.js} +0 -1
  28. package/dist/lib/cubing/chunks/{puzzles-dynamic-side-events-653A7JCM.js → puzzles-dynamic-side-events-KF3PEOJN.js} +0 -1
  29. package/dist/lib/cubing/chunks/{puzzles-dynamic-unofficial-2CY6GVZ4.js → puzzles-dynamic-unofficial-6BF3EWTI.js} +0 -1
  30. package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-KPAPKICT.js → search-dynamic-sgs-side-events-5GQDHSJR.js} +5 -6
  31. package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-WJZ2CWX5.js → search-dynamic-sgs-unofficial-YM23KVCN.js} +90 -78
  32. package/dist/lib/cubing/chunks/{search-dynamic-solve-3x3x3-B2L4IN34.js → search-dynamic-solve-3x3x3-6UMZH4WB.js} +3 -6
  33. package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-OLWUV6G6.js → search-dynamic-solve-4x4x4-KNSBAM7Q.js} +14 -17
  34. package/dist/lib/cubing/chunks/{search-dynamic-solve-fto-WLOW7LAM.js → search-dynamic-solve-fto-CSXJYISF.js} +200 -90
  35. package/dist/lib/cubing/chunks/{search-dynamic-solve-kilominx-KKUOVW5Y.js → search-dynamic-solve-kilominx-EHAUQJXS.js} +105 -113
  36. package/dist/lib/cubing/chunks/{search-dynamic-solve-master_tetraminx-GIS7T5B7.js → search-dynamic-solve-master_tetraminx-ZQ25QK7E.js} +99 -100
  37. package/dist/lib/cubing/chunks/search-worker-entry.js +2 -3
  38. package/dist/lib/cubing/chunks/{twips-J732JDZJ.js → twips-IMF5RNH5.js} +3 -4
  39. package/dist/lib/cubing/chunks/{twips_wasm_bg-TJNYGA2C-AP2O4LGG.js → twips_wasm_bg-TJNYGA2C-4JIZWC6Q.js} +1 -2
  40. package/dist/lib/cubing/chunks/{twisty-dynamic-3d-SFR3X64P.js → twisty-dynamic-3d-HSYJR5CM.js} +5 -6
  41. package/dist/lib/cubing/{index-Bfranlt_.d.ts → index-lAUL_nRN.d.ts} +1 -1
  42. package/dist/lib/cubing/{index-B2nOJwLe.d.ts → index-nWspzjVK.d.ts} +43 -39
  43. package/dist/lib/cubing/kpuzzle/index.d.ts +1 -1
  44. package/dist/lib/cubing/kpuzzle/index.js +2 -3
  45. package/dist/lib/cubing/notation/index.d.ts +1 -1
  46. package/dist/lib/cubing/notation/index.js +4 -5
  47. package/dist/lib/cubing/{outside-BdYfq43N.d.ts → outside-CD19aDjE.d.ts} +1 -1
  48. package/dist/lib/cubing/protocol/index.d.ts +1 -1
  49. package/dist/lib/cubing/protocol/index.js +4 -5
  50. package/dist/lib/cubing/puzzle-geometry/index.d.ts +1 -1
  51. package/dist/lib/cubing/puzzle-geometry/index.js +375 -375
  52. package/dist/lib/cubing/puzzles/index.d.ts +1 -1
  53. package/dist/lib/cubing/puzzles/index.js +4 -5
  54. package/dist/lib/cubing/scramble/index.d.ts +1 -1
  55. package/dist/lib/cubing/scramble/index.js +8 -9
  56. package/dist/lib/cubing/search/index.d.ts +1 -1
  57. package/dist/lib/cubing/search/index.js +7 -8
  58. package/dist/lib/cubing/stream/index.d.ts +1 -1
  59. package/dist/lib/cubing/stream/index.js +1 -2
  60. package/dist/lib/cubing/twisty/index.d.ts +1 -1
  61. package/dist/lib/cubing/twisty/index.js +6 -7
  62. package/package.json +1 -1
  63. package/dist/lib/cubing/alg/index.js.map +0 -7
  64. package/dist/lib/cubing/bluetooth/index.js.map +0 -7
  65. package/dist/lib/cubing/chunks/big-puzzle-orientation-KCHMEEM7.js.map +0 -7
  66. package/dist/lib/cubing/chunks/chunk-4KLW7Y6J.js.map +0 -7
  67. package/dist/lib/cubing/chunks/chunk-6RZGNWLS.js.map +0 -7
  68. package/dist/lib/cubing/chunks/chunk-7GUL3OBQ.js.map +0 -7
  69. package/dist/lib/cubing/chunks/chunk-CAQY24I5.js.map +0 -7
  70. package/dist/lib/cubing/chunks/chunk-CFZLXDM6.js.map +0 -7
  71. package/dist/lib/cubing/chunks/chunk-GHFBZYSV.js.map +0 -7
  72. package/dist/lib/cubing/chunks/chunk-JL5REGXZ.js.map +0 -7
  73. package/dist/lib/cubing/chunks/chunk-K237RIQJ.js.map +0 -7
  74. package/dist/lib/cubing/chunks/chunk-L6OQRJJX.js.map +0 -7
  75. package/dist/lib/cubing/chunks/chunk-NAPITA3L.js +0 -1
  76. package/dist/lib/cubing/chunks/chunk-NAPITA3L.js.map +0 -7
  77. package/dist/lib/cubing/chunks/chunk-XAOXLHYH.js.map +0 -7
  78. package/dist/lib/cubing/chunks/chunk-ZCZVKGKB.js.map +0 -7
  79. package/dist/lib/cubing/chunks/chunk-ZV7PYR2S.js.map +0 -7
  80. package/dist/lib/cubing/chunks/inside-BAQGCKLY.js.map +0 -7
  81. package/dist/lib/cubing/chunks/puzzles-dynamic-3x3x3-FYXD7SIU.js.map +0 -7
  82. package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js.map +0 -7
  83. package/dist/lib/cubing/chunks/puzzles-dynamic-megaminx-2LVHIDL4.js.map +0 -7
  84. package/dist/lib/cubing/chunks/puzzles-dynamic-side-events-653A7JCM.js.map +0 -7
  85. package/dist/lib/cubing/chunks/puzzles-dynamic-unofficial-2CY6GVZ4.js.map +0 -7
  86. package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-KPAPKICT.js.map +0 -7
  87. package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-WJZ2CWX5.js.map +0 -7
  88. package/dist/lib/cubing/chunks/search-dynamic-solve-3x3x3-B2L4IN34.js.map +0 -7
  89. package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-OLWUV6G6.js.map +0 -7
  90. package/dist/lib/cubing/chunks/search-dynamic-solve-fto-WLOW7LAM.js.map +0 -7
  91. package/dist/lib/cubing/chunks/search-dynamic-solve-kilominx-KKUOVW5Y.js.map +0 -7
  92. package/dist/lib/cubing/chunks/search-dynamic-solve-master_tetraminx-GIS7T5B7.js.map +0 -7
  93. package/dist/lib/cubing/chunks/search-worker-entry.js.map +0 -7
  94. package/dist/lib/cubing/chunks/twips-J732JDZJ.js.map +0 -7
  95. package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-AP2O4LGG.js.map +0 -7
  96. package/dist/lib/cubing/chunks/twisty-dynamic-3d-SFR3X64P.js.map +0 -7
  97. package/dist/lib/cubing/kpuzzle/index.js.map +0 -7
  98. package/dist/lib/cubing/notation/index.js.map +0 -7
  99. package/dist/lib/cubing/protocol/index.js.map +0 -7
  100. package/dist/lib/cubing/puzzle-geometry/index.js.map +0 -7
  101. package/dist/lib/cubing/puzzles/index.js.map +0 -7
  102. package/dist/lib/cubing/scramble/index.js.map +0 -7
  103. package/dist/lib/cubing/search/index.js.map +0 -7
  104. package/dist/lib/cubing/stream/index.js.map +0 -7
  105. package/dist/lib/cubing/twisty/index.js.map +0 -7
  106. /package/dist/bin/chunks/{chunk-VTD7RU7S.js.map → chunk-HS7R54XN.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cubing/puzzles/events.ts", "../../../../src/cubing/puzzles/implementations/2x2x2/index.ts", "../../../../src/cubing/puzzles/implementations/4x4x4/cube4x4x4And5x5x5KeyMapping.ts", "../../../../src/cubing/puzzles/implementations/4x4x4/index.ts", "../../../../src/cubing/puzzles/implementations/5x5x5/index.ts", "../../../../src/cubing/puzzles/stickerings/fto-stickerings.ts", "../../../../src/cubing/puzzles/implementations/fto/ftoKeyMapping.ts", "../../../../src/cubing/puzzles/implementations/baby_fto/index.ts", "../../../../src/cubing/puzzles/implementations/clock/index.ts", "../../../../src/cubing/puzzles/implementations/fto/index.ts", "../../../../src/cubing/puzzles/implementations/kilominx/index.ts", "../../../../src/cubing/puzzles/implementations/loopover/index.ts", "../../../../src/cubing/puzzles/stickerings/megaminx-stickerings.ts", "../../../../src/cubing/puzzles/implementations/megaminx/megaminxKeyMapping.ts", "../../../../src/cubing/puzzles/implementations/megaminx/index.ts", "../../../../src/cubing/puzzles/implementations/melindas2x2x2x2/index.ts", "../../../../src/cubing/puzzles/implementations/pyraminx/index.ts", "../../../../src/cubing/puzzles/implementations/redi-cube/index.ts", "../../../../src/cubing/puzzles/implementations/square1/index.ts", "../../../../src/cubing/puzzles/implementations/tri_quad/index.ts", "../../../../src/cubing/puzzles/index.ts"],
4
- "sourcesContent": ["import type { PuzzleID } from \"../twisty/index.ts\";\n\ninterface EventInfo {\n puzzleID: PuzzleID;\n eventName: string;\n /** Whether/how scrambles are implemented in `randomScrambleForEvent(\u2026)` in this version of `cubing.js` */\n scramblesImplemented: null | \"random-state\" | \"random-moves\";\n}\n\nexport const wcaEvents: Record<string, EventInfo> = {\n \"333\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Cube\",\n scramblesImplemented: \"random-state\",\n },\n \"222\": {\n puzzleID: \"2x2x2\",\n eventName: \"2x2x2 Cube\",\n scramblesImplemented: \"random-state\",\n },\n \"444\": {\n puzzleID: \"4x4x4\",\n eventName: \"4x4x4 Cube\",\n scramblesImplemented: \"random-state\",\n },\n \"555\": {\n puzzleID: \"5x5x5\",\n eventName: \"5x5x5 Cube\",\n scramblesImplemented: \"random-moves\",\n },\n \"666\": {\n puzzleID: \"6x6x6\",\n eventName: \"6x6x6 Cube\",\n scramblesImplemented: \"random-moves\",\n },\n \"777\": {\n puzzleID: \"7x7x7\",\n eventName: \"7x7x7 Cube\",\n scramblesImplemented: \"random-moves\",\n },\n \"333bf\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Blindfolded\",\n scramblesImplemented: \"random-state\",\n },\n \"333fm\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Fewest Moves\",\n scramblesImplemented: \"random-state\",\n },\n \"333oh\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 One-Handed\",\n scramblesImplemented: \"random-state\",\n },\n clock: {\n puzzleID: \"clock\",\n eventName: \"Clock\",\n scramblesImplemented: \"random-state\",\n },\n minx: {\n puzzleID: \"megaminx\",\n eventName: \"Megaminx\",\n scramblesImplemented: \"random-moves\",\n },\n pyram: {\n puzzleID: \"pyraminx\",\n eventName: \"Pyraminx\",\n scramblesImplemented: \"random-state\",\n },\n skewb: {\n puzzleID: \"skewb\",\n eventName: \"Skewb\",\n scramblesImplemented: \"random-state\",\n },\n sq1: {\n puzzleID: \"square1\",\n eventName: \"Square-1\",\n scramblesImplemented: \"random-state\",\n },\n \"444bf\": {\n puzzleID: \"4x4x4\",\n eventName: \"4x4x4 Blindfolded\",\n scramblesImplemented: \"random-state\",\n },\n \"555bf\": {\n puzzleID: \"5x5x5\",\n eventName: \"5x5x5 Blindfolded\",\n scramblesImplemented: \"random-moves\",\n },\n \"333mbf\": {\n puzzleID: \"3x3x3\",\n eventName: \"3x3x3 Multi-Blind\",\n scramblesImplemented: \"random-state\",\n },\n};\n\n/** @category Event Info */\nexport function wcaEventInfo(event: string): EventInfo | null {\n return wcaEvents[event] ?? null;\n}\n\nexport const twizzleEvents: Record<string, EventInfo> = {\n ...wcaEvents,\n fto: {\n puzzleID: \"fto\",\n eventName: \"Face-Turning Octahedron\",\n scramblesImplemented: \"random-state\",\n },\n master_tetraminx: {\n puzzleID: \"master_tetraminx\",\n eventName: \"Master Tetraminx\",\n scramblesImplemented: \"random-state\",\n },\n kilominx: {\n puzzleID: \"kilominx\",\n eventName: \"Kilominx\",\n scramblesImplemented: \"random-state\",\n },\n redi_cube: {\n puzzleID: \"redi_cube\",\n eventName: \"Redi Cube\",\n scramblesImplemented: \"random-state\",\n },\n baby_fto: {\n puzzleID: \"baby_fto\",\n eventName: \"Baby FTO\",\n scramblesImplemented: \"random-state\",\n },\n loopover: {\n puzzleID: \"loopover\",\n eventName: \"Loopover\",\n scramblesImplemented: null,\n },\n};\n\n/** @category Event Info */\nexport function eventInfo(event: string): EventInfo | null {\n return twizzleEvents[event] ?? null;\n}\n", "import { KPuzzle } from \"../../../kpuzzle/index.ts\";\nimport { experimentalIs2x2x2Solved } from \"../../../puzzles/cubing-private/index.ts\";\nimport type { ExperimentalStickering } from \"../../../twisty/index.ts\";\nimport { asyncGetPuzzleGeometry } from \"../../async/async-pg3d.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\nimport {\n cubeLikeStickeringList,\n cubeLikeStickeringMask,\n} from \"../../stickerings/cube-like-stickerings.ts\";\nimport type { StickeringMask } from \"../../stickerings/mask.ts\";\nimport { cubeMirrorTransforms } from \"../3x3x3/index.ts\";\n\n/** @category Specific Puzzles */\nexport const cube2x2x2: PuzzleLoader = {\n id: \"2x2x2\",\n fullName: \"2\u00D72\u00D72 Cube\",\n kpuzzle: getCached(async () => {\n const kpuzzle = new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\"))\n .cube2x2x2JSON,\n );\n kpuzzle.definition.experimentalIsPatternSolved = experimentalIs2x2x2Solved;\n return kpuzzle;\n }),\n svg: async () =>\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\"))\n .cube2x2x2SVG,\n llSVG: getCached(\n async () =>\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\"))\n .cube2x2x2LLSVG,\n ),\n pg: getCached(async () => {\n return asyncGetPuzzleGeometry(\"2x2x2\");\n }),\n stickeringMask: (\n stickering: ExperimentalStickering,\n ): Promise<StickeringMask> => cubeLikeStickeringMask(cube2x2x2, stickering),\n stickerings: () =>\n cubeLikeStickeringList(\"2x2x2\", { use3x3x3Fallbacks: true }),\n algTransformData: cubeMirrorTransforms,\n};\n", "import { type AlgLeaf, Move } from \"../../../alg/index.ts\";\nimport { cube3x3x3KeyMapping } from \"../3x3x3/cube3x3x3KeyMapping.ts\";\n\n// See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code\n\n// TODO: place this definition in a more shared location.\nexport const cube4x4x4And5x5x5KeyMapping: { [key: number | string]: AlgLeaf } =\n {\n ...cube3x3x3KeyMapping,\n KeyZ: new Move(\"m'\"),\n KeyB: new Move(\"m\"),\n Period: new Move(\"m'\"),\n };\n", "import { CubePGPuzzleLoader, PGPuzzleLoader } from \"../../async/async-pg3d.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport { bigCubePuzzleOrientation } from \"../../cubing-private/index.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\nimport { cube4x4x4And5x5x5KeyMapping } from \"./cube4x4x4And5x5x5KeyMapping.ts\";\n\nconst cube4x4x4: PuzzleLoader = new CubePGPuzzleLoader({\n id: \"4x4x4\",\n fullName: \"4\u00D74\u00D74 Cube\",\n inventedBy: [\"Peter Sebest\u00E9ny\"],\n inventionYear: 1981,\n});\n\ncube4x4x4.llSVG = getCached(async () => {\n return (await import(\"../dynamic/4x4x4/puzzles-dynamic-4x4x4.ts\"))\n .cube4x4x4LLSVG;\n});\ncube4x4x4.keyMapping = async () => cube4x4x4And5x5x5KeyMapping; // TODO: async loading\n\ncube4x4x4.kpuzzle = getCached(async () => {\n const kpuzzle = await PGPuzzleLoader.prototype.kpuzzle.call(cube4x4x4);\n // TODO: pass up an option to do this instead.\n kpuzzle.definition.defaultPattern[\"CENTERS\"].pieces = [\n // U\n 0, 0, 0, 0,\n // L\n 4, 4, 4, 4,\n // F\n 8, 8, 8, 8,\n // R\n 12, 12, 12, 12,\n // B\n 16, 16, 16, 16,\n // D\n 20, 20, 20, 20,\n ];\n const { experimentalIsBigCubeSolved } = await bigCubePuzzleOrientation();\n kpuzzle.definition.experimentalIsPatternSolved = experimentalIsBigCubeSolved;\n return kpuzzle;\n});\n\nexport { cube4x4x4 };\n", "import { CubePGPuzzleLoader, PGPuzzleLoader } from \"../../async/async-pg3d.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport { bigCubePuzzleOrientation } from \"../../cubing-private/index.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\nimport { cube4x4x4And5x5x5KeyMapping } from \"../4x4x4/cube4x4x4And5x5x5KeyMapping.ts\";\n\nconst cube5x5x5: PuzzleLoader = new CubePGPuzzleLoader({\n id: \"5x5x5\",\n fullName: \"5\u00D75\u00D75 Cube\",\n inventedBy: [\"Udo Krell\"],\n inventionYear: 1981,\n});\n\ncube5x5x5.keyMapping = async () => cube4x4x4And5x5x5KeyMapping; // TODO: async loading\n\ncube5x5x5.kpuzzle = getCached(async () => {\n const kpuzzle = await PGPuzzleLoader.prototype.kpuzzle.call(cube5x5x5);\n\n const speffzDistinguishableCenters = [\n // U\n 0, 0, 0, 0,\n // L\n 4, 4, 4, 4,\n // F\n 8, 8, 8, 8,\n // R\n 12, 12, 12, 12,\n // B\n 16, 16, 16, 16,\n // D\n 20, 20, 20, 20,\n ];\n // TODO: pass up an option to do this instead.\n kpuzzle.definition.defaultPattern[\"CENTERS\"].pieces =\n speffzDistinguishableCenters;\n kpuzzle.definition.defaultPattern[\"CENTERS2\"].pieces =\n speffzDistinguishableCenters;\n kpuzzle.definition.defaultPattern[\"CENTERS3\"].orientationMod = new Array(\n 6,\n ).fill(1);\n const { experimentalIsBigCubeSolved } = await bigCubePuzzleOrientation();\n kpuzzle.definition.experimentalIsPatternSolved = experimentalIsBigCubeSolved;\n return kpuzzle;\n});\n\nexport { cube5x5x5 };\n", "import type { ExperimentalStickering } from \"../../twisty/index.ts\";\nimport type { PuzzleLoader } from \"../PuzzleLoader.ts\";\nimport {\n type PieceSet,\n PieceStickering,\n PuzzleStickering,\n StickeringManager,\n type StickeringMask,\n} from \"./mask.ts\";\n\nexport async function ftoStickering(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<StickeringMask> {\n const kpuzzle = await puzzleLoader.kpuzzle();\n const puzzleStickering = new PuzzleStickering(kpuzzle);\n const m = new StickeringManager(kpuzzle);\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 m.and([m.move(\"BL\"), 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 }\n case \"experimental-fto-f2t\": {\n puzzleStickering.set(\n m.not(experimentalFTO_F2T()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_FC(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-sc\": {\n puzzleStickering.set(\n m.not(experimentalFTO_SC()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_F2T(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-l2c\": {\n puzzleStickering.set(\n m.not(experimentalFTO_L2C()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_SC(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-lbt\": {\n puzzleStickering.set(\n m.not(experimentalFTO_LBT()),\n PieceStickering.Ignored,\n );\n puzzleStickering.set(experimentalFTO_L2C(), PieceStickering.Dim);\n break;\n }\n case \"experimental-fto-l3t\": {\n puzzleStickering.set(experimentalFTO_LBT(), PieceStickering.Dim);\n break;\n }\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.toStickeringMask();\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 \"experimental-fto-l3t\",\n ];\n}\n", "import { type AlgLeaf, Move, Pause } from \"../../../alg/index.ts\";\n\nexport const ftoKeyMapping: { [key: number | string]: AlgLeaf } = {\n KeyI: new Move(\"R\"),\n KeyK: new Move(\"R'\"),\n KeyW: new Move(\"B\"),\n KeyO: new Move(\"B'\"),\n KeyS: new Move(\"D\"),\n KeyL: new Move(\"D'\"),\n KeyD: new Move(\"L\"),\n KeyE: new Move(\"L'\"),\n KeyJ: new Move(\"U\"),\n KeyF: new Move(\"U'\"),\n KeyH: new Move(\"F\"),\n KeyG: new Move(\"F'\"),\n\n KeyN: new Move(\"Rv'\"),\n KeyC: new Move(\"l\"),\n KeyR: new Move(\"l'\"),\n KeyU: new Move(\"r\"),\n KeyM: new Move(\"r'\"),\n\n KeyX: new Move(\"d\"),\n Comma: new Move(\"d'\"),\n\n KeyT: new Move(\"Lv'\"),\n KeyY: new Move(\"Rv\"),\n KeyV: new Move(\"Lv\"),\n Semicolon: new Move(\"Uv\"),\n KeyA: new Move(\"Uv'\"),\n KeyP: new Move(\"BR'\"),\n KeyQ: new Move(\"BL\"),\n\n KeyZ: new Move(\"BL'\"),\n KeyB: new Move(\"T\"),\n Period: new Move(\"BR\"),\n\n Backquote: new Pause(),\n};\n", "import type { ExperimentalStickering } from \"../../../twisty/index.ts\";\nimport { PGPuzzleLoader } from \"../../async/async-pg3d.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport { ftoStickering } from \"../../stickerings/fto-stickerings.ts\";\nimport type { StickeringMask } from \"../../stickerings/mask.ts\";\nimport { ftoKeyMapping } from \"../fto/ftoKeyMapping.ts\";\n\nclass BabyFTOPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n pgID: \"skewb diamond\",\n id: \"baby_fto\",\n fullName: \"Baby FTO\",\n inventedBy: [\"Uwe M\u00E8ffert\"],\n // inventionYear: TODO\n setOrientationModTo1ForPiecesOfOrbits: [\"CENTERS\"],\n });\n }\n stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return ftoStickering(this, stickering);\n }\n override svg = getCached(async () => {\n return (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial.ts\"))\n .babyFTOSVG;\n });\n keyMapping = async () => ftoKeyMapping;\n}\n\nexport const baby_fto = new BabyFTOPuzzleLoader();\n", "import { KPuzzle } from \"../../../kpuzzle/index.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\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 kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\"))\n .clockJSON,\n ),\n ),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\")\n ).clockSVG;\n }),\n};\n", "import type { ExperimentalStickering } from \"../../../twisty/index.ts\";\nimport { PGPuzzleLoader } from \"../../async/async-pg3d.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { AlgTransformData } from \"../../cubing-private/index.ts\";\nimport {\n ftoStickering,\n ftoStickerings,\n} from \"../../stickerings/fto-stickerings.ts\";\nimport type { StickeringMask } from \"../../stickerings/mask.ts\";\nimport { ftoKeyMapping } from \"./ftoKeyMapping.ts\";\n\nclass FTOPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n pgID: \"FTO\",\n id: \"fto\",\n fullName: \"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 stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return ftoStickering(this, stickering);\n }\n stickerings = ftoStickerings;\n override svg = getCached(async () => {\n return (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial.ts\"))\n .ftoSVG;\n });\n keyMapping = async () => ftoKeyMapping;\n algTransformData: AlgTransformData = {\n \"\u2194 Mirror (x)\": {\n replaceMovesByFamily: {\n L: \"R\",\n R: \"L\",\n l: \"r\",\n r: \"l\",\n Lw: \"Rw\",\n Rw: \"Lw\",\n Lv: \"Rv\",\n Rv: \"Lv\",\n BL: \"BR\",\n BR: \"BL\",\n bl: \"br\",\n br: \"bl\",\n BLw: \"BRw\",\n BRw: \"BLw\",\n BLv: \"BRv\",\n BRv: \"BLv\",\n },\n invertExceptByFamily: new Set([\"x\"]),\n },\n };\n}\n\nexport const fto = new FTOPuzzleLoader();\n", "import { getCached } from \"../../async/lazy-cached.ts\";\nimport {\n asyncGetKPuzzleByDesc,\n descAsyncGetPuzzleGeometry,\n} from \"../../customPGPuzzleLoader.ts\";\nimport type { PuzzleLoader } from \"../../index.ts\";\n\nconst KILOMINX_PUZZLE_DESCRIPTION = \"d f 0.56\";\n\n// TODO: Make this consistent with Megaminx corners\nexport const kilominx: PuzzleLoader = {\n id: \"kilominx\",\n fullName: \"Kilominx\",\n kpuzzle: getCached(() =>\n asyncGetKPuzzleByDesc(KILOMINX_PUZZLE_DESCRIPTION, {\n includeCenterOrbits: false,\n includeEdgeOrbits: false,\n }),\n ),\n pg: () =>\n descAsyncGetPuzzleGeometry(KILOMINX_PUZZLE_DESCRIPTION, {\n includeCenterOrbits: false,\n includeEdgeOrbits: false,\n }),\n svg: getCached(async () => {\n return (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial.ts\"))\n .kilominxSVG;\n }),\n};\n", "import { KPuzzle } from \"../../../kpuzzle/index.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\n\nexport const loopover: PuzzleLoader = {\n id: \"loopover\",\n fullName: \"Loopover\",\n inventedBy: [\"Cary Huang\"],\n inventionYear: 2018,\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial.ts\"))\n .loopoverJSON,\n ),\n ),\n svg: async () => {\n return (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial.ts\"))\n .loopoverSVG;\n },\n};\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\nimport type { ExperimentalStickering } from \"../../twisty/index.ts\";\nimport type { PuzzleLoader } from \"../PuzzleLoader.ts\";\nimport {\n cubeLikeStickeringList,\n cubeLikeStickeringMask,\n} from \"./cube-like-stickerings.ts\";\nimport type { StickeringMask } from \"./mask.ts\";\n\n// TODO: cache calculations?\nexport async function megaminxStickeringMask(\n puzzleLoader: PuzzleLoader,\n stickering: ExperimentalStickering,\n): Promise<StickeringMask> {\n // TODO: optimize lookup instead of looking through a list\n if ((await megaminxStickerings()).includes(stickering)) {\n return cubeLikeStickeringMask(puzzleLoader, stickering);\n }\n console.warn(\n `Unsupported stickering for ${puzzleLoader.id}: ${stickering}. Setting all pieces to dim.`,\n );\n return cubeLikeStickeringMask(puzzleLoader, \"full\");\n}\n\nconst megaminxStickeringListPromise: Promise<string[]> = new LazyPromise(() =>\n cubeLikeStickeringList(\"megaminx\"),\n);\nexport function megaminxStickerings(): Promise<string[]> {\n return megaminxStickeringListPromise;\n}\n", "import { type AlgLeaf, Move, Pause } from \"../../../alg/index.ts\";\n\n// See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code\n\nexport const megaminxKeyMapping: { [key: number | string]: AlgLeaf } = {\n KeyI: new Move(\"R\"),\n KeyK: new Move(\"R'\"),\n KeyW: new Move(\"B\"),\n KeyO: new Move(\"B'\"),\n KeyS: new Move(\"FR\"),\n KeyL: new Move(\"FR'\"),\n KeyD: new Move(\"L\"),\n KeyE: new Move(\"L'\"),\n KeyJ: new Move(\"U\"),\n KeyF: new Move(\"U'\"),\n KeyH: new Move(\"F\"),\n KeyG: new Move(\"F'\"),\n\n KeyC: new Move(\"Lw\"),\n KeyR: new Move(\"Lw'\"),\n KeyU: new Move(\"Rw\"),\n KeyM: new Move(\"Rw'\"),\n\n KeyX: new Move(\"d\"),\n Comma: new Move(\"d'\"),\n\n KeyT: new Move(\"Rv\"),\n KeyY: new Move(\"Rv\"),\n KeyV: new Move(\"Rv'\"),\n KeyN: new Move(\"Rv'\"),\n Semicolon: new Move(\"y\"),\n KeyA: new Move(\"y'\"),\n KeyP: new Move(\"z\"),\n KeyQ: new Move(\"z'\"),\n\n KeyZ: new Move(\"2L'\"),\n KeyB: new Move(\"2R\"),\n Period: new Move(\"2R'\"),\n\n Backquote: new Pause(),\n};\n", "import type { ExperimentalStickering } from \"../../../twisty/index.ts\";\nimport { PGPuzzleLoader } from \"../../async/async-pg3d.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { StickeringMask } from \"../../stickerings/mask.ts\";\nimport {\n megaminxStickeringMask,\n megaminxStickerings,\n} from \"../../stickerings/megaminx-stickerings.ts\";\nimport { megaminxKeyMapping } from \"./megaminxKeyMapping.ts\";\n\nclass MegaminxPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n id: \"megaminx\",\n fullName: \"Megaminx\",\n // Too many simultaneous inventors to name.\n inventionYear: 1981, // Earliest date from https://www.jaapsch.net/puzzles/megaminx.htm\n });\n }\n stickeringMask(stickering: ExperimentalStickering): Promise<StickeringMask> {\n return megaminxStickeringMask(this, stickering);\n }\n stickerings = megaminxStickerings;\n\n llSVG = getCached(async () => {\n return (await import(\"../dynamic/megaminx/puzzles-dynamic-megaminx.ts\"))\n .megaminxLLSVG;\n });\n\n keyMapping = async () => megaminxKeyMapping; // TODO: async loading\n}\n\nexport const megaminx = new MegaminxPuzzleLoader();\n", "import { KPuzzle } from \"../../../kpuzzle/index.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\n\nexport const melindas2x2x2x2: PuzzleLoader = {\n id: \"melindas2x2x2x2\",\n fullName: \"Melinda's 2\u00D72\u00D72\u00D72\",\n inventedBy: [\"Melinda Green\"],\n // inventionYear: 20__, // TODO\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\"))\n .melindas2x2x2x2OrbitJSON,\n ),\n ),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\")\n ).melindas2x2x2x2OrbitSVG;\n }),\n};\n", "import { PGPuzzleLoader } from \"../../async/async-pg3d.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { AlgTransformData } from \"../../cubing-private/index.ts\";\n\nclass PyraminxPuzzleLoader extends PGPuzzleLoader {\n constructor() {\n super({\n id: \"pyraminx\",\n fullName: \"Pyraminx\",\n inventedBy: [\"Uwe Meffert\"],\n });\n }\n override svg = getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\")\n ).pyraminxSVG;\n });\n algTransformData: AlgTransformData = {\n \"\u2194 Mirror (x)\": {\n replaceMovesByFamily: {\n L: \"R\",\n R: \"L\",\n l: \"r\",\n r: \"l\",\n Lw: \"Rw\",\n Rw: \"Lw\",\n Lv: \"Rv\",\n Rv: \"Lv\",\n },\n invertExceptByFamily: new Set([]),\n },\n };\n}\n\nexport const pyraminx = new PyraminxPuzzleLoader();\n", "import { KPuzzle } from \"../../../kpuzzle/index.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\n\nexport const rediCube: PuzzleLoader = {\n id: \"redi_cube\",\n fullName: \"Redi Cube\",\n // Announced 2009-07-21: https://www.youtube.com/watch?v=cjfMzA1u3vM\n // https://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=1520\n inventedBy: [\"Oskar van Deventer\"],\n inventionYear: 2009,\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial.ts\"))\n .rediCubeJSON,\n ),\n ),\n svg: async () => {\n return (await import(\"../dynamic/unofficial/puzzles-dynamic-unofficial.ts\"))\n .rediCubeSVG;\n },\n};\n", "import { KPuzzle } from \"../../../kpuzzle/index.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\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 kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\"))\n .sq1HyperOrbitJSON,\n ),\n ),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\")\n ).sq1HyperOrbitSVG;\n }),\n};\n", "import { KPuzzle } from \"../../../kpuzzle/index.ts\";\nimport { getCached } from \"../../async/lazy-cached.ts\";\nimport type { PuzzleLoader } from \"../../PuzzleLoader.ts\";\n\nexport const tri_quad: PuzzleLoader = {\n id: \"tri_quad\",\n fullName: \"TriQuad\",\n inventedBy: [\"Bram Cohen\", \"Carl Hoff\"],\n inventionYear: 2018, // https://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=6809\n kpuzzle: getCached(\n async () =>\n new KPuzzle(\n (await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\"))\n .triQuadJSON,\n ),\n ),\n svg: getCached(async () => {\n return (\n await import(\"../dynamic/side-events/puzzles-dynamic-side-events.ts\")\n ).triQuadSVG;\n }),\n};\n", "export { eventInfo, twizzleEvents, wcaEventInfo, wcaEvents } from \"./events.ts\";\nexport type { PuzzleLoader };\nexport { cube2x2x2, cube3x3x3 };\n\nimport { CubePGPuzzleLoader, PGPuzzleLoader } from \"./async/async-pg3d.ts\";\nimport { cube2x2x2 } from \"./implementations/2x2x2/index.ts\";\nimport { cube3x3x3 } from \"./implementations/3x3x3/index.ts\";\nimport { cube4x4x4 } from \"./implementations/4x4x4/index.ts\";\nimport { cube5x5x5 } from \"./implementations/5x5x5/index.ts\";\nimport { baby_fto } from \"./implementations/baby_fto/index.ts\";\nimport { clock } from \"./implementations/clock/index.ts\";\nimport { fto } from \"./implementations/fto/index.ts\";\nimport { kilominx } from \"./implementations/kilominx/index.ts\";\nimport { loopover } from \"./implementations/loopover/index.ts\";\nimport { megaminx } from \"./implementations/megaminx/index.ts\";\nimport { melindas2x2x2x2 } from \"./implementations/melindas2x2x2x2/index.ts\";\nimport { pyraminx } from \"./implementations/pyraminx/index.ts\";\nimport { rediCube } from \"./implementations/redi-cube/index.ts\";\nimport { square1 } from \"./implementations/square1/index.ts\";\nimport { tri_quad } from \"./implementations/tri_quad/index.ts\";\nimport type { PuzzleLoader } from \"./PuzzleLoader.ts\";\n\n/** @category All Puzzles */\nexport const puzzles: Record<string, PuzzleLoader> = {\n /******** Start of WCA Puzzles *******/\n \"3x3x3\": cube3x3x3,\n \"2x2x2\": cube2x2x2,\n \"4x4x4\": cube4x4x4,\n \"5x5x5\": cube5x5x5,\n \"6x6x6\": new CubePGPuzzleLoader({ id: \"6x6x6\", fullName: \"6\u00D76\u00D76 Cube\" }),\n \"7x7x7\": new CubePGPuzzleLoader({ id: \"7x7x7\", fullName: \"7\u00D77\u00D77 Cube\" }),\n \"40x40x40\": new CubePGPuzzleLoader({\n id: \"40x40x40\",\n fullName: \"40\u00D740\u00D740 Cube\",\n }),\n // 3x3x3 Blindfolded\n // 3x3x3 Fewest Moves\n // 3x3x3 One-Handed\n clock,\n megaminx: megaminx,\n pyraminx,\n skewb: new PGPuzzleLoader({\n id: \"skewb\",\n fullName: \"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,\n gigaminx: new PGPuzzleLoader({\n id: \"gigaminx\",\n fullName: \"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: new PGPuzzleLoader({\n pgID: \"master tetraminx\",\n id: \"master_tetraminx\",\n fullName: \"Master Tetraminx\",\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 kilominx,\n redi_cube: rediCube,\n melindas2x2x2x2,\n loopover,\n tri_quad,\n baby_fto,\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,IAAM,YAAuC;AAAA,EAClD,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,KAAK;AAAA,IACH,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AACF;AAGO,SAAS,aAAa,OAAiC;AAC5D,SAAO,UAAU,KAAK,KAAK;AAC7B;AAEO,IAAM,gBAA2C;AAAA,EACtD,GAAG;AAAA,EACH,KAAK;AAAA,IACH,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,kBAAkB;AAAA,IAChB,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB;AACF;AAGO,SAAS,UAAU,OAAiC;AACzD,SAAO,cAAc,KAAK,KAAK;AACjC;;;AC7HO,IAAM,YAA0B;AAAA,EACrC,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,SAAS,UAAU,YAAY;AAC7B,UAAM,UAAU,IAAI;AAAA,OACjB,MAAM,OAAO,2CAAuD,GAClE;AAAA,IACL;AACA,YAAQ,WAAW,8BAA8B;AACjD,WAAO;AAAA,EACT,CAAC;AAAA,EACD,KAAK,aACF,MAAM,OAAO,2CAAuD,GAClE;AAAA,EACL,OAAO;AAAA,IACL,aACG,MAAM,OAAO,2CAAuD,GAClE;AAAA,EACP;AAAA,EACA,IAAI,UAAU,YAAY;AACxB,WAAO,uBAAuB,OAAO;AAAA,EACvC,CAAC;AAAA,EACD,gBAAgB,CACd,eAC4B,uBAAuB,WAAW,UAAU;AAAA,EAC1E,aAAa,MACX,uBAAuB,SAAS,EAAE,mBAAmB,KAAK,CAAC;AAAA,EAC7D,kBAAkB;AACpB;;;ACpCO,IAAM,8BACX;AAAA,EACE,GAAG;AAAA,EACH,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,QAAQ,IAAI,KAAK,IAAI;AACvB;;;ACNF,IAAM,YAA0B,IAAI,mBAAmB;AAAA,EACrD,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,YAAY,CAAC,oBAAiB;AAAA,EAC9B,eAAe;AACjB,CAAC;AAED,UAAU,QAAQ,UAAU,YAAY;AACtC,UAAQ,MAAM,OAAO,qCAA2C,GAC7D;AACL,CAAC;AACD,UAAU,aAAa,YAAY;AAEnC,UAAU,UAAU,UAAU,YAAY;AACxC,QAAM,UAAU,MAAM,eAAe,UAAU,QAAQ,KAAK,SAAS;AAErE,UAAQ,WAAW,eAAe,SAAS,EAAE,SAAS;AAAA;AAAA,IAEpD;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA;AAAA,IAET;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA;AAAA,IAET;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA;AAAA,IAET;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA;AAAA,IAEZ;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA;AAAA,IAEZ;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,EACd;AACA,QAAM,EAAE,4BAA4B,IAAI,MAAM,yBAAyB;AACvE,UAAQ,WAAW,8BAA8B;AACjD,SAAO;AACT,CAAC;;;ACjCD,IAAM,YAA0B,IAAI,mBAAmB;AAAA,EACrD,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,YAAY,CAAC,WAAW;AAAA,EACxB,eAAe;AACjB,CAAC;AAED,UAAU,aAAa,YAAY;AAEnC,UAAU,UAAU,UAAU,YAAY;AACxC,QAAM,UAAU,MAAM,eAAe,UAAU,QAAQ,KAAK,SAAS;AAErE,QAAM,+BAA+B;AAAA;AAAA,IAEnC;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA;AAAA,IAET;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA;AAAA,IAET;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA;AAAA,IAET;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA;AAAA,IAEZ;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA;AAAA,IAEZ;AAAA,IAAI;AAAA,IAAI;AAAA,IAAI;AAAA,EACd;AAEA,UAAQ,WAAW,eAAe,SAAS,EAAE,SAC3C;AACF,UAAQ,WAAW,eAAe,UAAU,EAAE,SAC5C;AACF,UAAQ,WAAW,eAAe,UAAU,EAAE,iBAAiB,IAAI;AAAA,IACjE;AAAA,EACF,EAAE,KAAK,CAAC;AACR,QAAM,EAAE,4BAA4B,IAAI,MAAM,yBAAyB;AACvE,UAAQ,WAAW,8BAA8B;AACjD,SAAO;AACT,CAAC;;;ACjCD,eAAsB,cACpB,cACA,YACyB;AACzB,QAAM,UAAU,MAAM,aAAa,QAAQ;AAC3C,QAAM,mBAAmB,IAAI,iBAAiB,OAAO;AACrD,QAAM,IAAI,IAAI,kBAAkB,OAAO;AAEvC,QAAM,qBAAqB,MACzB,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAM,sBAAsB,MAC1B,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AACzC,QAAM,qBAAqB,MACzB,EAAE,GAAG;AAAA,IACH,oBAAoB;AAAA,IACpB,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,EAC9D,CAAC;AACH,QAAM,sBAAsB,MAC1B,EAAE;AAAA,IACA,EAAE,GAAG;AAAA,MACH,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC;AAAA,MAChC,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,MACjC,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,MACjC,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,IACpC,CAAC;AAAA,EACH;AACF,QAAM,sBAAsB,MAC1B,EAAE;AAAA,IACA,EAAE,GAAG;AAAA,MACH,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,MACjC,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,MACjC,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,IACpC,CAAC;AAAA,EACH;AAEF,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH;AAAA,IACF,KAAK,uBAAuB;AAC1B,uBAAiB;AAAA,QACf,EAAE,IAAI,mBAAmB,CAAC;AAAA,QAC1B,gBAAgB;AAAA,MAClB;AACA;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB;AAC3B,uBAAiB;AAAA,QACf,EAAE,IAAI,oBAAoB,CAAC;AAAA,QAC3B,gBAAgB;AAAA,MAClB;AACA,uBAAiB,IAAI,mBAAmB,GAAG,gBAAgB,GAAG;AAC9D;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AAC1B,uBAAiB;AAAA,QACf,EAAE,IAAI,mBAAmB,CAAC;AAAA,QAC1B,gBAAgB;AAAA,MAClB;AACA,uBAAiB,IAAI,oBAAoB,GAAG,gBAAgB,GAAG;AAC/D;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB;AAC3B,uBAAiB;AAAA,QACf,EAAE,IAAI,oBAAoB,CAAC;AAAA,QAC3B,gBAAgB;AAAA,MAClB;AACA,uBAAiB,IAAI,mBAAmB,GAAG,gBAAgB,GAAG;AAC9D;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB;AAC3B,uBAAiB;AAAA,QACf,EAAE,IAAI,oBAAoB,CAAC;AAAA,QAC3B,gBAAgB;AAAA,MAClB;AACA,uBAAiB,IAAI,oBAAoB,GAAG,gBAAgB,GAAG;AAC/D;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB;AAC3B,uBAAiB,IAAI,oBAAoB,GAAG,gBAAgB,GAAG;AAC/D;AAAA,IACF;AAAA,IACA;AACE,cAAQ;AAAA,QACN,8BAA8B,aAAa,EAAE,KAAK,UAAU;AAAA,MAC9D;AACA,uBAAiB,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,GAAG;AAAA,EAChE;AACA,SAAO,iBAAiB,iBAAiB;AAC3C;AAEA,eAAsB,iBAAoD;AACxE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC5GO,IAAM,gBAAqD;AAAA,EAChE,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EAEnB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EAEnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,OAAO,IAAI,KAAK,IAAI;AAAA,EAEpB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,WAAW,IAAI,KAAK,IAAI;AAAA,EACxB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,IAAI;AAAA,EAEnB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,QAAQ,IAAI,KAAK,IAAI;AAAA,EAErB,WAAW,IAAI,MAAM;AACvB;;;AC/BA,IAAM,sBAAN,cAAkC,eAAe;AAAA,EAC/C,cAAc;AACZ,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,YAAY,CAAC,gBAAa;AAAA;AAAA,MAE1B,uCAAuC,CAAC,SAAS;AAAA,IACnD,CAAC;AAAA,EACH;AAAA,EACA,eAAe,YAA6D;AAC1E,WAAO,cAAc,MAAM,UAAU;AAAA,EACvC;AAAA,EACS,MAAM,UAAU,YAAY;AACnC,YAAQ,MAAM,OAAO,0CAAqD,GACvE;AAAA,EACL,CAAC;AAAA,EACD,aAAa,YAAY;AAC3B;AAEO,IAAM,WAAW,IAAI,oBAAoB;;;ACxBzC,IAAM,QAAsB;AAAA,EACjC,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,YAAY,CAAC,wBAAwB,uBAAuB;AAAA,EAC5D,eAAe;AAAA;AAAA,EACf,SAAS;AAAA,IACP,YACE,IAAI;AAAA,OACD,MAAM,OAAO,2CAAuD,GAClE;AAAA,IACL;AAAA,EACJ;AAAA,EACA,KAAK,UAAU,YAAY;AACzB,YACE,MAAM,OAAO,2CAAuD,GACpE;AAAA,EACJ,CAAC;AACH;;;ACVA,IAAM,kBAAN,cAA8B,eAAe;AAAA,EAC3C,cAAc;AACZ,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,YAAY,CAAC,iBAAiB,eAAe;AAAA;AAAA,MAC7C,eAAe;AAAA;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EACA,eAAe,YAA6D;AAC1E,WAAO,cAAc,MAAM,UAAU;AAAA,EACvC;AAAA,EACA,cAAc;AAAA,EACL,MAAM,UAAU,YAAY;AACnC,YAAQ,MAAM,OAAO,0CAAqD,GACvE;AAAA,EACL,CAAC;AAAA,EACD,aAAa,YAAY;AAAA,EACzB,mBAAqC;AAAA,IACnC,qBAAgB;AAAA,MACd,sBAAsB;AAAA,QACpB,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,MACA,sBAAsB,oBAAI,IAAI,CAAC,GAAG,CAAC;AAAA,IACrC;AAAA,EACF;AACF;AAEO,IAAM,MAAM,IAAI,gBAAgB;;;AChDvC,IAAM,8BAA8B;AAG7B,IAAM,WAAyB;AAAA,EACpC,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,SAAS;AAAA,IAAU,MACjB,sBAAsB,6BAA6B;AAAA,MACjD,qBAAqB;AAAA,MACrB,mBAAmB;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EACA,IAAI,MACF,2BAA2B,6BAA6B;AAAA,IACtD,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,EACrB,CAAC;AAAA,EACH,KAAK,UAAU,YAAY;AACzB,YAAQ,MAAM,OAAO,0CAAqD,GACvE;AAAA,EACL,CAAC;AACH;;;ACxBO,IAAM,WAAyB;AAAA,EACpC,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,YAAY,CAAC,YAAY;AAAA,EACzB,eAAe;AAAA,EACf,SAAS;AAAA,IACP,YACE,IAAI;AAAA,OACD,MAAM,OAAO,0CAAqD,GAChE;AAAA,IACL;AAAA,EACJ;AAAA,EACA,KAAK,YAAY;AACf,YAAQ,MAAM,OAAO,0CAAqD,GACvE;AAAA,EACL;AACF;;;ACVA,eAAsB,uBACpB,cACA,YACyB;AAEzB,OAAK,MAAM,oBAAoB,GAAG,SAAS,UAAU,GAAG;AACtD,WAAO,uBAAuB,cAAc,UAAU;AAAA,EACxD;AACA,UAAQ;AAAA,IACN,8BAA8B,aAAa,EAAE,KAAK,UAAU;AAAA,EAC9D;AACA,SAAO,uBAAuB,cAAc,MAAM;AACpD;AAEA,IAAM,gCAAmD,IAAI;AAAA,EAAY,MACvE,uBAAuB,UAAU;AACnC;AACO,SAAS,sBAAyC;AACvD,SAAO;AACT;;;ACzBO,IAAM,qBAA0D;AAAA,EACrE,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EAEnB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,KAAK;AAAA,EAEpB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,OAAO,IAAI,KAAK,IAAI;AAAA,EAEpB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,WAAW,IAAI,KAAK,GAAG;AAAA,EACvB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,MAAM,IAAI,KAAK,GAAG;AAAA,EAClB,MAAM,IAAI,KAAK,IAAI;AAAA,EAEnB,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,MAAM,IAAI,KAAK,IAAI;AAAA,EACnB,QAAQ,IAAI,KAAK,KAAK;AAAA,EAEtB,WAAW,IAAI,MAAM;AACvB;;;AC9BA,IAAM,uBAAN,cAAmC,eAAe;AAAA,EAChD,cAAc;AACZ,UAAM;AAAA,MACJ,IAAI;AAAA,MACJ,UAAU;AAAA;AAAA,MAEV,eAAe;AAAA;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EACA,eAAe,YAA6D;AAC1E,WAAO,uBAAuB,MAAM,UAAU;AAAA,EAChD;AAAA,EACA,cAAc;AAAA,EAEd,QAAQ,UAAU,YAAY;AAC5B,YAAQ,MAAM,OAAO,wCAAiD,GACnE;AAAA,EACL,CAAC;AAAA,EAED,aAAa,YAAY;AAAA;AAC3B;AAEO,IAAM,WAAW,IAAI,qBAAqB;;;AC5B1C,IAAM,kBAAgC;AAAA,EAC3C,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,YAAY,CAAC,eAAe;AAAA;AAAA,EAE5B,SAAS;AAAA,IACP,YACE,IAAI;AAAA,OACD,MAAM,OAAO,2CAAuD,GAClE;AAAA,IACL;AAAA,EACJ;AAAA,EACA,KAAK,UAAU,YAAY;AACzB,YACE,MAAM,OAAO,2CAAuD,GACpE;AAAA,EACJ,CAAC;AACH;;;ACjBA,IAAM,uBAAN,cAAmC,eAAe;AAAA,EAChD,cAAc;AACZ,UAAM;AAAA,MACJ,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,YAAY,CAAC,aAAa;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EACS,MAAM,UAAU,YAAY;AACnC,YACE,MAAM,OAAO,2CAAuD,GACpE;AAAA,EACJ,CAAC;AAAA,EACD,mBAAqC;AAAA,IACnC,qBAAgB;AAAA,MACd,sBAAsB;AAAA,QACpB,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MACA,sBAAsB,oBAAI,IAAI,CAAC,CAAC;AAAA,IAClC;AAAA,EACF;AACF;AAEO,IAAM,WAAW,IAAI,qBAAqB;;;AC9B1C,IAAM,WAAyB;AAAA,EACpC,IAAI;AAAA,EACJ,UAAU;AAAA;AAAA;AAAA,EAGV,YAAY,CAAC,oBAAoB;AAAA,EACjC,eAAe;AAAA,EACf,SAAS;AAAA,IACP,YACE,IAAI;AAAA,OACD,MAAM,OAAO,0CAAqD,GAChE;AAAA,IACL;AAAA,EACJ;AAAA,EACA,KAAK,YAAY;AACf,YAAQ,MAAM,OAAO,0CAAqD,GACvE;AAAA,EACL;AACF;;;AClBO,IAAM,UAAwB;AAAA,EACnC,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,YAAY,CAAC,oBAAe,mBAAgB;AAAA,EAC5C,eAAe;AAAA;AAAA,EACf,SAAS;AAAA,IACP,YACE,IAAI;AAAA,OACD,MAAM,OAAO,2CAAuD,GAClE;AAAA,IACL;AAAA,EACJ;AAAA,EACA,KAAK,UAAU,YAAY;AACzB,YACE,MAAM,OAAO,2CAAuD,GACpE;AAAA,EACJ,CAAC;AACH;;;ACjBO,IAAM,WAAyB;AAAA,EACpC,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,YAAY,CAAC,cAAc,WAAW;AAAA,EACtC,eAAe;AAAA;AAAA,EACf,SAAS;AAAA,IACP,YACE,IAAI;AAAA,OACD,MAAM,OAAO,2CAAuD,GAClE;AAAA,IACL;AAAA,EACJ;AAAA,EACA,KAAK,UAAU,YAAY;AACzB,YACE,MAAM,OAAO,2CAAuD,GACpE;AAAA,EACJ,CAAC;AACH;;;ACEO,IAAM,UAAwC;AAAA;AAAA,EAEnD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS,IAAI,mBAAmB,EAAE,IAAI,SAAS,UAAU,mBAAa,CAAC;AAAA,EACvE,SAAS,IAAI,mBAAmB,EAAE,IAAI,SAAS,UAAU,mBAAa,CAAC;AAAA,EACvE,YAAY,IAAI,mBAAmB;AAAA,IACjC,IAAI;AAAA,IACJ,UAAU;AAAA,EACZ,CAAC;AAAA;AAAA;AAAA;AAAA,EAID;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO,IAAI,eAAe;AAAA,IACxB,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY,CAAC,aAAa;AAAA;AAAA;AAAA,EAE5B,CAAC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAIA;AAAA,EACA,UAAU,IAAI,eAAe;AAAA,IAC3B,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY,CAAC,WAAW;AAAA,IACxB,eAAe;AAAA;AAAA,EACjB,CAAC;AAAA,EACD,kBAAkB,IAAI,eAAe;AAAA,IACnC,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY,CAAC,mBAAmB;AAAA;AAAA,IAChC,eAAe;AAAA;AAAA,EACjB,CAAC;AAAA,EACD;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cubing/search/inside/solve/parseSGS.ts"],
4
- "sourcesContent": ["import { Alg } from \"../../../alg/index.ts\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle/index.ts\";\n\ninterface PieceReference {\n orbitName: string;\n permutationIdx: number;\n}\n\nexport interface SGSAction {\n alg: Alg;\n transformation: KTransformation;\n}\n\nexport interface SGSCachedData {\n ordering: {\n pieceOrdering: PieceReference[];\n lookup: Record<string, SGSAction>;\n }[];\n}\n\nexport function parseSGS(kpuzzle: KPuzzle, sgs: string): SGSCachedData {\n const subgroupSizes: number[] = [];\n const sgsActions: SGSAction[] = [];\n for (const line of sgs.split(\"\\n\")) {\n const lineTokens = line.split(\" \");\n if (line.startsWith(\"SetOrder \")) {\n // ignore\n } else if (line.startsWith(\"Alg \")) {\n const alg = Alg.fromString(line.substring(4));\n sgsActions.push({\n alg: alg,\n transformation: kpuzzle.algToTransformation(alg),\n });\n } else if (line.startsWith(\"SubgroupSizes \")) {\n for (let j = 1; j < lineTokens.length; j++) {\n subgroupSizes.push(parseInt(lineTokens[j], 10));\n }\n }\n }\n\n const sgsCachedData: SGSCachedData = {\n ordering: new Array(subgroupSizes.length),\n };\n const subgroupAlgOffsets: number[] = [];\n let sum = 0;\n subgroupAlgOffsets.push(0);\n const emptyAlg = Alg.fromString(\"\");\n const identity = kpuzzle.identityTransformation();\n for (let i = 0; i < subgroupSizes.length; i++) {\n sum += subgroupSizes[i];\n subgroupAlgOffsets.push(sum);\n sgsActions.splice(sum - 1, 0, { alg: emptyAlg, transformation: identity });\n }\n if (sgsActions.length !== sum) {\n throw Error(\n `Bad sgs; expected ${sum - subgroupSizes.length} algs but saw ${\n sgsActions.length - subgroupSizes.length\n }`,\n );\n }\n const processedPieces: Record<string, boolean[]> = {};\n for (const orbitDefinition of kpuzzle.definition.orbits) {\n processedPieces[orbitDefinition.orbitName] = new Array(\n orbitDefinition.numPieces,\n ).fill(false);\n }\n for (let i = subgroupSizes.length - 1; i >= 0; i--) {\n const pieceOrdering: PieceReference[] = [];\n for (let j = subgroupAlgOffsets[i]; j < subgroupAlgOffsets[i + 1]; j++) {\n const transformation = sgsActions[j].transformation;\n for (const orbitDefinition of kpuzzle.definition.orbits) {\n for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {\n if (\n transformation.transformationData[orbitDefinition.orbitName]\n .permutation[idx] !== idx ||\n transformation.transformationData[orbitDefinition.orbitName]\n .orientationDelta[idx] !== 0\n ) {\n if (!processedPieces[orbitDefinition.orbitName][idx]) {\n pieceOrdering.push({\n orbitName: orbitDefinition.orbitName,\n permutationIdx: idx,\n });\n processedPieces[orbitDefinition.orbitName][idx] = true;\n }\n }\n }\n }\n }\n const lookup: Record<string, SGSAction> = {};\n for (let j = subgroupAlgOffsets[i]; j < subgroupAlgOffsets[i + 1]; j++) {\n const transformation = sgsActions[j].transformation.invert();\n let key = \"\";\n for (let k = 0; k < pieceOrdering.length; k++) {\n const loc = pieceOrdering[k];\n key = `${key} ${\n transformation.transformationData[loc.orbitName].permutation[\n loc.permutationIdx\n ]\n } ${\n transformation.transformationData[loc.orbitName].orientationDelta[\n loc.permutationIdx\n ]\n }`;\n }\n lookup[key] = sgsActions[j];\n sgsActions[j].alg = sgsActions[j].alg.invert();\n sgsActions[j].transformation = sgsActions[j].transformation.invert();\n }\n sgsCachedData.ordering[i] = {\n pieceOrdering: pieceOrdering,\n lookup: lookup,\n };\n }\n return sgsCachedData;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cubing/search/worker-workarounds/index.ts", "../../../../src/cubing/search/instantiator.ts", "../../../../src/cubing/search/outside.ts"],
4
- "sourcesContent": ["import { exposeAPI } from \"./worker-guard.ts\";\n\nexport function searchWorkerURLImportMetaResolve(): string {\n // Note:\n // - We have to hardcode the expected path of the entry file in the ESM build, due to lack of `esbuild` support: https://github.com/evanw/esbuild/issues/2866\n // - This URL is based on the assumption that the code from this file ends up in a shared chunk in the `esm` build. This is not guaranteed by `esbuild`, but it consistently happens for our codebase.\n // - We inline the value (instead of using a constant), to maximize compatibility for hardcoded syntax detection in bundlers.\n return import.meta.resolve(\"./search-worker-entry.js\");\n}\n\nexport function searchWorkerURLNewURLImportMetaURL(): URL {\n // Note:\n // - We have to hardcode the expected path of the entry file in the ESM build, due to lack of `esbuild` support: https://github.com/evanw/esbuild/issues/795\n // - This URL is based on the assumption that the code from this file ends up in a shared chunk in the `esm` build. This is not guaranteed by `esbuild`, but it consistently happens for our codebase.\n // - We inline the value (instead of using a constant), to maximize compatibility for hardcoded syntax detection in bundlers.\n return new URL(\"./search-worker-entry.js\", import.meta.url);\n}\n\n// Workaround for `esbuild`: https://github.com/evanw/esbuild/issues/312#issuecomment-1092195778\nexport async function searchWorkerURLEsbuildWorkaround(): Promise<string> {\n exposeAPI.expose = false;\n return (await import(\"./search-worker-entry.js\")).WORKER_ENTRY_FILE_URL;\n}\n\nexport function instantiateSearchWorkerURLNewURLImportMetaURL(): Worker {\n return new Worker(new URL(\"./search-worker-entry.js\", import.meta.url), {\n type: \"module\",\n });\n}\n", "import type { Worker as NodeWorker } from \"node:worker_threads\";\nimport { PortableWorker, wrap } from \"@cubing/comlink-everywhere\";\nimport type { WorkerAPI } from \"./inside/api.ts\";\nimport { searchOutsideDebugGlobals } from \"./outside.ts\";\nimport {\n searchWorkerURLEsbuildWorkaround,\n searchWorkerURLImportMetaResolve,\n searchWorkerURLNewURLImportMetaURL,\n} from \"./worker-workarounds/index.ts\";\n\nfunction wrapAPI(worker: Worker | NodeWorker): WorkerAPI {\n return wrap<WorkerAPI>(worker);\n}\n\nasync function instantiateModuleWorker(\n workerEntryFileURL: string | URL,\n): Promise<WorkerAPI> {\n // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO\n return new Promise<WorkerAPI>(async (resolve, reject) => {\n try {\n const worker = searchOutsideDebugGlobals.allowNodeStyleWorkers\n ? new PortableWorker(workerEntryFileURL)\n : new Worker(workerEntryFileURL, { type: \"module\" });\n\n // TODO: Remove this once we can remove the workarounds for lack of `import.meta.resolve(\u2026)` support.\n const onFirstMessage = (messageData: string) => {\n if (messageData === \"comlink-exposed\") {\n // We need to clear the timeout so that we don't prevent `node` from exiting in the meantime.\n resolve(wrapAPI(worker));\n } else {\n reject(\n new Error(`wrong module instantiation message ${messageData}`),\n );\n }\n };\n\n const onError = (e: ErrorEvent) => {\n reject(e);\n };\n\n if (\"once\" in worker /* hack to detect `node` */) {\n // We have to use `once` so the `unref()` from `comlink-everywhere` allows the process to quit as expected.\n worker.once(\"message\", onFirstMessage);\n } else {\n worker.addEventListener(\"error\", onError, {\n once: true,\n });\n worker.addEventListener(\n \"message\",\n (e: MessageEvent) => onFirstMessage(e.data),\n {\n once: true,\n },\n );\n }\n } catch (e) {\n reject(e);\n }\n });\n}\n\nexport const allWorkerAPIPromises: Promise<WorkerAPI>[] = [];\n\nexport async function instantiateWorkerAPI(): Promise<WorkerAPI> {\n const workerAPIPromise = instantiateWorkerImplementation();\n allWorkerAPIPromises.push(workerAPIPromise);\n const insideAPI = await workerAPIPromise;\n insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);\n insideAPI.setDebugForceTwipsForScrambles(\n searchOutsideDebugGlobals.forceTwipsForScrambles,\n );\n insideAPI.setScramblePrefetchLevel(\n searchOutsideDebugGlobals.scramblePrefetchLevel,\n );\n return workerAPIPromise;\n}\n\ntype FallbackStrategyInfo = [\n fn: () => Promise<WorkerAPI>,\n description: string,\n warnOnSuccess: null | string,\n];\n\nfunction fallbackOrder(): FallbackStrategyInfo[] {\n const importMetaResolveStrategy: FallbackStrategyInfo = [\n async () => instantiateModuleWorker(searchWorkerURLImportMetaResolve()),\n \"using `import.meta.resolve(\u2026)\",\n null,\n ];\n const esbuildWorkaroundStrategy: FallbackStrategyInfo = [\n async () =>\n instantiateModuleWorker(await searchWorkerURLEsbuildWorkaround()),\n \"using the `esbuild` workaround\",\n // TODO: we will hopefully discontinue the `esbuild` workaround at some\n // point, but `esbuild` has been stuck for 3 years on this issue. Because\n // `esbuild` and Vite (which uses `esbuild`) are now dominating the\n // ecosystem, this just causes a warning for a lot of devs/users that they\n // can't do anything about. As frustrating as the situation is, the\n // workaround is semantically fine (even if it's convoluted) and is\n // preserved by `esbuild`-based flows in practice. So we suppress the\n // warning in the medium-term but maintain long-term hope that we can\n // remove it (and the other fallbacks as well).\n null,\n ];\n const newURLStrategy: FallbackStrategyInfo = [\n async () => instantiateModuleWorker(searchWorkerURLNewURLImportMetaURL()),\n \"using `new URL(\u2026, import.meta.url)`\",\n \"will\",\n ];\n\n if (!searchOutsideDebugGlobals.allowLegacyPatternsForWorkerInstantiation) {\n return [importMetaResolveStrategy];\n }\n if (\n searchOutsideDebugGlobals.prioritizeEsbuildWorkaroundForWorkerInstantiation\n ) {\n return [\n esbuildWorkaroundStrategy,\n importMetaResolveStrategy,\n newURLStrategy,\n ];\n }\n return [importMetaResolveStrategy, esbuildWorkaroundStrategy, newURLStrategy];\n}\n\nasync function instantiateWorkerImplementation(): Promise<WorkerAPI> {\n if (globalThis.location?.protocol === \"file:\") {\n console.warn(\n \"This current web page is loaded from the local filesystem (a URL that starts with `file://`). In this situation, `cubing.js` may be unable to generate scrambles or perform searches in some browsers. See: https://js.cubing.net/cubing/scramble/#file-server-required\",\n );\n }\n\n function failed(methodDescription?: string) {\n return `Module worker instantiation${\n methodDescription ? ` ${methodDescription}` : \"\"\n } failed`;\n }\n\n for (const [fn, description, warnOnSuccess] of fallbackOrder()) {\n try {\n const worker = await fn();\n if (warnOnSuccess) {\n if (searchOutsideDebugGlobals.showWorkerInstantiationWarnings) {\n console.warn(\n `Module worker instantiation required ${description}. \\`cubing.js\\` ${warnOnSuccess} not support this fallback in the future.`,\n );\n }\n }\n return worker;\n } catch (e) {\n if (searchOutsideDebugGlobals.showWorkerInstantiationWarnings) {\n console.warn(`${failed(description)}, falling back.`, e);\n }\n }\n }\n\n throw new Error(\n `Module worker instantiation failed. There are no more fallbacks available.`,\n );\n}\n", "import { Alg } from \"../alg/index.ts\";\nimport type { KPuzzle } from \"../kpuzzle/index.ts\";\n// import { preInitialize222 } from \"../implementations/2x2x2\";\nimport type { KPattern } from \"../kpuzzle/KPattern.ts\";\nimport type { PrefetchLevel, WorkerAPI } from \"./inside/api.ts\";\nimport type { TwipsOptions } from \"./inside/solve/twips.ts\";\nimport { allWorkerAPIPromises, instantiateWorkerAPI } from \"./instantiator.ts\";\n\nlet cachedWorkerInstance: Promise<WorkerAPI> | undefined;\nfunction getCachedWorkerInstance(): Promise<WorkerAPI> {\n return (cachedWorkerInstance ??= instantiateWorkerAPI());\n}\n\nexport async function mapToAllWorkers(\n f: (worker: WorkerAPI) => void,\n): Promise<void> {\n await Promise.all(\n allWorkerAPIPromises.map(async (worker) => {\n f(await worker);\n }),\n );\n}\n\n// Pre-initialize the scrambler for the given event. (Otherwise, an event is\n// initialized the first time you ask for a scramble for that event.)\n//\n// Some typical numbers for a fast computer:\n// - 3x3x3 initialization: 200ms\n// - Each 3x3x3 scramble: 50ms\n// - 4x4x4 initialization: 2500ms\n// - Each 4x4x4 scramble: 300ms to 800ms\n//\n// It is safe to immediately call for a scramble\n// any time after starting pre-initialization, or to call for them without\n// pre-initializing. Pre-initializing essentially gives the scramble worker a\n// head start in case a scramble doesn't get requested immediately.\n//\n// Note that events cannot be pre-initialized in parallel. Attempting to\n// pre-initialize multiple events will initialize them consecutively. Scrambles\n// for a given event cannot be computed while another event is being initialized.\nexport function _preInitializationHintForEvent(\n eventID: string,\n // callback?: () => void\n): void {\n switch (eventID) {\n case \"333oh\":\n _preInitializationHintForEvent(\"333\");\n return;\n }\n void (async () => {\n await (await getCachedWorkerInstance()).initialize(eventID);\n })();\n}\n\nexport async function randomScrambleForEvent(eventID: string): Promise<Alg> {\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorkerAPI()\n : await getCachedWorkerInstance();\n const scrambleString = await worker.randomScrambleStringForEvent(eventID);\n\n return Alg.fromString(scrambleString);\n}\n\nexport async function deriveScrambleForEvent(\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n): Promise<Alg> {\n if (!searchOutsideDebugGlobals.allowDerivedScrambles) {\n throw new Error(\"Derived scrambles are not allowed.\");\n }\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorkerAPI()\n : await getCachedWorkerInstance();\n const scrambleString = await worker.deriveScrambleStringForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n );\n return Alg.fromString(scrambleString);\n}\n\nexport async function experimentalSolve3x3x3IgnoringCenters(\n pattern: KPattern,\n): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solve333ToString(pattern.patternData));\n}\n\nexport async function experimentalSolve2x2x2(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solve222ToString(pattern.patternData));\n}\n\nexport async function solveSkewb(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solveSkewbToString(pattern.patternData));\n}\n\nexport async function solvePyraminx(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solvePyraminxToString(pattern.patternData));\n}\n\nexport async function solveMegaminx(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solveMegaminxToString(pattern.patternData));\n}\n\nexport interface SolveTwipsOptions {\n generatorMoves?: string[];\n targetPattern?: KPattern;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function solveTwips(\n kpuzzle: KPuzzle,\n pattern: KPattern,\n options?: SolveTwipsOptions,\n): Promise<Alg> {\n const { targetPattern, ...otherOptions } = options ?? {};\n const apiOptions: TwipsOptions = otherOptions;\n if (targetPattern) {\n apiOptions.targetPattern = targetPattern.patternData;\n }\n const { ...def } = kpuzzle.definition;\n delete def.experimentalIsPatternSolved;\n // delete def.derivedMoves;\n const dedicatedWorker = await instantiateWorkerAPI();\n try {\n return Alg.fromString(\n // TODO: unnecessary because we terminate the worker?\n await dedicatedWorker.solveTwipsToString(\n def,\n pattern.patternData,\n apiOptions,\n ),\n );\n } finally {\n console.log(\"Search ended, terminating dedicated `twips` worker.\");\n // TODO: support re-using the same worker for multiple searches..\n // dedicatedWorker.terminate?.(); // TODO\n }\n}\n\ninterface SearchOutsideDebugGlobals {\n logPerf: boolean;\n scramblePrefetchLevel: `${PrefetchLevel}`;\n forceNewWorkerForEveryScramble: boolean;\n showWorkerInstantiationWarnings: boolean;\n forceTwipsForScrambles: boolean;\n // Allow fallbacks from `import.meta.resolve(\u2026)`.\n allowLegacyPatternsForWorkerInstantiation: boolean;\n allowNodeStyleWorkers: boolean;\n // This can prevent a request to `search-worker-entry.js` when it doesn't exist, if the library semantics have been mangled by `esbuild`.\n prioritizeEsbuildWorkaroundForWorkerInstantiation: boolean;\n allowDerivedScrambles: boolean;\n}\n\nexport const searchOutsideDebugGlobals: SearchOutsideDebugGlobals = {\n logPerf: true,\n scramblePrefetchLevel: \"auto\",\n forceNewWorkerForEveryScramble: false,\n forceTwipsForScrambles: false,\n showWorkerInstantiationWarnings: false,\n prioritizeEsbuildWorkaroundForWorkerInstantiation: false,\n allowLegacyPatternsForWorkerInstantiation: true,\n allowNodeStyleWorkers: true,\n allowDerivedScrambles: false,\n};\n\nexport function setSearchDebug(\n options: Partial<SearchOutsideDebugGlobals>,\n): void {\n const { logPerf, forceTwipsForScrambles, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n searchOutsideDebugGlobals.logPerf = logPerf;\n void mapToAllWorkers((worker) => worker.setDebugMeasurePerf(logPerf));\n }\n if (typeof forceTwipsForScrambles !== \"undefined\") {\n searchOutsideDebugGlobals.forceTwipsForScrambles = forceTwipsForScrambles;\n void mapToAllWorkers((worker) =>\n worker.setDebugMeasurePerf(forceTwipsForScrambles),\n );\n }\n if (typeof scramblePrefetchLevel !== \"undefined\") {\n searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;\n void mapToAllWorkers((worker) =>\n worker.setScramblePrefetchLevel(scramblePrefetchLevel as PrefetchLevel),\n );\n }\n for (const booleanField of [\n \"forceNewWorkerForEveryScramble\",\n \"showWorkerInstantiationWarnings\",\n \"prioritizeEsbuildWorkaroundForWorkerInstantiation\",\n \"allowLegacyPatternsForWorkerInstantiation\",\n \"allowNodeStyleWorkers\",\n \"allowDerivedScrambles\",\n ] as const) {\n if (booleanField in options) {\n searchOutsideDebugGlobals[booleanField] =\n options[booleanField] ?? searchOutsideDebugGlobals[booleanField];\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cubing/search/inside/solve/puzzles/2x2x2.ts", "../../../../src/cubing/search/inside/solve/tremble.ts", "../../../../src/cubing/search/inside/solve/twips.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/4x4x4.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/fto.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/kilominx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/kilominx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/master_tetraminx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/master_tetraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/megaminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/pyraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/redi_cube.ts", "../../../../src/cubing/search/inside/solve/puzzles/skewb.ts", "../../../../src/cubing/search/inside/api.ts", "../../../../src/cubing/search/inside/index.ts"],
4
- "sourcesContent": ["import { randomPermuteInPlace, randomUIntBelow } from \"random-uint-below\";\nimport type { Alg } from \"../../../../alg/index.ts\";\nimport type { KPuzzle } from \"../../../../kpuzzle/index.ts\";\nimport { KPattern } from \"../../../../kpuzzle/index.ts\";\nimport { cube2x2x2, puzzles } from \"../../../../puzzles/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport type { SGSCachedData } from \"../parseSGS.ts\";\nimport { TrembleSolver } from \"../tremble.ts\";\nimport { wasmTwips } from \"../twips.ts\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events/index.ts\";\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgsCachedData: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedData222();\n return new TrembleSolver(\n await puzzles[\"2x2x2\"].kpuzzle(),\n sgsCachedData,\n \"URFLBD\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitialize222(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: fix def consistency.\nexport async function solve222(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n return wasmTwips((await cube2x2x2.kpuzzle()).definition, pattern, {\n generatorMoves: \"UFLR\".split(\"\"),\n });\n}\n\n// TODO: factor out and test.\nfunction mutatingRandomizeOrbit(\n kpuzzle: KPuzzle,\n orbitName: string,\n pattern: KPattern,\n options?: { orientationSum?: number },\n): void {\n randomPermuteInPlace(pattern.patternData[orbitName].pieces);\n\n const orbitDefinition = kpuzzle.lookupOrbitDefinition(orbitName);\n const ori = pattern.patternData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDefinition.numPieces; i++) {\n const o = randomUIntBelow(orbitDefinition.numOrientations);\n ori[i] = o;\n sum += o;\n }\n\n // console.log(\"aaaa\", options && \"orientationSum\" in options);\n if (options && \"orientationSum\" in options) {\n // console.log(\"sfdsf\", options!.orientationSum),\n ori[0] =\n (((ori[0] + options.orientationSum! - sum) %\n orbitDefinition.numOrientations) +\n orbitDefinition.numOrientations) %\n orbitDefinition.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222Pattern(): Promise<KPattern> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const patternCopy: KPattern = new KPattern(\n kpuzzle,\n structuredClone(kpuzzle.defaultPattern().patternData),\n ); // TODO\n mutatingRandomizeOrbit(kpuzzle, \"CORNERS\", patternCopy, {\n orientationSum: 0,\n });\n return patternCopy;\n}\n", "import { randomChoice } from \"random-uint-below\";\nimport { Alg, AlgBuilder, Move, type QuantumMove } from \"../../../alg/index.ts\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle/index.ts\";\nimport type { KPattern } from \"../../../kpuzzle/KPattern.ts\";\nimport { experimentalCountMoves } from \"../../../notation/index.ts\";\nimport type { SGSCachedData } from \"./parseSGS.ts\";\n\nconst DEFAULT_STAGE1_DEPTH_LIMIT = 2; // Moderately performant default.\n\nconst DOUBLECHECK_PLACED_PIECES = true;\nconst DEBUG = false;\n\n// TODO: Take moves instead of move names?\nfunction calculateMoves(\n kpuzzle: KPuzzle,\n moveNames: string[],\n): {\n move: Move;\n transformation: KTransformation;\n}[] {\n const searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[] = [];\n // const identity = identityTransformation(def); // TODO\n // TODO: Make it easy to filter moves.\n for (const moveName of moveNames) {\n const rootMove = new Move(moveName);\n if (rootMove.amount !== 1) {\n throw new Error(\n \"SGS cannot handle def moves with an amount other than 1 yet.\",\n );\n }\n let transformation = kpuzzle.identityTransformation();\n for (let i = 1; ; i++) {\n transformation = transformation.applyMove(rootMove);\n if (transformation.isIdentityTransformation()) {\n break;\n }\n searchMoves.push({\n move: rootMove.modified({ amount: i }),\n transformation,\n });\n }\n }\n return searchMoves;\n}\n\n// function badRandomMoves(moves: string[], ksp: KSolvePuzzle): KSolvePuzzleState {\n// // var sum = 0;\n// var scramble = \"\";\n// for (var i = 0; i < 1000; i++) {\n// scramble = scramble + \" \" + moves[Math.floor(moves.length * Math.random())];\n// }\n// // var sol = \"\";\n// const indexer = new TreeAlgIndexer(ksp, Alg.fromString(scramble));\n// return indexer.transformAtIndex(indexer.numMoves()) as any; // TODO\n// }\n\nexport class TrembleSolver {\n private searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[];\n\n private kpuzzle: KPuzzle;\n private sgs: SGSCachedData;\n constructor(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n trembleMoveNames?: string[],\n ) {\n this.kpuzzle = kpuzzle;\n this.sgs = sgs;\n\n this.searchMoves = calculateMoves(\n this.kpuzzle,\n trembleMoveNames ?? Object.keys(this.kpuzzle.definition.moves),\n );\n }\n\n // public badRandomMoves(): KSolvePuzzleState {\n // return badRandomMoves(this.moves, this.ksp);\n // }\n\n public async solve(\n pattern: KPattern,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n const transformation = pattern.experimentalToTransformation();\n if (!transformation) {\n throw new Error(\n \"distinguishable pieces are not supported in tremble solver yt\",\n );\n }\n let bestAlg: Alg | null = null;\n let bestLen = 1000000;\n const recur = (\n recursiveTransformation: KTransformation, // TODO: Support KStatq1\n togo: number,\n sofar: Alg,\n ) => {\n // console.log(\"recur\");\n if (togo === 0) {\n const sgsAlg = this.sgsPhaseSolve(recursiveTransformation, bestLen);\n if (!sgsAlg) {\n return;\n }\n // console.log(\"sgs done!\", sofar.toString(), \"|\", sgsAlg.toString());\n const newAlg = sofar.concat(sgsAlg).experimentalSimplify({\n cancel: {\n directional: \"any-direction\",\n puzzleSpecificModWrap: \"canonical-centered\",\n },\n puzzleSpecificSimplifyOptions: { quantumMoveOrder },\n });\n\n const len = experimentalCountMoves(newAlg);\n if (bestAlg === null || len < bestLen) {\n if (DEBUG) {\n console.log(`New best (${len} moves): ${newAlg.toString()}`);\n console.log(`Tremble moves are: ${sofar.toString()}`);\n }\n bestAlg = newAlg;\n bestLen = len;\n }\n return;\n }\n for (const searchMove of this.searchMoves) {\n recur(\n recursiveTransformation.applyTransformation(\n searchMove.transformation,\n ),\n togo - 1,\n sofar.concat([searchMove.move]),\n );\n }\n };\n for (let d = 0; d <= stage1DepthLimit; d++) {\n recur(transformation, d, new Alg());\n }\n if (bestAlg === null) {\n throw new Error(\"SGS search failed.\");\n }\n return bestAlg;\n }\n\n private sgsPhaseSolve(\n initialTransformation: KTransformation, // TODO: Handle KPattern\n bestLenSofar: number,\n ): Alg | null {\n // const pieceNames = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\n\n // function loggo(s: string) {\n // // console.warn(s);\n // // document.body.appendChild(document.createElement(\"div\")).textContent = s;\n // }\n\n // console.log(\"sgsPhaseSolve\");\n const algBuilder = new AlgBuilder();\n let transformation = initialTransformation;\n for (const step of this.sgs.ordering) {\n const cubieSeq = step.pieceOrdering;\n let key = \"\";\n const inverseTransformation = transformation.invert();\n for (let i = 0; i < cubieSeq.length; i++) {\n const loc = cubieSeq[i];\n const orbitName = loc.orbitName;\n const idx = loc.permutationIdx;\n key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;\n }\n // console.log(key, step.lookup);\n const info = step.lookup[key];\n if (!info) {\n throw new Error(\"Missing algorithm in sgs or esgs?\");\n }\n algBuilder.experimentalPushAlg(info.alg);\n if (algBuilder.experimentalNumAlgNodes() >= bestLenSofar) {\n return null;\n }\n transformation = transformation.applyTransformation(info.transformation);\n if (DOUBLECHECK_PLACED_PIECES) {\n for (let i = 0; i < cubieSeq.length; i++) {\n const location = cubieSeq[i];\n const orbitName = location.orbitName;\n const idx = location.permutationIdx;\n if (\n transformation.transformationData[orbitName].permutation[idx] !==\n idx ||\n transformation.transformationData[orbitName].orientationDelta[\n idx\n ] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport function randomPatternFromSGS(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n): KPattern {\n let transformation = kpuzzle.identityTransformation();\n for (const step of sgs.ordering) {\n const sgsAction = randomChoice(Object.values(step.lookup));\n transformation = transformation.applyTransformation(\n sgsAction.transformation,\n );\n }\n return transformation.toKPattern();\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\nimport type { Alg } from \"../../../alg/index.ts\";\nimport type {\n KPattern,\n KPatternData,\n KPuzzleDefinition,\n} from \"../../../kpuzzle/index.ts\";\n\nexport const twipsPromise = new LazyPromise(\n async () => import(\"../../../vendor/mpl/twips/index.js\"),\n);\n\nexport interface TwipsOptions {\n // TODO: start prune depth?\n generatorMoves?: string[];\n targetPattern?: KPatternData;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function wasmTwips(\n def: KPuzzleDefinition,\n pattern: KPattern,\n options?: TwipsOptions,\n): Promise<Alg> {\n const { wasmTwips } = await twipsPromise;\n return wasmTwips(def, pattern, options);\n}\n\nexport async function wasmRandomScrambleForEvent(\n eventID: string,\n): Promise<Alg> {\n const { wasmRandomScrambleForEvent } = await twipsPromise;\n return wasmRandomScrambleForEvent(eventID);\n}\n\nexport async function wasmDeriveScrambleForEvent(\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n): Promise<Alg> {\n const { wasmDeriveScrambleForEvent } = await twipsPromise;\n return wasmDeriveScrambleForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n );\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const searchDynamicSideEvents = new LazyPromise(\n () => import(\"./search-dynamic-sgs-side-events.ts\"),\n);\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamic4x4x4Solver = new LazyPromise(\n () => import(\"./search-dynamic-solve-4x4x4.ts\"),\n);\n", "import type { Alg } from \"../../../../alg/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix.ts\";\nimport { dynamic4x4x4Solver } from \"./dynamic/4x4x4/index.ts\";\n\nconst randomSuffixes = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"],\n];\n\nexport async function initialize444(): Promise<void> {\n return (await dynamic4x4x4Solver).initialize();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamic4x4x4Solver).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamicFTO = new LazyPromise(\n () => import(\"./search-dynamic-solve-fto.ts\"),\n);\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\nimport { Alg } from \"../../../../alg/index.ts\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern.ts\";\nimport { puzzles } from \"../../../../puzzles/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport type { SGSCachedData } from \"../parseSGS.ts\";\nimport { TrembleSolver } from \"../tremble.ts\";\nimport { dynamicFTO } from \"./dynamic/fto/index.ts\";\n\nconst dynamic = new LazyPromise(\n () => import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial.ts\"),\n);\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (await dynamic).sgsDataFTO();\n return new TrembleSolver(await puzzles[\"fto\"].kpuzzle(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"D\",\n \"B\",\n \"BR\",\n \"BL\",\n ]);\n })())\n );\n}\n\nexport async function preInitializeFTO(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveFTO(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n pattern,\n TREMBLE_DEPTH,\n () => 3, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomFTOScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(await (await dynamicFTO).getRandomFTOScramble());\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamicKilominxSolver = new LazyPromise<\n typeof import(\"./search-dynamic-solve-kilominx\")\n>(() => import(\"./search-dynamic-solve-kilominx.ts\"));\n", "import type { Alg } from \"../../../../alg/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport { dynamicKilominxSolver } from \"./dynamic/kilominx/index.ts\";\n\nexport async function randomKilominxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamicKilominxSolver).getRandomKilominxScramble();\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamicMasterTetraminxSolver = new LazyPromise(\n () => import(\"./search-dynamic-solve-master_tetraminx.ts\"),\n);\n", "import { Alg } from \"../../../../alg/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport { dynamicMasterTetraminxSolver } from \"./dynamic/master_tetraminx/index.ts\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(\n await (\n await dynamicMasterTetraminxSolver\n ).randomMasterTetraminxScrambleString(),\n );\n}\n", "import type { Alg } from \"../../../../alg/index.ts\";\nimport type { KPatternData } from \"../../../../kpuzzle/index.ts\";\nimport { KPattern } from \"../../../../kpuzzle/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport type { SGSCachedData } from \"../parseSGS.ts\";\nimport { TrembleSolver } from \"../tremble.ts\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events/index.ts\";\n\nconst TREMBLE_DEPTH = 2;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedSGSDataMegaminx();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n json,\n [\"U\", \"R\", \"F\", \"L\", \"BR\", \"BL\", \"FR\", \"FL\", \"DR\", \"DL\", \"B\", \"D\"],\n );\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const patternDataWithoutMO: KPatternData = structuredClone(\n pattern.patternData,\n );\n patternDataWithoutMO[\"CENTERS\"].orientation = new Array(12).fill(0);\n const patternWithoutMO = new KPattern(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n patternDataWithoutMO,\n );\n const alg = await trembleSolver.solve(\n patternWithoutMO,\n TREMBLE_DEPTH,\n () => 5, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../../../alg/index.ts\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern.ts\";\nimport { puzzles } from \"../../../../puzzles/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport type { SGSCachedData } from \"../parseSGS.ts\";\nimport { randomPatternFromSGS, TrembleSolver } from \"../tremble.ts\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events/index.ts\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataPyraminx();\n return new TrembleSolver(\n await puzzles[\"pyraminx\"].kpuzzle(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializePyraminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nexport async function solvePyraminx(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(pattern, TREMBLE_DEPTH, () => 3); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\nexport async function randomPyraminxPatternFixedOrientation(): Promise<KPattern> {\n mustBeInsideWorker();\n // Note: this sets all center orientations to 0.\n return randomPatternFromSGS(\n await puzzles[\"pyraminx\"].kpuzzle(),\n await (await searchDynamicSideEvents).sgsDataPyraminxFixedOrientation(),\n );\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const searchDynamicUnofficial = new LazyPromise(\n () => import(\"./search-dynamic-sgs-unofficial.ts\"),\n);\n", "import type { Alg } from \"../../../../alg/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport { searchDynamicUnofficial } from \"./dynamic/sgs-unofficial/index.ts\";\n\nexport async function randomRediCubeScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await searchDynamicUnofficial).getRandomRediCubeScramble();\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg/index.ts\";\nimport { KPattern } from \"../../../../kpuzzle/index.ts\";\nimport { mustBeInsideWorker } from \"../../inside-worker.ts\";\nimport type { SGSCachedData } from \"../parseSGS.ts\";\nimport { TrembleSolver } from \"../tremble.ts\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events/index.ts\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataSkewb();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializeSkewb(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nasync function resetCenterOrientation(pattern: KPattern): Promise<KPattern> {\n return new KPattern(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n {\n CORNERS: pattern.patternData[\"CORNERS\"],\n CENTERS: {\n pieces: pattern.patternData[\"CENTERS\"].pieces,\n orientation: new Array(6).fill(0),\n },\n },\n );\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n await resetCenterOrientation(pattern),\n TREMBLE_DEPTH,\n (quantumMove: QuantumMove) => (quantumMove.family === \"y\" ? 4 : 3), // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../alg/index.ts\";\nimport {\n KPattern,\n type KPatternData,\n KPuzzle,\n type KPuzzleDefinition,\n} from \"../../kpuzzle/index.ts\";\nimport { puzzles, wcaEvents } from \"../../puzzles/index.ts\";\nimport { setIsInsideWorker } from \"./inside-worker.ts\";\nimport { preInitialize222, solve222 } from \"./solve/puzzles/2x2x2.ts\";\nimport {\n initialize333,\n random333OrientedScramble,\n random333Scramble,\n solve333,\n} from \"./solve/puzzles/3x3x3/index.ts\";\nimport {\n initialize444,\n random444OrientedScramble,\n random444Scramble,\n} from \"./solve/puzzles/4x4x4.ts\";\nimport { randomFTOScramble } from \"./solve/puzzles/fto.ts\";\nimport { randomKilominxScramble } from \"./solve/puzzles/kilominx.ts\";\nimport { randomMasterTetraminxScramble } from \"./solve/puzzles/master_tetraminx.ts\";\nimport { solveMegaminx } from \"./solve/puzzles/megaminx.ts\";\nimport { solvePyraminx } from \"./solve/puzzles/pyraminx.ts\";\nimport { randomRediCubeScramble } from \"./solve/puzzles/redi_cube.ts\";\nimport { solveSkewb } from \"./solve/puzzles/skewb.ts\";\nimport {\n type TwipsOptions,\n wasmDeriveScrambleForEvent,\n wasmRandomScrambleForEvent,\n wasmTwips,\n} from \"./solve/twips.ts\";\n\nconst IDLE_PREFETCH_TIMEOUT_MS = 1000;\n\nsetIsInsideWorker(true);\n\nlet DEBUG_MEASURE_PERF = true;\nexport function setDebugMeasurePerf(newDebugMeasurePerf: boolean): void {\n DEBUG_MEASURE_PERF = newDebugMeasurePerf;\n}\n\nlet DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = false;\nexport function setDebugForceTwipsForScrambles(\n forceTwipsForScrambles: boolean,\n): void {\n DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = forceTwipsForScrambles;\n}\n\nfunction now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n}\n\nasync function measurePerf<T>(\n name: string,\n f: () => T | Promise<T>,\n options?: { isPrefetch?: boolean },\n): Promise<T> {\n if (!DEBUG_MEASURE_PERF) {\n return f();\n }\n\n const start = now();\n const result = f();\n if ((result as any)?.then) {\n await result;\n }\n const end = now();\n console.warn(\n `${name}${options?.isPrefetch ? \" (prefetched)\" : \"\"}: ${Math.round(\n end - start,\n )}ms`,\n );\n return result;\n}\n\nconst prefetchPromises: Map<string, Promise<Alg>> = new Map();\n// This would just be a number, except `node` is extremely silly and returns an object instead.\n// https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\nlet queuedPrefetchTimeoutID: ReturnType<typeof setTimeout> | null = null;\n\n// This is used to ensure only one scramble is running (and measured) at a time, as interleaving scrambles within a single worker isn't supported (yet).\n// Scrambles may perform async work (e.g. loading code), and this guard this prevents unintended interleaving.\nlet scrambleActivityLock: Promise<Alg>;\n\nasync function randomScrambleForEvent(\n eventID: string,\n options?: { isPrefetch?: boolean },\n): Promise<Alg> {\n return (scrambleActivityLock = (async () => {\n await scrambleActivityLock;\n function wasm(): Promise<Alg> {\n return measurePerf(\n `wasmRandomScrambleForEvent(${JSON.stringify(eventID)})`,\n () => wasmRandomScrambleForEvent(eventID),\n {\n isPrefetch: options?.isPrefetch,\n },\n );\n }\n\n function twipsOverride(): Promise<Alg> | undefined {\n if (\n DEBUG_FORCE_TWIPS_FOR_SCRAMBLES &&\n (eventID in wcaEvents || [\"kilominx\"].includes(eventID))\n ) {\n console.log(`Using \\`twips\\` override for \\`${eventID}\\` scramble.`);\n return wasm();\n }\n return undefined;\n }\n\n switch (eventID) {\n // case \"333\":\n case \"222\":\n return (await wasm()).experimentalSimplify({\n puzzleSpecificSimplifyOptions: {\n quantumMoveOrder: () => 4,\n },\n });\n // case \"444\":\n case \"555\":\n case \"666\":\n case \"777\":\n // case \"333bf\":\n case \"333fm\":\n // case \"333oh\":\n case \"clock\":\n case \"minx\":\n case \"pyram\":\n case \"skewb\":\n case \"sq1\":\n // case \"444bf\":\n case \"555bf\":\n // case \"333mbf\":\n // case \"fto\":\n // case \"master_tetraminx\":\n // case \"kilominx\":\n // case \"redi_cube\":\n case \"baby_fto\":\n return wasm();\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return (\n twipsOverride() ??\n measurePerf(\"random333Scramble\", random333Scramble, {\n isPrefetch: options?.isPrefetch,\n })\n );\n case \"333bf\":\n case \"333mbf\":\n return (\n twipsOverride() ??\n measurePerf(\"random333OrientedScramble\", random333OrientedScramble)\n );\n case \"444\":\n return (\n twipsOverride() ??\n measurePerf(\"random444Scramble\", random444Scramble, {\n isPrefetch: options?.isPrefetch,\n })\n );\n case \"444bf\":\n return (\n twipsOverride() ??\n measurePerf(\"random444OrientedScramble\", random444OrientedScramble)\n );\n case \"fto\":\n return measurePerf(\"randomFTOScramble\", randomFTOScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"master_tetraminx\":\n return measurePerf(\n \"randomMasterTetraminxScramble\",\n randomMasterTetraminxScramble,\n );\n case \"kilominx\":\n return (\n twipsOverride() ??\n measurePerf(\"randomKilominxScramble\", randomKilominxScramble, {\n isPrefetch: options?.isPrefetch,\n })\n );\n case \"redi_cube\":\n return measurePerf(\"randomRediCubeScramble\", randomRediCubeScramble, {\n isPrefetch: options?.isPrefetch,\n });\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n })());\n}\n\nexport type PrefetchLevel = (typeof PrefetchLevel)[keyof typeof PrefetchLevel];\nexport const PrefetchLevel = {\n Auto: \"auto\",\n None: \"none\",\n Immediate: \"immediate\",\n};\n\nlet currentPrefetchLevel = PrefetchLevel.Auto;\n\nexport const insideAPI = {\n initialize: async (eventID: string) => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"preInitialize222\", preInitialize222);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"initialize333\", initialize333);\n case \"444\":\n return measurePerf(\"initialize444\", initialize444);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n setScramblePrefetchLevel(prefetchLevel: `${PrefetchLevel}`) {\n currentPrefetchLevel = prefetchLevel as PrefetchLevel;\n },\n\n randomScrambleForEvent: async (eventID: string): Promise<Alg> => {\n let promise = prefetchPromises.get(eventID);\n if (promise) {\n prefetchPromises.delete(eventID);\n } else {\n promise = randomScrambleForEvent(eventID);\n }\n if (currentPrefetchLevel !== PrefetchLevel.None) {\n promise.then(() => {\n // `queuedPrefetch` could be 0, but:\n // > Passing an invalid ID to clearTimeout() silently does nothing; no exception is thrown.\n // https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout#notes\n if (queuedPrefetchTimeoutID) {\n clearTimeout(queuedPrefetchTimeoutID);\n }\n queuedPrefetchTimeoutID = setTimeout(\n () => {\n prefetchPromises.set(\n eventID,\n randomScrambleForEvent(eventID, {\n isPrefetch: true,\n }),\n );\n },\n currentPrefetchLevel === PrefetchLevel.Immediate\n ? 0\n : IDLE_PREFETCH_TIMEOUT_MS,\n );\n });\n }\n return promise;\n },\n\n randomScrambleStringForEvent: async (eventID: string): Promise<string> => {\n return (await insideAPI.randomScrambleForEvent(eventID)).toString();\n },\n\n deriveScrambleStringForEvent: async (\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n ): Promise<string> => {\n const scramble = await measurePerf(\n `deriveScrambleForEvent(\u2026, ${JSON.stringify(eventID)})`,\n () =>\n wasmDeriveScrambleForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n ),\n );\n return scramble.toString();\n },\n\n solve333ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"3x3x3\"].kpuzzle(), patternData);\n return (await solve333(pattern)).toString();\n },\n\n solve222ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"2x2x2\"].kpuzzle(), patternData);\n return (await solve222(pattern)).toString();\n },\n\n solveSkewbToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"skewb\"].kpuzzle(), patternData);\n return (await solveSkewb(pattern)).toString();\n },\n\n solvePyraminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"pyraminx\"].kpuzzle(),\n patternData,\n );\n return (await solvePyraminx(pattern)).toString();\n },\n\n solveMegaminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"megaminx\"].kpuzzle(),\n patternData,\n );\n return (await solveMegaminx(pattern)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n\n setDebugForceTwipsForScrambles: async (measure: boolean): Promise<void> => {\n setDebugForceTwipsForScrambles(measure);\n },\n\n solveTwipsToString: async (\n def: KPuzzleDefinition,\n patternData: KPatternData,\n options?: TwipsOptions,\n ): Promise<string> => {\n const kpuzzle = new KPuzzle(def);\n const pattern = new KPattern(kpuzzle, patternData);\n return (await wasmTwips(def, pattern, options)).toString();\n },\n};\n\nexport type WorkerAPI = typeof insideAPI;\n", "import { expose } from \"@cubing/comlink-everywhere\";\nimport { insideAPI } from \"./api.ts\";\n\nexpose(insideAPI);\n"],
5
- "mappings": "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",
6
- "names": ["wasmTwips", "wasmRandomScrambleForEvent", "wasmDeriveScrambleForEvent", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cubing/puzzles/implementations/dynamic/3x3x3/3x3x3.kpuzzle.svg.ts", "../../../../src/cubing/puzzles/implementations/dynamic/3x3x3/3x3x3-ll.kpuzzle.svg.ts", "../../../../src/cubing/puzzles/implementations/dynamic/3x3x3/3x3x3-ll-face.kpuzzle.svg.ts"],
4
- "sourcesContent": ["export const cube3x3x3SVG = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n \"http://www.w3.org/TR/2001/REC-SVG-20050904/DTD/svg11.dtd\">\n<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 518 440\" preserveAspectRatio=\"xMidYMid meet\">\n <title>3x3x3</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n <g id=\"sticker-thin-v\">\n <rect x=\"0\" y=\"0\" width=\"0.5\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" style=\"opacity: 0.3;\" />\n </g>\n <g id=\"sticker-thin-h\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"0.5\" stroke=\"black\" stroke-width=\"0.04px\" style=\"opacity: 0.3;\" />\n </g>\n </defs>\n <g id=\"puzzle\" transform=\"translate(5,40) scale(40)\">\n <g class=\"hint-facelet\">\n <use data-copy-id=\"CORNERS-l0-o1\" href=\"#sticker-thin-v\" transform=\"translate(6.5,2.1)\" style=\"fill: red\"/>\n <use data-copy-id=\"EDGES-l1-o1\" href=\"#sticker-thin-v\" transform=\"translate(6.5,1.1)\" style=\"fill: red\"/>\n <use data-copy-id=\"CORNERS-l1-o2\" href=\"#sticker-thin-v\" transform=\"translate(6.5,0.1)\" style=\"fill: red\"/>\n\n <use data-copy-id=\"CORNERS-l2-o2\" href=\"#sticker-thin-h\" transform=\"translate(3.3,-0.6)\" style=\"fill: #26f\"/>\n <use data-copy-id=\"EDGES-l2-o1\" href=\"#sticker-thin-h\" transform=\"translate(4.3,-0.6)\" style=\"fill: #26f\"/>\n <use data-copy-id=\"CORNERS-l1-o1\" href=\"#sticker-thin-h\" transform=\"translate(5.3,-0.6)\" style=\"fill: #26f\"/>\n\n <use data-copy-id=\"CORNERS-l3-o2\" href=\"#sticker-thin-v\" transform=\"translate(2.6,2.1)\" style=\"fill: orange\"/>\n <use data-copy-id=\"EDGES-l3-o1\" href=\"#sticker-thin-v\" transform=\"translate(2.6,1.1)\" style=\"fill: orange\"/>\n <use data-copy-id=\"CORNERS-l2-o1\" href=\"#sticker-thin-v\" transform=\"translate(2.6,0.1)\" style=\"fill: orange\"/>\n </g>\n\n <!-- CORNERS -->\n <use id=\"CORNERS-l0-o0\" href=\"#sticker\" transform=\"translate(5.3,2.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l0-o1\" href=\"#sticker\" transform=\"translate(6.5,3.3)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l0-o2\" href=\"#sticker\" transform=\"translate(5.3,3.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l1-o0\" href=\"#sticker\" transform=\"translate(5.3,0.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l1-o1\" href=\"#sticker\" transform=\"translate(9.7,3.3)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l1-o2\" href=\"#sticker\" transform=\"translate(8.5,3.3)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l2-o0\" href=\"#sticker\" transform=\"translate(3.3,0.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l2-o1\" href=\"#sticker\" transform=\"translate(0.1,3.3)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l2-o2\" href=\"#sticker\" transform=\"translate(11.7,3.3)\" style=\"fill: #26f\"/>\n\n <use id=\"CORNERS-l3-o0\" href=\"#sticker\" transform=\"translate(3.3,2.1)\" style=\"fill: white\"/>\n <use id=\"CORNERS-l3-o1\" href=\"#sticker\" transform=\"translate(3.3,3.3)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l3-o2\" href=\"#sticker\" transform=\"translate(2.1,3.3)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l4-o0\" href=\"#sticker\" transform=\"translate(5.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" href=\"#sticker\" transform=\"translate(5.3,5.3)\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" href=\"#sticker\" transform=\"translate(6.5,5.3)\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" href=\"#sticker\" transform=\"translate(3.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" href=\"#sticker\" transform=\"translate(2.1,5.3)\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" href=\"#sticker\" transform=\"translate(3.3,5.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" href=\"#sticker\" transform=\"translate(3.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" href=\"#sticker\" transform=\"translate(11.7,5.3)\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" href=\"#sticker\" transform=\"translate(0.1,5.3)\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" href=\"#sticker\" transform=\"translate(5.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" href=\"#sticker\" transform=\"translate(8.5,5.3)\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" href=\"#sticker\" transform=\"translate(9.7,5.3)\" style=\"fill: #26f\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l0-o0\" href=\"#sticker\" transform=\"translate(4.3,2.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l0-o1\" href=\"#sticker\" transform=\"translate(4.3,3.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l1-o0\" href=\"#sticker\" transform=\"translate(5.3,1.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l1-o1\" href=\"#sticker\" transform=\"translate(7.5,3.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l2-o0\" href=\"#sticker\" transform=\"translate(4.3,0.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l2-o1\" href=\"#sticker\" transform=\"translate(10.7,3.3)\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l3-o0\" href=\"#sticker\" transform=\"translate(3.3,1.1)\" style=\"fill: white\"/>\n <use id=\"EDGES-l3-o1\" href=\"#sticker\" transform=\"translate(1.1,3.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l4-o0\" href=\"#sticker\" transform=\"translate(4.3,6.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" href=\"#sticker\" transform=\"translate(4.3,5.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l5-o0\" href=\"#sticker\" transform=\"translate(5.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l5-o1\" href=\"#sticker\" transform=\"translate(7.5,5.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l6-o0\" href=\"#sticker\" transform=\"translate(4.3,8.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l6-o1\" href=\"#sticker\" transform=\"translate(10.7,5.3)\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l7-o0\" href=\"#sticker\" transform=\"translate(3.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l7-o1\" href=\"#sticker\" transform=\"translate(1.1,5.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l8-o0\" href=\"#sticker\" transform=\"translate(5.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l8-o1\" href=\"#sticker\" transform=\"translate(6.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l9-o0\" href=\"#sticker\" transform=\"translate(3.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l9-o1\" href=\"#sticker\" transform=\"translate(2.1,4.3)\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l10-o0\" href=\"#sticker\" transform=\"translate(9.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l10-o1\" href=\"#sticker\" transform=\"translate(8.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l11-o0\" href=\"#sticker\" transform=\"translate(11.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l11-o1\" href=\"#sticker\" transform=\"translate(0.1,4.3)\" style=\"fill: orange\"/>\n\n <!-- CENTERS -->\n <!-- TODO: Allow the same sticker to be reused for multiple orientations -->\n <use id=\"CENTERS-l0-o0\" href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o1\" href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o2\" href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n <use id=\"CENTERS-l0-o3\" href=\"#sticker\" transform=\"translate(4.3,1.1)\" style=\"fill: white\"/>\n\n <use id=\"CENTERS-l1-o0\" href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o1\" href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o2\" href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o3\" href=\"#sticker\" transform=\"translate(1.1,4.3)\" style=\"fill: orange\"/>\n\n <use id=\"CENTERS-l2-o0\" href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o1\" href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o2\" href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o3\" href=\"#sticker\" transform=\"translate(4.3,4.3)\" style=\"fill: limegreen\"/>\n\n <use id=\"CENTERS-l3-o0\" href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o1\" href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o2\" href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o3\" href=\"#sticker\" transform=\"translate(7.5,4.3)\" style=\"fill: red\"/>\n\n <use id=\"CENTERS-l4-o0\" href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o1\" href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o2\" href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o3\" href=\"#sticker\" transform=\"translate(10.7,4.3)\" style=\"fill: #26f\"/>\n\n <use id=\"CENTERS-l5-o0\" href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o1\" href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o2\" href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o3\" href=\"#sticker\" transform=\"translate(4.3,7.5)\" style=\"fill: yellow\"/>\n </g>\n\n</svg>\n`;\n", "export const cube3x3x3LLSVG = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"288px\" height=\"288px\" viewBox=\"-16 -16 288 288\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>3x3x3 LL</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"-10\" y=\"-10\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n <g id=\"3x3x3-LL\" stroke=\"none\" stroke-width=\"4\" style=\"none\" stroke-linejoin=\"round\">\n <rect id=\"CENTERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o1\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o2\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o3\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n\n <rect id=\"CORNERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l0-o1\" stroke=\"#000000\" style=\"fill: red\" points=\"224 160 252 160 252 252 224 224\"></polygon>\n <polygon id=\"CORNERS-l0-o2\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(206, 238) scale(1, -1) rotate(-90) translate(-206, -238) \" points=\"192 192 220 192 220 284 192 256\"></polygon>\n <rect id=\"CORNERS-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l1-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(206, 18) rotate(-90) translate(-206, -18) \" points=\"192 -28 220 -28 220 64 192 36\"></polygon>\n <polygon id=\"CORNERS-l1-o2\" stroke=\"#000000\" style=\"fill: red\" transform=\"translate(238, 50) scale(1, -1) translate(-238, -50) \" points=\"224 4 252 4 252 96 224 68\"></polygon>\n <rect id=\"CORNERS-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l2-o1\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 50) scale(-1, -1) translate(-18, -50) \" points=\"4 4 32 4 32 96 4 68\"></polygon>\n <polygon id=\"CORNERS-l2-o2\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(50, 18) scale(1, -1) rotate(90) translate(-50, -18) \" points=\"36 -28 64 -28 64 64 36 36\"></polygon>\n <rect id=\"CORNERS-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <polygon id=\"CORNERS-l3-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(50, 238) rotate(90) translate(-50, -238) \" points=\"36 192 64 192 64 284 36 256\"></polygon>\n <polygon id=\"CORNERS-l3-o2\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 206) scale(-1, 1) translate(-18, -206) \" points=\"4 160 32 160 32 252 4 224\"></polygon>\n\n <rect id=\"EDGES-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l0-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(128, 238) scale(1, -1) rotate(90) translate(-128, -238) \" x=\"114\" y=\"206\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o1\" stroke=\"#000000\" style=\"fill: red\" x=\"224\" y=\"96\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(128, 18) scale(1, -1) rotate(90) translate(-128, -18) \" x=\"114\" y=\"-14\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o1\" stroke=\"#000000\" style=\"fill: orange\" x=\"4\" y=\"96\" width=\"28\" height=\"64\"></rect>\n\n </g>\n <g style=\"opacity: 0\">\n <!-- CORNERS -->\n <use id=\"CORNERS-l4-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" href=\"#sticker\" style=\"fill: #26f\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l4-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l5-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l5-o1\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l6-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l6-o1\" href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l7-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l7-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l8-o0\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l8-o1\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l9-o0\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l9-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l10-o0\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l10-o1\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l11-o0\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l11-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <!-- CENTERS -->\n <!-- TODO: Allow the same sticker to be reused for multiple orientations -->\n <use id=\"CENTERS-l1-o0\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o2\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o3\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CENTERS-l2-o0\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o1\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o2\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o3\" href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CENTERS-l3-o0\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o1\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o2\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o3\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CENTERS-l4-o0\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o1\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o2\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o3\" href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"CENTERS-l5-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o1\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o2\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o3\" href=\"#sticker\" style=\"fill: yellow\"/>\n </g>\n</svg>`;\n", "export const cube3x3x3LLFaceSVG = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"204px\" height=\"204px\" viewBox=\"30 30 196 196\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>3x3x3 LL</title>\n <defs>\n <g id=\"sticker\">\n <rect x=\"-10\" y=\"-10\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n <g id=\"3x3x3-LL\" stroke=\"none\" stroke-width=\"4\" style=\"none\" stroke-linejoin=\"round\">\n <rect x=\"32\" y=\"32\" width=\"192\" height=\"192\" stroke=\"black\" stroke-width=\"16px\" />\n <rect id=\"CENTERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o1\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o2\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CENTERS-l0-o3\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"96\" width=\"64\" height=\"64\"></rect>\n\n <rect id=\"CORNERS-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CORNERS-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CORNERS-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <rect id=\"CORNERS-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"160\" width=\"64\" height=\"64\"></rect>\n\n <rect id=\"EDGES-l0-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"160\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"160\" y=\"96\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"96\" y=\"32\" width=\"64\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o0\" stroke=\"#000000\" style=\"fill: white\" x=\"32\" y=\"96\" width=\"64\" height=\"64\"></rect>\n </g>\n <g style=\"opacity: 0\">\n <polygon id=\"CORNERS-l0-o1\" stroke=\"#000000\" style=\"fill: red\" points=\"224 160 252 160 252 252 224 224\"></polygon>\n <polygon id=\"CORNERS-l0-o2\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(206, 238) scale(1, -1) rotate(-90) translate(-206, -238) \" points=\"192 192 220 192 220 284 192 256\"></polygon>\n <polygon id=\"CORNERS-l1-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(206, 18) rotate(-90) translate(-206, -18) \" points=\"192 -28 220 -28 220 64 192 36\"></polygon>\n <polygon id=\"CORNERS-l1-o2\" stroke=\"#000000\" style=\"fill: red\" transform=\"translate(238, 50) scale(1, -1) translate(-238, -50) \" points=\"224 4 252 4 252 96 224 68\"></polygon>\n <polygon id=\"CORNERS-l2-o1\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 50) scale(-1, -1) translate(-18, -50) \" points=\"4 4 32 4 32 96 4 68\"></polygon>\n <polygon id=\"CORNERS-l2-o2\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(50, 18) scale(1, -1) rotate(90) translate(-50, -18) \" points=\"36 -28 64 -28 64 64 36 36\"></polygon>\n <polygon id=\"CORNERS-l3-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(50, 238) rotate(90) translate(-50, -238) \" points=\"36 192 64 192 64 284 36 256\"></polygon>\n <polygon id=\"CORNERS-l3-o2\" stroke=\"#000000\" style=\"fill: orange\" transform=\"translate(18, 206) scale(-1, 1) translate(-18, -206) \" points=\"4 160 32 160 32 252 4 224\"></polygon>\n\n <rect id=\"EDGES-l0-o1\" stroke=\"#000000\" style=\"fill: limegreen\" transform=\"translate(128, 238) scale(1, -1) rotate(90) translate(-128, -238) \" x=\"114\" y=\"206\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l1-o1\" stroke=\"#000000\" style=\"fill: red\" x=\"224\" y=\"96\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l2-o1\" stroke=\"#000000\" style=\"fill: #26f\" transform=\"translate(128, 18) scale(1, -1) rotate(90) translate(-128, -18) \" x=\"114\" y=\"-14\" width=\"28\" height=\"64\"></rect>\n <rect id=\"EDGES-l3-o1\" stroke=\"#000000\" style=\"fill: orange\" x=\"4\" y=\"96\" width=\"28\" height=\"64\"></rect>\n\n <!-- CORNERS -->\n <use id=\"CORNERS-l4-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l4-o1\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CORNERS-l4-o2\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CORNERS-l5-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l5-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CORNERS-l5-o2\" href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CORNERS-l6-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l6-o1\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CORNERS-l6-o2\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CORNERS-l7-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CORNERS-l7-o1\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CORNERS-l7-o2\" href=\"#sticker\" style=\"fill: #26f\"/>\n\n <!-- EDGES -->\n <use id=\"EDGES-l4-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l4-o1\" href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"EDGES-l5-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l5-o1\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l6-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l6-o1\" href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"EDGES-l7-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"EDGES-l7-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l8-o0\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l8-o1\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l9-o0\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"EDGES-l9-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"EDGES-l10-o0\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l10-o1\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"EDGES-l11-o0\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"EDGES-l11-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <!-- CENTERS -->\n <!-- TODO: Allow the same sticker to be reused for multiple orientations -->\n <use id=\"CENTERS-l1-o0\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o1\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o2\" href=\"#sticker\" style=\"fill: orange\"/>\n <use id=\"CENTERS-l1-o3\" href=\"#sticker\" style=\"fill: orange\"/>\n\n <use id=\"CENTERS-l2-o0\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o1\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o2\" href=\"#sticker\" style=\"fill: limegreen\"/>\n <use id=\"CENTERS-l2-o3\" href=\"#sticker\" style=\"fill: limegreen\"/>\n\n <use id=\"CENTERS-l3-o0\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o1\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o2\" href=\"#sticker\" style=\"fill: red\"/>\n <use id=\"CENTERS-l3-o3\" href=\"#sticker\" style=\"fill: red\"/>\n\n <use id=\"CENTERS-l4-o0\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o1\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o2\" href=\"#sticker\" style=\"fill: #26f\"/>\n <use id=\"CENTERS-l4-o3\" href=\"#sticker\" style=\"fill: #26f\"/>\n\n <use id=\"CENTERS-l5-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o1\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o2\" href=\"#sticker\" style=\"fill: yellow\"/>\n <use id=\"CENTERS-l5-o3\" href=\"#sticker\" style=\"fill: yellow\"/>\n </g>\n</svg>`;\n"],
5
- "mappings": ";AAAO,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACArB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAvB,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cubing/puzzles/implementations/dynamic/4x4x4/4x4x4-ll.kpuzzle.svg.ts"],
4
- "sourcesContent": ["export const cube4x4x4LLSVG = `<svg\n height=\"256\"\n viewBox=\"0 0 256 256\"\n width=\"256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n>\n <defs>\n <g id=\"sticker\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\"/>\n </g>\n </defs>\n <g fill=\"none\" fill-rule=\"nonzero\" stroke=\"#000\">\n <g stroke-linejoin=\"round\" stroke-width=\"3\" transform=\"translate(17 17)\">\n <!-- U -->\n <path id=\"CORNERS-l2-o0\" d=\"m37.4 74.2v-36.8h36.8v36.8z\" style=\"fill: white\" />\n <path id=\"EDGES-l0-o0\" d=\"m74.2 37.4h36.8v36.8h-36.8z\" style=\"fill: white\" />\n <path id=\"EDGES-l16-o0\" d=\"m111 74.2v-36.8h36.8v36.8z\" style=\"fill: white\" />\n <path id=\"CORNERS-l1-o0\" d=\"m147.8 37.4h36.8v36.8h-36.8z\" style=\"fill: white\" />\n\n <path id=\"EDGES-l4-o0\" d=\"m74.2 111h-36.8v-36.8h36.8z\" style=\"fill: white\" />\n <path id=\"CENTERS-l0-o0\" d=\"m111 74.2v36.8h-36.8v-36.8z\" style=\"fill: white\" />\n <path id=\"CENTERS-l1-o0\" d=\"m147.8 111h-36.8v-36.8h36.8z\" style=\"fill: white\" />\n <path id=\"EDGES-l1-o0\" d=\"m184.6 74.2v36.8h-36.8v-36.8z\" style=\"fill: white\" />\n\n <path id=\"EDGES-l3-o0\" d=\"m37.4 147.8v-36.8h36.8v36.8z\" style=\"fill: white\" />\n <path id=\"CENTERS-l3-o0\" d=\"m74.2 111h36.8v36.8h-36.8z\" style=\"fill: white\" />\n <path id=\"CENTERS-l2-o0\" d=\"m111 147.8v-36.8h36.8v36.8z\" style=\"fill: white\" />\n <path id=\"EDGES-l12-o0\" d=\"m147.8 111h36.8v36.8h-36.8z\" style=\"fill: white\" />\n\n <path id=\"CORNERS-l3-o0\" d=\"m74.2 184.6h-36.8v-36.8h36.8z\" style=\"fill: white\" />\n <path id=\"EDGES-l8-o0\" d=\"m111 147.8v36.8h-36.8v-36.8z\" style=\"fill: white\" />\n <path id=\"EDGES-l2-o0\" d=\"m147.8 184.6h-36.8v-36.8h36.8z\" style=\"fill: white\" />\n <path id=\"CORNERS-l0-o0\" d=\"m184.6 147.8v36.8h-36.8v-36.8z\" style=\"fill: white\" />\n\n <path id=\"CORNERS-l3-o1\" d=\"m.6 221.4 36.8-36.8h36.8v36.8z\" style=\"fill: limegreen\" />\n <path id=\"EDGES-l8-o1\" d=\"m74.2 184.5h36.8v36.8h-36.8z\" style=\"fill: limegreen\" />\n <path id=\"EDGES-l2-o1\" d=\"m111 221.4v-36.8h36.8v36.8z\" style=\"fill: limegreen\" />\n <path id=\"CORNERS-l0-o2\" d=\"m147.8 184.5h36.8l36.8 36.8h-73.6z\" style=\"fill: limegreen\" />\n\n <path id=\"CORNERS-l2-o1\" d=\"m-18 55.8 36.8-36.8h36.8v36.8z\" style=\"fill: orange\" transform=\"matrix(0 1 -1 0 56.4 18.4)\" />\n <path id=\"EDGES-l4-o1\" d=\"m.6 74.2h36.8v36.8h-36.8z\" style=\"fill: orange\" transform=\"matrix(0 1 -1 0 111.6 73.5)\" />\n <path id=\"EDGES-l3-o1\" d=\"m.6 147.8v-36.8h36.8v36.8z\" style=\"fill: orange\" transform=\"matrix(0 1 -1 0 148.4 110.4)\" />\n <path id=\"CORNERS-l3-o2\" d=\"m-18 166.2h36.8l36.8 36.8h-73.6z\" style=\"fill: orange\" transform=\"matrix(0 1 -1 0 203.6 165.5)\" />\n\n <path id=\"CORNERS-l1-o1\" d=\"m147.8 37.4 36.8-36.8h36.8v36.8z\" style=\"fill: #26f\" transform=\"matrix(-1 0 0 -1 369.2 38)\" />\n <path id=\"EDGES-l16-o1\" d=\"m111 .6h36.8v36.8h-36.8z\" style=\"fill: #26f\" transform=\"matrix(-1 0 0 -1 258.8 38)\" />\n <path id=\"EDGES-l0-o1\" d=\"m74.2 37.4v-36.8h36.8v36.8z\" style=\"fill: #26f\" transform=\"matrix(-1 0 0 -1 185.2 38)\" />\n <path id=\"CORNERS-l2-o2\" d=\"m.6.6h36.8l36.8 36.8h-73.6z\" style=\"fill: #26f\" transform=\"matrix(-1 0 0 -1 74.8 38)\" />\n\n <path id=\"CORNERS-l0-o1\" d=\"m166.200018 203 36.8-36.8h36.8v36.8z\" style=\"fill: red\" transform=\"matrix(0 -1 1 0 18.4 387.6)\" />\n <path id=\"EDGES-l12-o1\" d=\"m184.6 111h36.8v36.8h-36.8z\" style=\"fill: red\" transform=\"matrix(0 -1 1 0 73.6 332.4)\" />\n <path id=\"EDGES-l1-o1\" d=\"m184.6 111v-36.8h36.8v36.8z\" style=\"fill: red\" transform=\"matrix(0 -1 1 0 110.4 295.6)\" />\n <path id=\"CORNERS-l1-o2\" d=\"m166.200012 19h36.8l36.8 36.8h-73.6z\" style=\"fill: red\" transform=\"matrix(0 -1 1 0 165.6 240.4)\" />\n </g>\n <g opacity=\"0\" transform=\"translate(17 242)\">\n <path id=\"EDGES-l9-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"CENTERS-l9-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"CENTERS-l8-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"EDGES-l5-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"EDGES-l11-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"CENTERS-l11-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"CENTERS-l10-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"EDGES-l15-o0\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"CORNERS-l4-o1\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"EDGES-l10-o1\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"EDGES-l20-o1\" href=\"#sticker\" style=\"fill: limegreen\" />\n <path id=\"CORNERS-l5-o2\" href=\"#sticker\" style=\"fill: limegreen\" />\n\n <path id=\"CORNERS-l5-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l20-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l10-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"CORNERS-l4-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l21-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"CENTERS-l21-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"CENTERS-l20-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l6-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l23-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"CENTERS-l23-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"CENTERS-l22-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l14-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"CORNERS-l7-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l22-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"EDGES-l18-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n <path id=\"CORNERS-l6-o0\" href=\"#sticker\" style=\"fill: yellow\"/>\n\n <path id=\"EDGES-l5-o1\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"EDGES-l11-o1\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"CORNERS-l5-o1\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"EDGES-l6-o1\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"CENTERS-l6-o0\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"CENTERS-l5-o0\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"CENTERS-l4-o0\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"CENTERS-l7-o0\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"EDGES-l23-o1\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"CORNERS-l6-o2\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"EDGES-l7-o1\" href=\"#sticker\" style=\"fill: orange\" />\n <path id=\"EDGES-l17-o1\" href=\"#sticker\" style=\"fill: orange\" />\n\n <path id=\"CORNERS-l6-o1\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"EDGES-l18-o1\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"EDGES-l22-o1\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"CORNERS-l7-o2\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"EDGES-l19-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"CENTERS-l19-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"CENTERS-l18-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"EDGES-l7-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"EDGES-l17-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"CENTERS-l17-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"CENTERS-l16-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n <path id=\"EDGES-l13-o0\" href=\"#sticker\" style=\"fill: #26f\" />\n\n <path id=\"CORNERS-l4-o2\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"EDGES-l15-o1\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"EDGES-l9-o1\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"CENTERS-l12-o0\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"CENTERS-l15-o0\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"EDGES-l21-o1\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"EDGES-l14-o1\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"CENTERS-l14-o0\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"CENTERS-l13-o0\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"EDGES-l13-o1\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"EDGES-l19-o1\" href=\"#sticker\" style=\"fill: red\" />\n <path id=\"CORNERS-l7-o1\" href=\"#sticker\" style=\"fill: red\" />\n </g>\n </g>\n</svg>`;\n"],
5
- "mappings": ";AAAO,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cubing/puzzles/implementations/dynamic/megaminx/megaminx-ll.kpuzzle.svg.ts"],
4
- "sourcesContent": ["export const megaminxLLSVG = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"360px\" height=\"343px\" viewBox=\"0 0 360 343\" version=\"1.1\">\n <title>Megaminx LL</title>\n <defs>\n <g id=\"bogus\">\n <rect x=\"-10\" y=\"-10\" width=\"1\" height=\"1\" stroke=\"black\" stroke-width=\"0.04px\" />\n </g>\n </defs>\n <g fill=\"none\" fill-rule=\"nonzero\" stroke=\"#000\">\n <g style=\"stroke: black; stroke-width: 6; stroke-linecap: butt; stroke-linejoin: round;\">\n <path id=\"CENTERS-l0-o0\" style=\"fill: white;\" d=\"M 179.5 143.480469 L 137.082031 174.296875 L 153.285156 224.164062 L 205.714844 224.164062 L 221.917969 174.296875 Z M 179.5 143.480469 \"/> />\n\n <path id=\"CORNERS-l6-o0\" style=\"fill: white;\" d=\"M 140.175781 92.605469 L 179.5 143.480469 L 218.824219 92.605469 L 179.5 64.035156 Z M 140.175781 92.605469 \"/> />\n <path id=\"CORNERS-l6-o1\" style=\"fill: yellow;\" d=\"M 125.15625 46.378906 L 140.175781 92.605469 L 179.5 64.035156 L 179.5 6.894531 Z M 125.15625 46.378906 \"/> />\n <path id=\"CORNERS-l6-o2\" style=\"fill: rgb(34, 102, 255);\" d=\"M 179.5 64.035156 L 218.824219 92.605469 L 233.84375 46.378906 L 179.5 6.894531 Z M 179.5 64.035156 \"/> />\n\n <path id=\"EDGES-l26-o0\" style=\"fill: white;\" d=\"M 100.851562 121.175781 L 137.082031 174.296875 L 179.5 143.480469 L 140.175781 92.605469 Z M 100.851562 121.175781 \"/> />\n <path id=\"EDGES-l26-o1\" style=\"fill: yellow;\" d=\"M 61.527344 92.605469 L 100.851562 121.175781 L 140.175781 92.605469 L 125.15625 46.378906 Z M 61.527344 92.605469 \"/> />\n\n <path id=\"CORNERS-l1-o0\" style=\"fill: white;\" d=\"M 76.546875 195.976562 L 137.082031 174.296875 L 100.851562 121.175781 L 61.527344 149.75 Z M 76.546875 195.976562 \"/> />\n <path id=\"CORNERS-l1-o1\" style=\"fill: purple;\" d=\"M 27.9375 195.976562 L 76.546875 195.976562 L 61.527344 149.75 L 7.179688 132.089844 Z M 27.9375 195.976562 \"/> />\n <path id=\"CORNERS-l1-o2\" style=\"fill: yellow;\" d=\"M 61.527344 149.75 L 100.851562 121.175781 L 61.527344 92.605469 L 7.179688 132.089844 Z M 61.527344 149.75 \"/> />\n\n <path id=\"EDGES-l1-o0\" style=\"fill: white;\" d=\"M 91.566406 242.207031 L 153.285156 224.164062 L 137.082031 174.296875 L 76.546875 195.976562 Z M 91.566406 242.207031 \"/> />\n <path id=\"EDGES-l1-o1\" style=\"fill: purple;\" d=\"M 52.242188 270.777344 L 91.566406 242.207031 L 76.546875 195.976562 L 27.9375 195.976562 Z M 52.242188 270.777344 \"/> />\n\n <path id=\"CORNERS-l0-o0\" style=\"fill: white;\" d=\"M 155.195312 288.4375 L 153.285156 224.164062 L 91.566406 242.207031 L 106.585938 288.4375 Z M 155.195312 288.4375 \"/> />\n <path id=\"CORNERS-l0-o1\" style=\"fill: limegreen;\" d=\"M 140.175781 334.664062 L 155.195312 288.4375 L 106.585938 288.4375 L 73 334.664062 Z M 140.175781 334.664062 \"/> />\n <path id=\"CORNERS-l0-o2\" style=\"fill: purple;\" d=\"M 106.585938 288.4375 L 91.566406 242.207031 L 52.242188 270.777344 L 73 334.664062 Z M 106.585938 288.4375 \"/> />\n\n <path id=\"EDGES-l0-o0\" style=\"fill: white;\" d=\"M 203.804688 288.4375 L 205.714844 224.164062 L 153.285156 224.164062 L 155.195312 288.4375 Z M 203.804688 288.4375 \"/> />\n <path id=\"EDGES-l0-o1\" style=\"fill: limegreen;\" d=\"M 218.824219 334.664062 L 203.804688 288.4375 L 155.195312 288.4375 L 140.175781 334.664062 Z M 218.824219 334.664062 \"/> />\n\n <path id=\"CORNERS-l2-o0\" style=\"fill: white;\" d=\"M 267.433594 242.207031 L 205.714844 224.164062 L 203.804688 288.4375 L 252.414062 288.4375 Z M 267.433594 242.207031 \"/> />\n <path id=\"CORNERS-l2-o1\" style=\"fill: red;\" d=\"M 306.757812 270.777344 L 267.433594 242.207031 L 252.414062 288.4375 L 286 334.664062 Z M 306.757812 270.777344 \"/> />\n <path id=\"CORNERS-l2-o2\" style=\"fill: limegreen;\" d=\"M 252.414062 288.4375 L 203.804688 288.4375 L 218.824219 334.664062 L 286 334.664062 Z M 252.414062 288.4375 \"/> />\n\n <path id=\"EDGES-l7-o0\" style=\"fill: white;\" d=\"M 282.453125 195.976562 L 221.917969 174.296875 L 205.714844 224.164062 L 267.433594 242.207031 Z M 282.453125 195.976562 \"/> />\n <path id=\"EDGES-l7-o1\" style=\"fill: red;\" d=\"M 331.0625 195.976562 L 282.453125 195.976562 L 267.433594 242.207031 L 306.757812 270.777344 Z M 331.0625 195.976562 \"/> />\n\n <path id=\"CORNERS-l7-o0\" style=\"fill: white;\" d=\"M 258.148438 121.175781 L 221.917969 174.296875 L 282.453125 195.976562 L 297.472656 149.75 Z M 258.148438 121.175781 \"/> />\n <path id=\"CORNERS-l7-o1\" style=\"fill: rgb(34, 102, 255);\" d=\"M 297.472656 92.605469 L 258.148438 121.175781 L 297.472656 149.75 L 351.820312 132.089844 Z M 297.472656 92.605469 \"/> />\n <path id=\"CORNERS-l7-o2\" style=\"fill: red;\" d=\"M 297.472656 149.75 L 282.453125 195.976562 L 331.0625 195.976562 L 351.820312 132.089844 Z M 297.472656 149.75 \"/> />\n\n <path id=\"EDGES-l6-o0\" style=\"fill: white;\" d=\"M 218.824219 92.605469 L 179.5 143.480469 L 221.917969 174.296875 L 258.148438 121.175781 Z M 218.824219 92.605469 \"/> />\n <path id=\"EDGES-l6-o1\" style=\"fill: rgb(34, 102, 255);\" d=\"M 233.84375 46.378906 L 218.824219 92.605469 L 258.148438 121.175781 L 297.472656 92.605469 Z M 233.84375 46.378906 \"/> />\n </g>\n <g opacity=\"0\">\n <g><title>U</title>\n <polygon id=\"CENTERS-l0-o1\" href=\"#bogus\" style=\"fill: white\"/>\n <polygon id=\"CENTERS-l0-o2\" href=\"#bogus\" style=\"fill: white\"/>\n <polygon id=\"CENTERS-l0-o3\" href=\"#bogus\" style=\"fill: white\"/>\n <polygon id=\"CENTERS-l0-o4\" href=\"#bogus\" style=\"fill: white\"/>\n </g><g><title>F</title>\n <polygon id=\"EDGES-l8-o0\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"EDGES-l2-o0\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CENTERS-l2-o0\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CENTERS-l2-o1\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CENTERS-l2-o2\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CENTERS-l2-o3\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CENTERS-l2-o4\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"EDGES-l27-o1\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CORNERS-l19-o1\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CORNERS-l8-o0\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"EDGES-l3-o0\" href=\"#bogus\" style=\"fill: limegreen\"/>\n <polygon id=\"CORNERS-l3-o2\" href=\"#bogus\" style=\"fill: limegreen\"/>\n </g><g><title>L</title>\n <polygon id=\"EDGES-l5-o1\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"EDGES-l8-o1\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CENTERS-l3-o0\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CENTERS-l3-o1\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CENTERS-l3-o2\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CENTERS-l3-o3\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CENTERS-l3-o4\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"EDGES-l4-o1\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CORNERS-l3-o1\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CORNERS-l4-o0\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"EDGES-l10-o1\" href=\"#bogus\" style=\"fill: #660099\"/>\n <polygon id=\"CORNERS-l5-o2\" href=\"#bogus\" style=\"fill: #660099\"/>\n </g><g><title>BL</title>\n <polygon id=\"EDGES-l14-o1\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"EDGES-l5-o0\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CENTERS-l4-o0\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CENTERS-l4-o1\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CENTERS-l4-o2\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CENTERS-l4-o3\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CENTERS-l4-o4\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"EDGES-l12-o1\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CORNERS-l5-o1\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CORNERS-l10-o0\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"EDGES-l16-o0\" href=\"#bogus\" style=\"fill: yellow\"/>\n <polygon id=\"CORNERS-l11-o2\" href=\"#bogus\" style=\"fill: yellow\"/>\n </g><g><title>BR</title>\n <polygon id=\"EDGES-l21-o0\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"EDGES-l14-o0\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CENTERS-l5-o0\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CENTERS-l5-o1\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CENTERS-l5-o2\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CENTERS-l5-o3\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CENTERS-l5-o4\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"EDGES-l18-o1\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CORNERS-l11-o1\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CORNERS-l13-o0\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"EDGES-l28-o1\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n <polygon id=\"CORNERS-l12-o2\" href=\"#bogus\" style=\"fill: rgb(34, 102, 255)\"/>\n </g><g><title>R</title>\n <polygon id=\"CORNERS-l19-o2\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"EDGES-l19-o1\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"CENTERS-l1-o0\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"CENTERS-l1-o1\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"CENTERS-l1-o2\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"CENTERS-l1-o3\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"CENTERS-l1-o4\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"EDGES-l2-o1\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"EDGES-l21-o1\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"CORNERS-l12-o1\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"EDGES-l15-o1\" href=\"#bogus\" style=\"fill: red\"/>\n <polygon id=\"CORNERS-l14-o0\" href=\"#bogus\" style=\"fill: red\"/>\n </g><g><title>C</title>\n <polygon id=\"CORNERS-l8-o1\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"EDGES-l9-o1\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CORNERS-l19-o0\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"EDGES-l19-o0\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CENTERS-l6-o0\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CENTERS-l6-o1\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CENTERS-l6-o2\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CENTERS-l6-o3\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CENTERS-l6-o4\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"EDGES-l27-o0\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"EDGES-l29-o1\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CORNERS-l14-o2\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CORNERS-l16-o1\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"EDGES-l22-o0\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n <polygon id=\"CORNERS-l17-o2\" href=\"#bogus\" style=\"fill: #ffffd0\"/>\n </g><g><title>A</title>\n <polygon id=\"CORNERS-l4-o1\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"EDGES-l13-o1\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CORNERS-l3-o0\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"EDGES-l3-o1\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CENTERS-l7-o0\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CENTERS-l7-o1\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CENTERS-l7-o2\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CENTERS-l7-o3\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CENTERS-l7-o4\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"EDGES-l4-o0\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"EDGES-l9-o0\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CORNERS-l8-o2\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CORNERS-l17-o1\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"EDGES-l11-o0\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n <polygon id=\"CORNERS-l9-o2\" href=\"#bogus\" style=\"fill: #3399ff\"/>\n </g><g><title>I</title>\n <polygon id=\"CORNERS-l5-o0\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"EDGES-l12-o0\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CORNERS-l4-o2\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"EDGES-l13-o0\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CENTERS-l8-o0\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CENTERS-l8-o1\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CENTERS-l8-o2\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CENTERS-l8-o3\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CENTERS-l8-o4\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"EDGES-l10-o0\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"EDGES-l23-o0\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CORNERS-l9-o1\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CORNERS-l18-o2\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"EDGES-l17-o0\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n <polygon id=\"CORNERS-l10-o1\" href=\"#bogus\" style=\"fill: #ff6633\"/>\n </g><g><title>BF</title>\n <polygon id=\"CORNERS-l11-o0\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"EDGES-l18-o0\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CORNERS-l10-o2\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"EDGES-l17-o1\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CENTERS-l10-o0\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CENTERS-l10-o1\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CENTERS-l10-o2\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CENTERS-l10-o3\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CENTERS-l10-o4\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"EDGES-l16-o1\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"EDGES-l20-o0\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CORNERS-l18-o1\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CORNERS-l15-o2\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"EDGES-l24-o1\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n <polygon id=\"CORNERS-l13-o1\" href=\"#bogus\" style=\"fill: #99ff00\"/>\n </g><g><title>E</title>\n <polygon id=\"CORNERS-l12-o0\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"EDGES-l15-o0\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CORNERS-l13-o2\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"EDGES-l24-o0\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CENTERS-l9-o0\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CENTERS-l9-o1\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CENTERS-l9-o2\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CENTERS-l9-o3\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CENTERS-l9-o4\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"EDGES-l28-o0\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"EDGES-l25-o0\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CORNERS-l15-o1\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CORNERS-l16-o2\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"EDGES-l29-o0\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n <polygon id=\"CORNERS-l14-o1\" href=\"#bogus\" style=\"fill: #ff66cc\"/>\n </g><g><title>D</title>\n <polygon id=\"CORNERS-l17-o0\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"EDGES-l11-o1\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CORNERS-l16-o0\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"EDGES-l25-o1\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CENTERS-l11-o0\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CENTERS-l11-o1\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CENTERS-l11-o2\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CENTERS-l11-o3\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CENTERS-l11-o4\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"EDGES-l22-o1\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"EDGES-l20-o1\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CORNERS-l15-o0\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CORNERS-l18-o0\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"EDGES-l23-o1\" href=\"#bogus\" style=\"fill: #999999\"/>\n <polygon id=\"CORNERS-l9-o0\" href=\"#bogus\" style=\"fill: #999999\"/>\n </g>\n </g>\n </g>\n</svg>\n`;\n"],
5
- "mappings": ";AAAO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
- "names": []
7
- }