cubing 0.35.11 → 0.35.12

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 (38) hide show
  1. package/dist/esm/bluetooth/index.js +1 -1
  2. package/dist/esm/{chunk-67PUZ2YF.js → chunk-3EERASOG.js} +2 -10
  3. package/dist/esm/{chunk-67PUZ2YF.js.map → chunk-3EERASOG.js.map} +2 -2
  4. package/dist/esm/{chunk-ZUQFCYEB.js → chunk-772NFOZC.js} +4 -4
  5. package/dist/esm/{chunk-ZUQFCYEB.js.map → chunk-772NFOZC.js.map} +0 -0
  6. package/dist/esm/{chunk-MTMVMFDV.js → chunk-HH4MB7GD.js} +9 -11
  7. package/dist/esm/chunk-HH4MB7GD.js.map +7 -0
  8. package/dist/esm/{chunk-DKG7EU7X.js → chunk-LZDVZWUN.js} +2 -2
  9. package/dist/esm/{chunk-DKG7EU7X.js.map → chunk-LZDVZWUN.js.map} +0 -0
  10. package/dist/esm/{chunk-A4YLPGWM.js → chunk-VKYLB4CX.js} +2 -2
  11. package/dist/esm/chunk-VKYLB4CX.js.map +7 -0
  12. package/dist/esm/puzzles/index.js +1 -1
  13. package/dist/esm/scramble/index.js +4 -4
  14. package/dist/esm/search/index.js +4 -4
  15. package/dist/esm/{search-dynamic-sgs-side-events-JMSGX7J4.js → search-dynamic-sgs-side-events-FJPVSSGY.js} +2 -2
  16. package/dist/esm/{search-dynamic-sgs-side-events-JMSGX7J4.js.map → search-dynamic-sgs-side-events-FJPVSSGY.js.map} +0 -0
  17. package/dist/esm/{search-dynamic-sgs-unofficial-A576WLSU.js → search-dynamic-sgs-unofficial-46HUMAUV.js} +2 -2
  18. package/dist/esm/{search-dynamic-sgs-unofficial-A576WLSU.js.map → search-dynamic-sgs-unofficial-46HUMAUV.js.map} +0 -0
  19. package/dist/esm/{search-dynamic-solve-4x4x4-4HMLSN4H.js → search-dynamic-solve-4x4x4-C4HESA2T.js} +3 -3
  20. package/dist/esm/{search-dynamic-solve-4x4x4-4HMLSN4H.js.map → search-dynamic-solve-4x4x4-C4HESA2T.js.map} +0 -0
  21. package/dist/esm/{search-worker-inside-generated-string-BOQDJKWH.js → search-worker-inside-generated-string-NG26QUL3.js} +3 -3
  22. package/dist/esm/search-worker-inside-generated-string-NG26QUL3.js.map +7 -0
  23. package/dist/esm/{search-worker-js-entry-BJHVT6GJ.js → search-worker-js-entry-IXQOORKW.js} +4 -4
  24. package/dist/esm/{search-worker-js-entry-BJHVT6GJ.js.map → search-worker-js-entry-IXQOORKW.js.map} +0 -0
  25. package/dist/esm/{search-worker-ts-entry-P4MW2TTD.js → search-worker-ts-entry-4WOQIPT3.js} +2 -2
  26. package/dist/esm/{search-worker-ts-entry-P4MW2TTD.js.map → search-worker-ts-entry-4WOQIPT3.js.map} +0 -0
  27. package/dist/esm/twisty/index.js +11 -6
  28. package/dist/esm/twisty/index.js.map +2 -2
  29. package/dist/esm/{twisty-dynamic-3d-WMBYBJLZ.js → twisty-dynamic-3d-DP6NQOTH.js} +3 -3
  30. package/dist/esm/{twisty-dynamic-3d-WMBYBJLZ.js.map → twisty-dynamic-3d-DP6NQOTH.js.map} +0 -0
  31. package/dist/types/{TwizzleLink-a537bbef.d.ts → TwizzleLink-7c6bc769.d.ts} +1 -1
  32. package/dist/types/notation/index.d.ts +1 -1
  33. package/dist/types/puzzles/index.d.ts +2 -2
  34. package/dist/types/twisty/index.d.ts +2 -2
  35. package/package.json +1 -1
  36. package/dist/esm/chunk-A4YLPGWM.js.map +0 -7
  37. package/dist/esm/chunk-MTMVMFDV.js.map +0 -7
  38. package/dist/esm/search-worker-inside-generated-string-BOQDJKWH.js.map +0 -7
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/twisty/debug.ts", "../../src/cubing/twisty/model/PromiseFreshener.ts", "../../src/cubing/twisty/model/props/TwistyProp.ts", "../../src/cubing/twisty/controllers/RenderScheduler.ts", "../../src/cubing/twisty/model/props/puzzle/display/HintFaceletProp.ts", "../../src/cubing/twisty/views/3D/TAU.ts", "../../src/cubing/twisty/views/node-custom-element-shims.ts", "../../src/cubing/twisty/views/ManagedCustomElement.ts", "../../src/cubing/vendor/mit/three/examples/jsm/libs/stats.modified.module.ts", "../../src/cubing/twisty/heavy-code-imports/3d.ts", "../../src/cubing/twisty/views/canvas.ts", "../../src/cubing/twisty/views/3D/Twisty3DVantage.css.ts", "../../src/cubing/twisty/views/3D/DragTracker.ts", "../../src/cubing/twisty/views/3D/RendererPool.ts", "../../src/cubing/twisty/views/3D/TwistyOrbitControls.ts", "../../src/cubing/twisty/views/3D/Twisty3DVantage.ts"],
4
+ "sourcesContent": ["export const twistyDebugGlobals: {\n // WARNING: The current shared renderer implementation has performance issues, especially in Safari.\n // Avoid using for players that are likely to have dimensions approaching 1 megapixel or higher.\n // TODO: use a dedicated renderer while fullscreen?\n // - \"auto\": Default heuristics.\n // - \"always\": Force all new (i.e. constructed in the future) renderers to be shared\n // - \"never\": Force all new (i.e. constructed in the future) renderers to be dedicated\n shareAllNewRenderers: \"auto\" | \"always\" | \"never\";\n showRenderStats: boolean;\n} = {\n shareAllNewRenderers: \"auto\",\n showRenderStats: false,\n};\n\nexport function setTwistyDebug(\n options: Partial<typeof twistyDebugGlobals>,\n): void {\n for (const [key, value] of Object.entries(options)) {\n if (key in twistyDebugGlobals) {\n (twistyDebugGlobals as any)[key] = value;\n }\n }\n}\n", "// TODO: Pick a much better name.\nexport class PromiseFreshener<T> {\n #latestAssignedIdx = 0;\n #latestResolvedIdx = 0;\n\n // TODO: reject instead? Drop?\n async queue(\n p: Promise<T>,\n ): Promise<{ fresh: false } | { fresh: true; result: T }> {\n const idx = ++this.#latestAssignedIdx;\n const result = await p;\n if (idx > this.#latestResolvedIdx) {\n this.#latestResolvedIdx = idx;\n return {\n fresh: true,\n result: result,\n };\n } else {\n return { fresh: false };\n }\n }\n}\n\n// This will silenty drop a queued Promise (i.e. not resolve it) if a\n// newer queued one already resolved first. This is useful for classes that want\n// to know the \"latest\" state of something without jumping back to an older\n// value by accident.\n// TODO: Remove this because it's too easy to misuse?\nexport class StaleDropper<T> {\n #latestAssignedIdx = 0;\n #latestResolvedIdx = 0;\n\n queue(p: Promise<T>): Promise<T> {\n // rome-ignore lint/suspicious/noAsyncPromiseExecutor: This is a very rare case where we *do* want to drop a Promise sometimes.\n return new Promise(async (resolve, reject) => {\n try {\n const idx = ++this.#latestAssignedIdx;\n const result = await p;\n if (idx > this.#latestResolvedIdx) {\n this.#latestResolvedIdx = idx;\n resolve(result);\n }\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n", "import { from } from \"../../../vendor/mit/p-lazy/p-lazy\";\nimport { StaleDropper } from \"../PromiseFreshener\";\nimport type { UserVisibleErrorTracker } from \"../UserVisibleErrorTracker\";\n\n// rome-ignore lint/nursery/noBannedTypes: TODO: can we use `satisfies` below instead of using this?\ntype InputRecord = {};\n\nexport type InputProps<T extends InputRecord> = {\n [s in keyof T]: TwistyPropParent<T[s]>;\n};\n\ntype InputPromises<T extends InputRecord> = {\n [s in keyof T]: Promise<T[s]>;\n};\n\ninterface SourceEventDetail<OutputType> {\n sourceProp: TwistyPropSource<OutputType, any>;\n value: Promise<OutputType>; // TODO: remove?\n generation: number;\n}\n\ntype SourceEvent<T> = CustomEvent<SourceEventDetail<T>>;\n\nexport type PromiseOrValue<T> = T | Promise<T>;\n\n// Values of T must be immutable.\nlet globalSourceGeneration = 0; // This is incremented before being used, so 1 will be the first active value.\nexport abstract class TwistyPropParent<T> {\n public abstract get(): Promise<T>;\n\n // Don't overwrite this. Overwrite `canReuseValue` instead.\n public canReuse(v1: T, v2: T): boolean {\n return v1 === v2 || this.canReuseValue(v1, v2);\n }\n\n // Overwrite with a cheap semantic comparison when possible.\n // Note that this is not called if `v1 === v2` (in which case the value is automatically reused).\n protected canReuseValue(_v1: T, _v2: T): boolean {\n return false;\n }\n\n debugGetChildren(): TwistyPropDerived<any, any>[] {\n return Array.from(this.#children.values());\n }\n\n // Propagation\n\n #children: Set<TwistyPropDerived<any, any>> = new Set();\n protected addChild(child: TwistyPropDerived<any, any>): void {\n this.#children.add(child);\n }\n\n protected removeChild(child: TwistyPropDerived<any, any>): void {\n this.#children.delete(child);\n }\n\n protected lastSourceGeneration: number = 0;\n // Synchronously marks all descendants as stale. This doesn't actually\n // literally mark as stale, but it updates the last source generation, which\n // is used to tell if a cahced result is stale.\n protected markStale(sourceEvent: SourceEvent<any>): void {\n if (sourceEvent.detail.generation !== globalSourceGeneration) {\n // The full stale propagation is synchronous, so there should not be a new one yet.\n throw new Error(\"A TwistyProp was marked stale too late!\");\n }\n if (this.lastSourceGeneration === sourceEvent.detail.generation) {\n // Already propagated.\n return;\n }\n this.lastSourceGeneration = sourceEvent.detail.generation;\n for (const child of this.#children) {\n child.markStale(sourceEvent);\n }\n // We schedule sending out events *after* the (synchronous) propagation has happened, in\n // case one of the listeners updates a source again.\n this.#scheduleRawDispatch();\n }\n\n #rawListeners: Set<() => void> = new Set();\n /** @deprecated */\n addRawListener(listener: () => void, options?: { initial: boolean }): void {\n this.#rawListeners.add(listener);\n if (options?.initial) {\n listener(); // TODO: wrap in a try?\n }\n }\n\n /** @deprecated */\n removeRawListener(listener: () => void): void {\n this.#rawListeners.delete(listener);\n }\n\n /** @deprecated */\n #scheduleRawDispatch(): void {\n if (!this.#rawDispatchPending) {\n this.#rawDispatchPending = true;\n setTimeout(() => this.#dispatchRawListeners(), 0);\n }\n }\n\n #rawDispatchPending: boolean = false;\n #dispatchRawListeners(): void {\n if (!this.#rawDispatchPending) {\n throw new Error(\"Invalid dispatch state!\");\n }\n for (const listener of this.#rawListeners) {\n listener(); // TODO: wrap in a try?\n }\n this.#rawDispatchPending = false;\n }\n\n #freshListeners: Map<(value: T) => void, () => void> = new Map();\n // TODO: Pick a better name.\n public addFreshListener(listener: (value: T) => void): void {\n const staleDropper: StaleDropper<T> = new StaleDropper<T>();\n let lastResult: T | null = null;\n const callback = async () => {\n const result = await staleDropper.queue(this.get());\n if (lastResult !== null && this.canReuse(lastResult, result)) {\n return;\n }\n lastResult = result;\n listener(result);\n };\n this.#freshListeners.set(listener, callback);\n this.addRawListener(callback, { initial: true });\n }\n\n public removeFreshListener(listener: (value: T) => void): void {\n this.removeRawListener(this.#freshListeners.get(listener)!); // TODO: throw a custom error?\n this.#freshListeners.delete(listener);\n }\n}\n\nexport abstract class TwistyPropSource<\n OutputType,\n InputType = OutputType,\n> extends TwistyPropParent<OutputType> {\n #value: Promise<OutputType>;\n\n public abstract getDefaultValue(): PromiseOrValue<OutputType>;\n\n constructor(initialValue?: PromiseOrValue<InputType>) {\n super();\n this.#value = from(() => this.getDefaultValue());\n if (initialValue) {\n this.#value = this.deriveFromPromiseOrValue(initialValue, this.#value);\n }\n }\n\n set(input: PromiseOrValue<InputType>): void {\n this.#value = this.deriveFromPromiseOrValue(input, this.#value);\n\n const sourceEventDetail: SourceEventDetail<OutputType> = {\n sourceProp: this,\n value: this.#value,\n generation: ++globalSourceGeneration,\n };\n this.markStale(\n new CustomEvent<SourceEventDetail<OutputType>>(\"stale\", {\n detail: sourceEventDetail,\n }),\n );\n }\n\n async get(): Promise<OutputType> {\n return this.#value;\n }\n\n protected async deriveFromPromiseOrValue(\n input: PromiseOrValue<InputType>,\n oldValuePromise: Promise<OutputType>,\n ): Promise<OutputType> {\n return this.derive(await input, oldValuePromise);\n }\n\n // TODO: add an indirect layer to cache the derivation?\n protected abstract derive(\n input: InputType,\n oldValuePromise: Promise<OutputType>,\n ): PromiseOrValue<OutputType>;\n}\n\nexport abstract class SimpleTwistyPropSource<\n SimpleType,\n> extends TwistyPropSource<SimpleType> {\n protected override derive(input: SimpleType): PromiseOrValue<SimpleType> {\n return input;\n }\n}\n\n// TODO: Can we support `null` as a valid output value without loosening type\n// safety?\nexport const NO_VALUE = Symbol(\"no value\");\nexport type NoValueType = typeof NO_VALUE;\n\nexport abstract class TwistyPropDerived<\n InputTypes extends InputRecord,\n OutputType,\n> extends TwistyPropParent<OutputType> {\n // cachedInputs:\n #parents: InputProps<InputTypes>;\n\n constructor(\n parents: InputProps<InputTypes>,\n protected userVisibleErrorTracker?: UserVisibleErrorTracker,\n ) {\n super();\n this.#parents = parents;\n for (const parent of Object.values(parents)) {\n (\n parent as TwistyPropDerived<InputProps<InputTypes>, OutputType>\n ).addChild(this);\n }\n }\n\n #cachedLastSuccessfulCalculation: {\n inputs: InputTypes;\n output: Promise<OutputType>;\n generation: number;\n } | null = null;\n\n #cachedLatestGenerationCalculation: {\n output: Promise<OutputType>;\n generation: number;\n } | null = null;\n\n public async get(): Promise<OutputType> {\n const generation = this.lastSourceGeneration;\n\n if (this.#cachedLatestGenerationCalculation?.generation === generation) {\n return this.#cachedLatestGenerationCalculation.output;\n }\n\n const latestGenerationCalculation = {\n generation,\n output: this.#cacheDerive(\n this.#getParents(),\n generation,\n this.#cachedLastSuccessfulCalculation,\n ),\n };\n this.#cachedLatestGenerationCalculation = latestGenerationCalculation;\n\n this.userVisibleErrorTracker?.reset();\n return latestGenerationCalculation.output;\n }\n\n async #getParents(): Promise<InputTypes> {\n const inputValuePromises: InputPromises<InputRecord> = {} as any; // TODO\n for (const [key, parent] of Object.entries(this.#parents)) {\n (inputValuePromises as Record<string, Promise<unknown>>)[key] = (\n parent as TwistyPropParent<unknown>\n ).get();\n }\n\n const inputs: InputTypes = {} as any; // TODO\n for (const key in this.#parents) {\n inputs[key] = (await (\n inputValuePromises as Record<string, Promise<unknown>>\n )[key]) as any;\n }\n return inputs;\n }\n\n async #cacheDerive(\n inputsPromise: PromiseOrValue<InputTypes>,\n generation: number,\n cachedLatestGenerationCalculation: {\n inputs: InputTypes;\n output: Promise<OutputType>;\n generation: number;\n } | null = null,\n ): Promise<OutputType> {\n const inputs = await inputsPromise;\n\n const cache = (output: OutputType): OutputType => {\n this.#cachedLastSuccessfulCalculation = {\n inputs,\n output: Promise.resolve(output),\n generation,\n };\n return output;\n };\n\n if (!cachedLatestGenerationCalculation) {\n return cache(await this.derive(inputs));\n }\n\n const cachedInputs = cachedLatestGenerationCalculation.inputs;\n for (const key in this.#parents) {\n const parent = this.#parents[key];\n if (!parent.canReuse(inputs[key], cachedInputs[key])) {\n return cache(await this.derive(inputs));\n }\n }\n\n return cachedLatestGenerationCalculation.output;\n }\n\n protected abstract derive(input: InputTypes): PromiseOrValue<OutputType>;\n}\n\nexport class FreshListenerManager {\n #disconnectionFunctions: (() => void)[] = [];\n\n addListener<T>(\n prop: TwistyPropParent<T>,\n listener: (value: T) => void,\n ): void {\n let disconnected = false;\n const wrappedListener = (value: T) => {\n if (disconnected) {\n // TODO\n // console.warn(\"Should be disconnected!\");\n return;\n }\n listener(value);\n };\n\n prop.addFreshListener(wrappedListener);\n\n this.#disconnectionFunctions.push(() => {\n prop.removeFreshListener(wrappedListener);\n disconnected = true;\n });\n }\n\n // TODO: Figure out the signature to let us do overloads\n /** @deprecated */\n public addMultiListener3<U, V, W>(\n props: [TwistyPropParent<U>, TwistyPropParent<V>, TwistyPropParent<W>],\n listener: (values: [U, V, W]) => void,\n ): void {\n this.addMultiListener(props as any, listener as any); // TODO\n }\n public addMultiListener<U, V>(\n props: [TwistyPropParent<U>, TwistyPropParent<V>],\n listener: (values: [U, V]) => void,\n ) {\n let disconnected = false;\n\n // We're going to get one initial call per prop. We'll ignore all but one.\n let initialIgnoresLeft = props.length - 1;\n const wrappedListener = async (_: any) => {\n if (initialIgnoresLeft > 0) {\n initialIgnoresLeft--;\n return;\n }\n if (disconnected) {\n // TODO\n // console.warn(\"Should be disconnected!\");\n return;\n }\n // We rely on `TwistyProp` caching to give us the full set of latest\n // values efficiently.\n const promises = (props as TwistyPropParent<any>[]).map((prop) =>\n prop.get(),\n );\n const values = await Promise.all(promises);\n listener(values as any); // TODO: fix up types\n };\n\n for (const prop of props) {\n prop.addFreshListener(wrappedListener);\n }\n\n this.#disconnectionFunctions.push(() => {\n for (const prop of props) {\n prop.removeFreshListener(wrappedListener);\n }\n disconnected = true;\n });\n }\n\n public disconnect(): void {\n for (const disconnectionFunction of this.#disconnectionFunctions) {\n disconnectionFunction();\n }\n }\n}\n", "// Debounces `requestAnimationFrame()`.\nexport class RenderScheduler {\n private animFrameID: number | null = null;\n private animFrame = this.animFrameWrapper.bind(this);\n constructor(private callback: (timestamp: DOMHighResTimeStamp) => void) {}\n\n requestIsPending(): boolean {\n return !!this.animFrameID;\n }\n\n requestAnimFrame(): void {\n if (!this.animFrameID) {\n this.animFrameID = requestAnimationFrame(this.animFrame);\n }\n }\n\n cancelAnimFrame(): void {\n if (this.animFrameID) {\n cancelAnimationFrame(this.animFrameID);\n this.animFrameID = 0;\n }\n }\n\n private animFrameWrapper(timestamp: DOMHighResTimeStamp): void {\n this.animFrameID = 0;\n this.callback(timestamp);\n }\n}\n\n// An interface for classes to use to expose their scheduling.\nexport interface Schedulable {\n scheduleRender(): void;\n}\n", "import { SimpleTwistyPropSource } from \"../../TwistyProp\";\n\n// TODO: turn these maps into lists?\nexport const hintFaceletStyles = {\n floating: true, // default\n none: true,\n};\nexport type HintFaceletStyle = keyof typeof hintFaceletStyles;\nexport type HintFaceletStyleWithAuto = HintFaceletStyle | \"auto\";\n\nexport class HintFaceletProp extends SimpleTwistyPropSource<HintFaceletStyleWithAuto> {\n getDefaultValue(): HintFaceletStyleWithAuto {\n return \"auto\";\n }\n}\n", "export const TAU = Math.PI * 2;\nexport const DEGREES_PER_RADIAN = 360 / TAU;\n", "// Workarounds for `node`.\n// TODO: figure out how to remove this.\n\n// This stub does not need to be callable, just constructable to satisfy the `node` loader.\nclass HTMLElementStub {}\n\nlet HTMLElementShim: typeof HTMLElement;\nif (globalThis.HTMLElement) {\n HTMLElementShim = HTMLElement;\n} else {\n HTMLElementShim = HTMLElementStub as any;\n}\n\nexport { HTMLElementShim };\n\nclass CustomElementsStub {\n define(): void {\n // nothing\n }\n}\n\nlet customElementsShim: typeof customElements;\n\nif (globalThis.customElements) {\n customElementsShim = customElements;\n} else {\n customElementsShim = new CustomElementsStub() as any;\n}\n\nexport { customElementsShim };\n", "import {\n HTMLElementShim,\n customElementsShim,\n} from \"./node-custom-element-shims\";\n\nexport class CSSSource {\n constructor(private sourceText: string) {\n // TODO: Replace with adopted style sheets some day if we can.\n // const blob = new Blob([sourceText], {\n // type: \"text/utf8\",\n // });\n // this.url = URL.createObjectURL(blob);\n }\n\n getAsString(): string {\n return this.sourceText;\n }\n}\n\n// - Wrapped element\n// - Shadow root\n// - Content wrapper\nexport class ManagedCustomElement extends HTMLElementShim {\n public readonly shadow: ShadowRoot; // TODO: hide this\n public readonly contentWrapper: HTMLDivElement; // TODO: can we get rid of this wrapper?\n\n #cssSourceMap: Map<CSSSource, HTMLStyleElement> = new Map();\n constructor(options?: { mode: \"open\" | \"closed\" }) {\n super();\n this.shadow = this.attachShadow({ mode: options?.mode ?? \"closed\" });\n\n this.contentWrapper = document.createElement(\"div\");\n this.contentWrapper.classList.add(\"wrapper\");\n this.shadow.appendChild(this.contentWrapper);\n }\n\n // Add the source, if not already added.\n // Returns the existing if it's already on the element.\n public addCSS(cssSource: CSSSource): HTMLStyleElement {\n const existing = this.#cssSourceMap.get(cssSource);\n if (existing) {\n return existing;\n }\n\n const cssElem: HTMLStyleElement = document.createElement(\"style\");\n cssElem.textContent = cssSource.getAsString();\n\n this.#cssSourceMap.set(cssSource, cssElem);\n this.shadow.appendChild(cssElem);\n return cssElem;\n }\n\n // Remove the source, if it's currently added.\n public removeCSS(cssSource: CSSSource): void {\n const cssElem = this.#cssSourceMap.get(cssSource);\n if (!cssElem) {\n return;\n }\n this.shadow.removeChild(cssElem);\n this.#cssSourceMap.delete(cssSource);\n }\n\n public addElement<T extends Node>(element: T): T {\n return this.contentWrapper.appendChild(element);\n }\n\n public prependElement<T extends Node>(element: T): void {\n this.contentWrapper.prepend(element);\n }\n\n public removeElement<T extends Node>(element: T): T {\n return this.contentWrapper.removeChild(element);\n }\n}\n\ncustomElementsShim.define(\n \"twisty-managed-custom-element\",\n ManagedCustomElement,\n);\n", "/**\n * @author mrdoob / http://mrdoob.com/\n * ESM conversion by Lucas Garron, 2021-12-21\n */\n\nconst performance:\n | null\n | (Performance & {\n memory?: {\n usedJSHeapSize: number;\n jsHeapSizeLimit: number;\n };\n }) = globalThis.performance;\n\nexport class Stats {\n mode = 0;\n\n dom = document.createElement(\"div\");\n\n constructor() {\n this.dom.style.cssText =\n \"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";\n this.dom.addEventListener(\n \"click\",\n (event) => {\n event.preventDefault();\n this.showPanel(++this.mode % this.dom.children.length);\n },\n false,\n );\n\n this.showPanel(0);\n }\n\n addPanel(panel: StatsPanel): StatsPanel {\n this.dom.appendChild(panel.dom);\n return panel;\n }\n\n showPanel(id: number): void {\n for (let i = 0; i < this.dom.children.length; i++) {\n (this.dom.children[i] as HTMLElement).style.display =\n i === id ? \"block\" : \"none\";\n }\n\n this.mode = id;\n }\n\n beginTime = (performance || Date).now();\n prevTime = this.beginTime;\n frames = 0;\n\n fpsPanel = this.addPanel(new StatsPanel(\"FPS\", \"#0ff\", \"#002\"));\n msPanel = this.addPanel(new StatsPanel(\"MS\", \"#0f0\", \"#020\"));\n memPanel = performance?.memory\n ? this.addPanel(new StatsPanel(\"MB\", \"#f08\", \"#201\"))\n : null;\n REVISION = 16;\n\n begin() {\n this.beginTime = (performance || Date).now();\n }\n\n end() {\n this.frames++;\n\n const time = (performance || Date).now();\n\n this.msPanel.update(time - this.beginTime, 200);\n\n if (time >= this.prevTime + 1000) {\n this.fpsPanel.update((this.frames * 1000) / (time - this.prevTime), 100);\n\n this.prevTime = time;\n this.frames = 0;\n\n if (this.memPanel) {\n const memory = performance!.memory!;\n this.memPanel.update(\n memory.usedJSHeapSize / 1048576,\n memory.jsHeapSizeLimit / 1048576,\n );\n }\n }\n\n return time;\n }\n\n update() {\n this.beginTime = this.end();\n }\n}\n\nconst PR = Math.round(globalThis?.window?.devicePixelRatio ?? 1);\n\nconst WIDTH = 80 * PR;\nconst HEIGHT = 48 * PR;\nconst TEXT_X = 3 * PR;\nconst TEXT_Y = 2 * PR;\nconst GRAPH_X = 3 * PR;\nconst GRAPH_Y = 15 * PR;\nconst GRAPH_WIDTH = 74 * PR;\nconst GRAPH_HEIGHT = 30 * PR;\n\nexport class StatsPanel {\n min = Infinity;\n max = 0;\n dom = document.createElement(\"canvas\");\n context = this.dom.getContext(\"2d\")!;\n constructor(private name: string, private fg: string, private bg: string) {\n this.dom.width = WIDTH;\n this.dom.height = HEIGHT;\n this.dom.style.cssText = \"width:80px;height:48px\";\n\n this.context.font = `bold ${9 * PR}px Helvetica,Arial,sans-serif`;\n this.context.textBaseline = \"top\";\n\n this.context.fillStyle = bg;\n this.context.fillRect(0, 0, WIDTH, HEIGHT);\n\n this.context.fillStyle = fg;\n this.context.fillText(name, TEXT_X, TEXT_Y);\n this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);\n\n this.context.fillStyle = bg;\n this.context.globalAlpha = 0.9;\n this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);\n }\n\n update(value: number, maxValue: number) {\n this.min = Math.min(this.min, value);\n this.max = Math.max(this.max, value);\n\n this.context.fillStyle = this.bg;\n this.context.globalAlpha = 1;\n this.context.fillRect(0, 0, WIDTH, GRAPH_Y);\n this.context.fillStyle = this.fg;\n this.context.fillText(\n `${Math.round(value)} ${this.name} (${Math.round(this.min)}-${Math.round(\n this.max,\n )})`,\n TEXT_X,\n TEXT_Y,\n );\n\n this.context.drawImage(\n this.dom,\n GRAPH_X + PR,\n GRAPH_Y,\n GRAPH_WIDTH - PR,\n GRAPH_HEIGHT,\n GRAPH_X,\n GRAPH_Y,\n GRAPH_WIDTH - PR,\n GRAPH_HEIGHT,\n );\n\n this.context.fillRect(\n GRAPH_X + GRAPH_WIDTH - PR,\n GRAPH_Y,\n PR,\n GRAPH_HEIGHT,\n );\n\n this.context.fillStyle = this.bg;\n this.context.globalAlpha = 0.9;\n this.context.fillRect(\n GRAPH_X + GRAPH_WIDTH - PR,\n GRAPH_Y,\n PR,\n Math.round((1 - value / maxValue) * GRAPH_HEIGHT),\n );\n }\n}\n", "import { from } from \"../../vendor/mit/p-lazy/p-lazy\";\n\n// TODO can we remove the cached proxy?\n\n// In theory we can, but we've run into situations where imports are not properly cached.\nlet cachedConstructorProxy: Promise<\n typeof import(\"./dynamic-entries/twisty-dynamic-3d\")\n> | null = null;\n\nexport async function proxy3D(): Promise<\n typeof import(\"./dynamic-entries/twisty-dynamic-3d\")\n> {\n return (cachedConstructorProxy ??= import(\n \"./dynamic-entries/twisty-dynamic-3d\"\n ));\n}\n\nexport const THREEJS: Promise<typeof import(\"three\")> = from(\n async () => (await proxy3D()).T3I,\n);\n", "let globalPixelRatioOverride: number | null = null;\nexport function setGlobalPixelRatioOverride(override: number | null): void {\n globalPixelRatioOverride = override;\n}\n\n// TODO: Handle if you move across screens?\nexport function pixelRatio(): number {\n return globalPixelRatioOverride ?? (devicePixelRatio || 1);\n}\n", "import { CSSSource } from \"../ManagedCustomElement\";\n\n// The `position` values are a hack for a bug in Safari where the canvas either\n// grows infinitely, or takes up the full `fr` of any encompassing grid (making\n// the contents of that element e.g. over 100% of its height). `contain:\n// content` is a good fix for this, but there is no indication that Safari will\n// support it soon. https://developer.mozilla.org/en-US/docs/Web/CSS/contain\n\nexport const twisty3DVantageCSS = new CSSSource(\n `\n:host {\n width: 384px;\n height: 256px;\n display: grid;\n}\n\n.wrapper {\n width: 100%;\n height: 100%;\n display: grid;\n overflow: hidden;\n place-content: center;\n contain: strict;\n}\n\n.loading {\n width: 4em;\n height: 4em;\n border-radius: 2.5em;\n border: 0.5em solid rgba(0, 0, 0, 0);\n border-top: 0.5em solid rgba(0, 0, 0, 0.7);\n border-right: 0.5em solid rgba(0, 0, 0, 0.7);\n animation: fade-in-delayed 4s, rotate 1s linear infinite;\n}\n\n@keyframes fade-in-delayed {\n 0% { opacity: 0; }\n 25% {opacity: 0; }\n 100% { opacity: 1; }\n}\n\n@keyframes rotate {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* TODO: This is due to stats hack. Replace with \\`canvas\\`. */\n.wrapper > canvas {\n max-width: 100%;\n max-height: 100%;\n animation: fade-in 0.25s ease-in;\n}\n\n@keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.wrapper.invisible {\n opacity: 0;\n}\n\n.wrapper.drag-input-enabled > canvas {\n cursor: grab;\n}\n\n.wrapper.drag-input-enabled > canvas:active {\n cursor: grabbing;\n}\n`,\n);\n", "// export class Drag() {\n\n// }\n\ninterface DragInfo {\n attachedInfo: Record<any, any>;\n hasMoved: boolean;\n lastClientX: number;\n lastClientY: number;\n lastTimeStamp: number;\n}\n\ntype PointerID = number;\n\nexport interface DragMovementInfo {\n attachedInfo: Record<any, any>;\n movementX: number;\n movementY: number;\n elapsedMs: number;\n}\n\nexport interface UpInfo {\n attachedInfo: Record<any, any>;\n}\n\nexport interface PressInfo {\n normalizedX: number;\n normalizedY: number;\n rightClick: boolean;\n keys: {\n // TODO: group these\n altKey: boolean;\n ctrlOrMetaKey: boolean;\n shiftKey: boolean;\n };\n}\n\n// Chrome can report movements as low as `0.0000152587890625` even if the cursor did not move at all. So we need a treshold insteadl.\nconst MOVEMENT_EPSILON = 0.1; // px\n\nexport class DragTracker extends EventTarget {\n #dragInfoMap: Map<PointerID, DragInfo> = new Map();\n\n constructor(public readonly target: HTMLElement) {\n super();\n }\n\n // Idempotent\n start() {\n this.addTargetListener(\"pointerdown\", this.onPointerDown.bind(this));\n // Prevent right-click on desktop (only tested on macOS Chrome/Safari/Firefox) so we can detect right-click moves.\n // TODO: Can we do this selectively, e.g. only on the puzzle? That way we could allow right-click to download the canvas. Unfortunately, it would probably require a sync calculation.\n this.addTargetListener(\"contextmenu\", (e) => {\n e.preventDefault();\n });\n // Prevent touch scrolling (preventing default on `pointermove` doesn't work).\n this.addTargetListener(\"touchmove\", (e) => e.preventDefault());\n // Prevent zooming on double-tap (iOS).\n // This is because `dblclick` works to zoom in, but does *not* work to zoom out. So the user can get stuck zoomed into the player without a way to zoom out.\n this.addTargetListener(\"dblclick\", (e) => e.preventDefault());\n }\n\n // Idempotent\n stop(): void {\n for (const [eventType, listener] of this.#targetListeners.entries()) {\n this.target.removeEventListener(eventType, listener);\n }\n this.#targetListeners.clear();\n this.#lazyListenersRegistered = false;\n }\n\n #targetListeners = new Map<string, (e: MouseEvent) => any>();\n addTargetListener(eventType: string, listener: (e: MouseEvent) => any) {\n if (!this.#targetListeners.has(eventType)) {\n this.target.addEventListener(eventType, listener);\n this.#targetListeners.set(eventType, listener);\n }\n }\n\n // This allows us to avoid getting a callback every time the pointer moves over the canvas, until we have a down event.\n // TODO: Ideally we'd also support unregistering when we're certain there are no more active touches. But this means we need to properly handle every way a pointer \"click\" can end, which is tricky across environments (due to e.g. mouse vs. touch vs. stylues, canvas/viewport/window/scroll boundaries, right-click and other ways of losing focus, etc.), so we conservatively leave the listeners on.\n #lazyListenersRegistered: boolean = false;\n #registerLazyListeners(): void {\n if (this.#lazyListenersRegistered) {\n return;\n }\n this.addTargetListener(\"pointermove\", this.onPointerMove.bind(this)); // TODO: only register this after pointer down.\n this.addTargetListener(\"pointerup\", this.onPointerUp.bind(this));\n this.#lazyListenersRegistered = true;\n }\n\n #clear(e: PointerEvent): void {\n this.#dragInfoMap.delete(e.pointerId);\n }\n\n // `null`: means: ignore this result (no movement, or not\n #trackDrag(e: PointerEvent): {\n movementInfo: DragMovementInfo | null;\n hasMoved: boolean;\n } {\n // TODO: Find a way to detect if this is an active press, in a way that works cross-platform.\n // if (e.buttons === 0) {\n // return { movementInfo: null, hasMoved: false };\n // }\n const existing = this.#dragInfoMap.get(e.pointerId);\n if (!existing) {\n return { movementInfo: null, hasMoved: false };\n }\n // We would try to use `e.movementX`/`e.movementY`, except Safari:\n // - Does not have those values on i[Pad]OS.\n // - Will always report `0` for these values on macOS.\n // https://bugs.webkit.org/show_bug.cgi?id=220194\n //\n // The following are all insufficiently powerful for detecting the Safari `0` bug:\n // - `\"movementX\" in e`\n // - `e.movementX !== \"undefined\"`\n // - `e.hasOwnProperty(\"movementX\")`\n\n let movementInfo: DragMovementInfo;\n if ((e.movementX ?? 0) !== 0 || (e.movementY ?? 0) !== 0) {\n // We optimistically try to catch sub-pixel movements in Chrome.\n movementInfo = {\n attachedInfo: existing.attachedInfo,\n movementX: e.movementX,\n movementY: e.movementY,\n elapsedMs: e.timeStamp - existing.lastTimeStamp,\n };\n } else {\n movementInfo = {\n attachedInfo: existing.attachedInfo,\n movementX: e.clientX - existing.lastClientX,\n movementY: e.clientY - existing.lastClientY,\n elapsedMs: e.timeStamp - existing.lastTimeStamp,\n };\n }\n existing.lastClientX = e.clientX;\n existing.lastClientY = e.clientY;\n existing.lastTimeStamp = e.timeStamp;\n if (\n Math.abs(movementInfo.movementX) < MOVEMENT_EPSILON &&\n Math.abs(movementInfo.movementY) < MOVEMENT_EPSILON\n ) {\n return { movementInfo: null, hasMoved: existing.hasMoved };\n } else {\n existing.hasMoved = true;\n return { movementInfo, hasMoved: existing.hasMoved };\n }\n }\n\n private onPointerDown(e: PointerEvent) {\n this.#registerLazyListeners();\n const newDragInfo: DragInfo = {\n attachedInfo: {},\n hasMoved: false,\n lastClientX: e.clientX,\n lastClientY: e.clientY,\n lastTimeStamp: e.timeStamp,\n };\n this.#dragInfoMap.set(e.pointerId, newDragInfo);\n this.target.setPointerCapture(e.pointerId);\n }\n\n private onPointerMove(e: PointerEvent) {\n const movementInfo = this.#trackDrag(e).movementInfo;\n if (movementInfo) {\n e.preventDefault();\n this.dispatchEvent(\n new CustomEvent(\"move\", {\n detail: movementInfo,\n }),\n );\n }\n }\n\n private onPointerUp(e: PointerEvent) {\n const trackDragResult = this.#trackDrag(e);\n const existing = this.#dragInfoMap.get(e.pointerId)!; // TODO\n this.#clear(e);\n this.target.releasePointerCapture(e.pointerId); // TODO: unnecessary?\n let event: CustomEvent;\n if (trackDragResult.hasMoved) {\n // TODO: send proper movement/momentum since last move event.\n event = new CustomEvent<UpInfo>(\"up\", {\n detail: { attachedInfo: existing.attachedInfo },\n });\n } else {\n const { altKey, ctrlKey, metaKey, shiftKey } = e;\n event = new CustomEvent<PressInfo>(\"press\", {\n detail: {\n normalizedX: (e.offsetX / this.target.offsetWidth) * 2 - 1,\n normalizedY: 1 - (e.offsetY / this.target.offsetHeight) * 2,\n rightClick: !!(e.button & 2),\n keys: {\n altKey,\n ctrlOrMetaKey: ctrlKey || metaKey,\n shiftKey,\n },\n },\n });\n }\n this.dispatchEvent(event);\n }\n}\n", "// TODO: https://stackoverflow.com/a/40443642\n\n// let shareAllNewRenderers: boolean = false;\n\n// // WARNING: The current shared renderer implementation is not every efficient.\n// // Avoid using for players that are likely to have dimensions approaching 1 megapixel or higher.\n// // TODO: use a dedicated renderer while fullscreen?\n// export function experimentalSetShareAllNewRenderers(share: boolean): void {\n// shareAllNewRenderers = share;\n// }\n\n// const sharedRenderer: WebGLRenderer | null = null;\n\nimport { THREEJS } from \"../../heavy-code-imports/3d\";\nimport type { Camera, Scene, WebGLRenderer } from \"three\";\nimport { pixelRatio } from \"../canvas\";\n\nconst renderers: Promise<WebGLRenderer>[] = [];\n\n// Render result is guaranteed to be available synchronously at resolution time.\nexport async function rawRenderPooled(\n width: number,\n height: number,\n scene: Scene,\n camera: Camera,\n): Promise<HTMLCanvasElement> {\n // At most one in the pool for now.\n if (renderers.length === 0) {\n renderers.push(newRenderer());\n }\n const renderer = await renderers[0];\n // TODO: scissoring\n renderer.setSize(width, height); // TODO: is it faster if we cache values and only call this when necessary?\n renderer.render(scene, camera);\n\n return renderer.domElement;\n}\n\n// let haveSet = false;\nexport async function renderPooled(\n width: number,\n height: number,\n canvas: HTMLCanvasElement,\n scene: Scene,\n camera: Camera,\n): Promise<void> {\n if (width === 0 || height === 0) {\n return;\n }\n // At most one in the pool for now.\n if (renderers.length === 0) {\n renderers.push(newRenderer());\n }\n\n const rendererCanvas = await rawRenderPooled(width, height, scene, camera);\n\n // TODO: Should we cache this? Seems to take about 0.0001ms to get.\n const context = canvas.getContext(\"2d\")!;\n context.clearRect(0, 0, canvas.width, canvas.height);\n context.drawImage(rendererCanvas, 0, 0);\n}\n\nexport async function newRenderer(): Promise<WebGLRenderer> {\n const rendererConstructor = (await THREEJS).WebGLRenderer;\n const renderer = new rendererConstructor({\n antialias: true,\n alpha: true,\n });\n renderer.setPixelRatio(pixelRatio());\n return renderer;\n}\n", "import type { Vector3 } from \"three\";\nimport { RenderScheduler } from \"../../controllers/RenderScheduler\";\nimport { THREEJS } from \"../../heavy-code-imports/3d\";\nimport type { OrbitCoordinates } from \"../../model/props/viewer/OrbitCoordinatesRequestProp\";\nimport type { TwistyPlayerModel } from \"../../model/TwistyPlayerModel\";\nimport type { DragMovementInfo, DragTracker } from \"./DragTracker\";\nimport { DEGREES_PER_RADIAN } from \"./TAU\";\n\nconst INERTIA_DEFAULT: boolean = true;\n\nconst INERTIA_DURATION_MS = 500;\n// If the first inertial render is this long after the last move, we assume the\n// user has halted the cursor and we consider inertia to have \"timed out\". We\n// never begin animating the inertia.\nconst INERTIA_TIMEOUT_MS = 50;\n\nconst VERTICAL_MOVEMENT_BASE_SCALE = 0.75;\n\n// progress is from 0 to 1.\nfunction momentumScale(progress: number) {\n // This is the exponential curve flipped so that\n // - The slope at progress = 0 is 1 (this corresponds to \"x = 1\" on the normal\n // curve).\n // - The scale exponentially \"decays\" until progress = 1.\n // This means the scale at the end will be about 0.418\n return (Math.exp(1 - progress) - (1 - progress)) / (1 - Math.E) + 1;\n}\n\nclass Inertia {\n private scheduler = new RenderScheduler(this.render.bind(this));\n private lastTimestamp: number;\n constructor(\n private startTimestamp: number,\n private momentumX: number,\n private momentumY: number,\n private callback: (movementX: number, movementY: number) => void,\n ) {\n this.scheduler.requestAnimFrame();\n this.lastTimestamp = startTimestamp;\n }\n\n private render(now: DOMHighResTimeStamp) {\n const progressBefore =\n (this.lastTimestamp - this.startTimestamp) / INERTIA_DURATION_MS;\n const progressAfter = Math.min(\n 1,\n (now - this.startTimestamp) / INERTIA_DURATION_MS,\n );\n\n if (\n progressBefore === 0 &&\n progressAfter > INERTIA_TIMEOUT_MS / INERTIA_DURATION_MS\n ) {\n // The user has already paused for a while. Don't start any inertia.\n return;\n }\n\n const delta = momentumScale(progressAfter) - momentumScale(progressBefore);\n\n // TODO: For now, we only carry horizontal momentum. If this should stay, we\n // can remove the plumbing for the Y dimension.\n this.callback(this.momentumX * delta * 1000, this.momentumY * delta * 1000);\n\n if (progressAfter < 1) {\n this.scheduler.requestAnimFrame();\n }\n this.lastTimestamp = now;\n }\n}\n\nexport async function positionToOrbitCoordinates(\n position: Vector3,\n): Promise<OrbitCoordinates> {\n const spherical = new (await THREEJS).Spherical();\n spherical.setFromVector3(position);\n return {\n latitude: 90 - spherical.phi * DEGREES_PER_RADIAN,\n longitude: spherical.theta * DEGREES_PER_RADIAN,\n distance: spherical.radius,\n };\n}\n\ninterface TwistyOrbitControlsDragAttachedInfo {\n lastTemperedX: number;\n lastTemperedY: number;\n timestamp: number;\n}\n\n// TODO: change mouse cursor while moving.\nexport class TwistyOrbitControls {\n /** @deprecated */\n experimentalInertia: boolean = INERTIA_DEFAULT;\n private onMovementBound = this.onMovement.bind(this);\n public experimentalHasBeenMoved: boolean = false;\n constructor(\n private model: TwistyPlayerModel,\n private mirror: boolean,\n private canvas: HTMLCanvasElement,\n private dragTracker: DragTracker,\n ) {\n this.dragTracker.addEventListener(\"move\", this.onMove.bind(this));\n this.dragTracker.addEventListener(\"up\", this.onUp.bind(this));\n }\n\n // f is the fraction of the canvas traversed per ms.\n temperMovement(f: number): number {\n // This is scaled to be linear for small values, but to reduce large values\n // by a significant factor.\n return (Math.sign(f) * Math.log(Math.abs(f * 10) + 1)) / 6;\n }\n\n onMove(e: CustomEvent<DragMovementInfo>): void {\n e.detail.attachedInfo ??= {};\n\n const { temperedX, temperedY } = this.onMovement(\n e.detail.movementX,\n e.detail.movementY,\n );\n const attachedInfo = e.detail\n .attachedInfo as TwistyOrbitControlsDragAttachedInfo;\n attachedInfo.lastTemperedX = temperedX * 10;\n attachedInfo.lastTemperedY = temperedY * 10;\n attachedInfo.timestamp = e.timeStamp; // TODO\n }\n\n onMovement(\n movementX: number,\n movementY: number,\n ): {\n temperedX: number;\n temperedY: number;\n } {\n const scale = this.mirror ? -1 : 1;\n\n // TODO: refactor\n const minDim = Math.min(this.canvas.offsetWidth, this.canvas.offsetHeight);\n\n const temperedX = this.temperMovement(movementX / minDim);\n const temperedY = this.temperMovement(\n (movementY / minDim) * VERTICAL_MOVEMENT_BASE_SCALE,\n );\n this.model.twistySceneModel.orbitCoordinatesRequest.set(\n (async () => {\n const prevCoords =\n await this.model.twistySceneModel.orbitCoordinates.get();\n\n const newCoords = {\n latitude:\n prevCoords.latitude + 2 * temperedY * DEGREES_PER_RADIAN * scale,\n longitude: prevCoords.longitude - 2 * temperedX * DEGREES_PER_RADIAN,\n };\n return newCoords;\n })(),\n );\n return { temperedX, temperedY };\n }\n\n onUp(e: CustomEvent<DragMovementInfo>): void {\n e.preventDefault();\n if (\n \"lastTemperedX\" in e.detail.attachedInfo &&\n \"lastTemperedY\" in e.detail.attachedInfo &&\n \"timestamp\" in e.detail.attachedInfo &&\n e.timeStamp - e.detail.attachedInfo.timestamp < 60 // TODO\n ) {\n new Inertia(\n e.timeStamp, // TODO\n (e.detail.attachedInfo as TwistyOrbitControlsDragAttachedInfo)\n .lastTemperedX,\n (e.detail.attachedInfo as TwistyOrbitControlsDragAttachedInfo)\n .lastTemperedY,\n this.onMovementBound,\n ); // TODO: cancel inertia\n }\n }\n}\n", "import type { PerspectiveCamera, WebGLRenderer } from \"three\";\nimport { Stats } from \"../../../vendor/mit/three/examples/jsm/libs/stats.modified.module\";\nimport { THREEJS } from \"../../heavy-code-imports/3d\";\nimport { StaleDropper } from \"../../model/PromiseFreshener\";\nimport type { TwistyPropParent } from \"../../model/props/TwistyProp\";\nimport type { OrbitCoordinates } from \"../../model/props/viewer/OrbitCoordinatesRequestProp\";\nimport type { TwistyPlayerModel } from \"../../model/TwistyPlayerModel\";\nimport { RenderScheduler } from \"../../controllers/RenderScheduler\";\nimport { ManagedCustomElement } from \"../ManagedCustomElement\";\nimport { customElementsShim } from \"../node-custom-element-shims\";\nimport { pixelRatio } from \"../canvas\";\nimport { twisty3DVantageCSS } from \"./Twisty3DVantage.css\";\nimport { DragTracker, PressInfo } from \"./DragTracker\";\nimport { newRenderer, renderPooled } from \"./RendererPool\";\nimport { DEGREES_PER_RADIAN } from \"./TAU\";\nimport type { Twisty3DSceneWrapper } from \"./Twisty3DSceneWrapper\";\nimport { TwistyOrbitControls } from \"./TwistyOrbitControls\";\nimport type { DragInputMode } from \"../../model/props/puzzle/state/DragInputProp\";\nimport { twistyDebugGlobals } from \"../../debug\";\n\nexport async function setCameraFromOrbitCoordinates(\n camera: PerspectiveCamera,\n orbitCoordinates: OrbitCoordinates,\n backView: boolean = false,\n): Promise<void> {\n const spherical = new (await THREEJS).Spherical(\n orbitCoordinates.distance,\n (90 - (backView ? -1 : 1) * orbitCoordinates.latitude) / DEGREES_PER_RADIAN,\n ((backView ? 180 : 0) + orbitCoordinates.longitude) / DEGREES_PER_RADIAN,\n );\n spherical.makeSafe();\n camera.position.setFromSpherical(spherical);\n camera.lookAt(0, 0, 0);\n}\n\nlet dedicatedRenderersSoFar = 0;\nconst DEFAULT_MAX_DEDICATED_RENDERERS = 2; // This allows for a front view and a back view (or two separate front views).\nlet sharingRenderers = false;\nfunction shareRenderer(): boolean {\n if (twistyDebugGlobals.shareAllNewRenderers !== \"auto\") {\n if (!twistyDebugGlobals.shareAllNewRenderers) {\n dedicatedRenderersSoFar++;\n }\n return twistyDebugGlobals.shareAllNewRenderers !== \"never\";\n }\n if (dedicatedRenderersSoFar < DEFAULT_MAX_DEDICATED_RENDERERS) {\n dedicatedRenderersSoFar++;\n return false;\n } else {\n sharingRenderers = true;\n return true;\n }\n}\n\nexport function haveStartedSharingRenderers(): boolean {\n return sharingRenderers;\n}\n\nexport class Twisty3DVantage extends ManagedCustomElement {\n scene: Twisty3DSceneWrapper | null = null;\n\n stats: Stats | null = null;\n\n private rendererIsShared: boolean = shareRenderer();\n\n loadingElement: HTMLDivElement | null = null;\n constructor(\n private model?: TwistyPlayerModel,\n scene?: Twisty3DSceneWrapper,\n private options?: { backView?: boolean },\n ) {\n super();\n this.scene = scene ?? null;\n\n this.loadingElement = this.addElement(document.createElement(\"div\"));\n this.loadingElement.classList.add(\"loading\");\n\n if (twistyDebugGlobals.showRenderStats) {\n this.stats = new Stats();\n this.stats.dom.style.position = \"absolute\";\n this.contentWrapper.appendChild(this.stats.dom);\n }\n }\n\n async connectedCallback(): Promise<void> {\n this.addCSS(twisty3DVantageCSS);\n this.addElement((await this.canvasInfo()).canvas);\n\n this.#onResize();\n const observer = new ResizeObserver(this.#onResize.bind(this));\n observer.observe(this.contentWrapper);\n this.orbitControls(); // Instantiate orbit controls\n this.#setupBasicPresses();\n\n this.scheduleRender();\n }\n\n async #setupBasicPresses(): Promise<void> {\n const dragTracker = await this.#dragTracker();\n dragTracker.addEventListener(\"press\", async (e: CustomEvent<PressInfo>) => {\n const movePressInput =\n await this.model!.twistySceneModel.movePressInput.get();\n if (movePressInput !== \"basic\") {\n return;\n }\n this.dispatchEvent(\n new CustomEvent(\"press\", {\n detail: {\n pressInfo: e.detail,\n cameraPromise: this.camera(),\n },\n }),\n );\n });\n }\n\n #onResizeStaleDropper = new StaleDropper<PerspectiveCamera>();\n\n async clearCanvas(): Promise<void> {\n if (this.rendererIsShared) {\n const canvasInfo = await this.canvasInfo();\n canvasInfo.context.clearRect(\n 0,\n 0,\n canvasInfo.canvas.width,\n canvasInfo.canvas.height,\n );\n } else {\n const renderer = await this.renderer();\n const context = renderer.getContext();\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n\n // TODO: Why doesn't this work for the top-right back view height?\n #width: number = 0;\n #height: number = 0;\n async #onResize(): Promise<void> {\n const camera = await this.#onResizeStaleDropper.queue(this.camera());\n\n const w = this.contentWrapper.clientWidth;\n const h = this.contentWrapper.clientHeight;\n this.#width = w;\n this.#height = h;\n const off = 0;\n let yoff = 0;\n let excess = 0;\n if (h > w) {\n excess = h - w;\n yoff = -Math.floor(0.5 * excess);\n }\n camera.aspect = w / h;\n camera.setViewOffset(w, h - excess, off, yoff, w, h);\n camera.updateProjectionMatrix(); // TODO\n\n this.clearCanvas();\n if (this.rendererIsShared) {\n const canvasInfo = await this.canvasInfo();\n\n canvasInfo.canvas.width = w * pixelRatio();\n canvasInfo.canvas.height = h * pixelRatio();\n canvasInfo.canvas.style.width = `${w.toString()}px`;\n canvasInfo.canvas.style.height = `${h.toString()}px`;\n } else {\n const renderer = await this.renderer();\n renderer.setSize(w, h, true);\n }\n\n this.scheduleRender();\n }\n\n #cachedRenderer: Promise<WebGLRenderer> | null = null;\n async renderer(): Promise<WebGLRenderer> {\n if (this.rendererIsShared) {\n throw new Error(\"renderer expected to be shared.\");\n }\n return (this.#cachedRenderer ??= newRenderer());\n }\n\n #cachedCanvas: Promise<{\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n }> | null = null;\n async canvasInfo(): Promise<{\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n }> {\n return (this.#cachedCanvas ??= (async () => {\n let canvas: HTMLCanvasElement;\n if (this.rendererIsShared) {\n canvas = this.addElement(document.createElement(\"canvas\"));\n } else {\n const renderer = await this.renderer();\n canvas = this.addElement(renderer.domElement);\n }\n this.loadingElement?.remove();\n const context = canvas.getContext(\"2d\")!;\n return { canvas, context };\n })());\n }\n\n #cachedDragTracker: Promise<DragTracker> | null = null;\n async #dragTracker(): Promise<DragTracker> {\n return (this.#cachedDragTracker ??= (async () => {\n const dragTracker = new DragTracker((await this.canvasInfo()).canvas);\n this.model?.twistySceneModel.dragInput.addFreshListener(\n (dragInputMode: DragInputMode) => {\n let dragInputEnabled = false;\n switch (dragInputMode) {\n case \"auto\": {\n dragTracker.start();\n dragInputEnabled = true;\n break;\n }\n case \"none\": {\n dragTracker.stop();\n break;\n }\n }\n this.contentWrapper.classList.toggle(\n \"drag-input-enabled\",\n dragInputEnabled,\n );\n },\n );\n return dragTracker;\n })());\n }\n\n #cachedCamera: Promise<PerspectiveCamera> | null = null;\n async camera(): Promise<PerspectiveCamera> {\n return (this.#cachedCamera ??= (async () => {\n const camera = new (await THREEJS).PerspectiveCamera(\n 20,\n 1, // We rely on the resize logic to handle this.\n 0.1,\n 20,\n );\n camera.position.copy(\n new (await THREEJS).Vector3(2, 4, 4).multiplyScalar(\n this.options?.backView ? -1 : 1,\n ),\n );\n camera.lookAt(0, 0, 0);\n // TODO: `TwistyOrbitControls` breaks isolateion\n return camera;\n })());\n }\n\n #cachedOrbitControls: Promise<TwistyOrbitControls> | null = null;\n async orbitControls(): Promise<TwistyOrbitControls> {\n return (this.#cachedOrbitControls ??= (async () => {\n const orbitControls = new TwistyOrbitControls(\n this.model!,\n !!this.options?.backView,\n (await this.canvasInfo()).canvas,\n await this.#dragTracker(),\n );\n\n if (this.model) {\n this.addListener(\n this.model.twistySceneModel.orbitCoordinates,\n async (orbitCoordinates: OrbitCoordinates) => {\n const camera = await this.camera();\n setCameraFromOrbitCoordinates(\n camera,\n orbitCoordinates,\n this.options?.backView,\n );\n // TODO: Wrap in StaleDropper?\n\n this.scheduleRender();\n },\n );\n }\n\n return orbitControls;\n })());\n }\n\n addListener<T>(\n prop: TwistyPropParent<T>,\n listener: (value: T) => void,\n ): void {\n prop.addFreshListener(listener);\n this.#disconnectionFunctions.push(() => {\n prop.removeFreshListener(listener);\n // disconnected = true; // TODO\n });\n }\n\n #disconnectionFunctions: (() => void)[] = [];\n disconnect(): void {\n for (const fn of this.#disconnectionFunctions) {\n fn();\n }\n this.#disconnectionFunctions = []; // TODO: Encapsulate this.\n }\n\n #experimentalNextRenderFinishedCallback: (() => void) | null = null;\n experimentalNextRenderFinishedCallback(callback: () => void): void {\n this.#experimentalNextRenderFinishedCallback = callback;\n }\n\n async render(): Promise<void> {\n if (!this.scene) {\n throw new Error(\"Attempted to render without a scene\");\n }\n\n this.stats?.begin();\n\n const [scene, camera, canvas] = await Promise.all([\n this.scene.scene(),\n this.camera(),\n this.canvasInfo(),\n ]);\n if (this.rendererIsShared) {\n renderPooled(this.#width, this.#height, canvas.canvas, scene, camera);\n } else {\n (await this.renderer()).render(scene, camera);\n }\n\n this.stats?.end();\n this.#experimentalNextRenderFinishedCallback?.();\n this.#experimentalNextRenderFinishedCallback = null;\n }\n\n #scheduler = new RenderScheduler(this.render.bind(this));\n scheduleRender(): void {\n // console.log(\"scheduling\", this);\n this.#scheduler.requestAnimFrame();\n }\n}\n\ncustomElementsShim.define(\"twisty-3d-vantage\", Twisty3DVantage);\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -6,7 +6,7 @@ import {
6
6
  twizzleEvents,
7
7
  wcaEventInfo,
8
8
  wcaEvents
9
- } from "../chunk-67PUZ2YF.js";
9
+ } from "../chunk-3EERASOG.js";
10
10
  import "../chunk-6TTWMZXN.js";
11
11
  import "../chunk-KLI2E737.js";
12
12
  import "../chunk-VZP3KFTU.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  randomScrambleForEvent
3
- } from "../chunk-ZUQFCYEB.js";
4
- import "../chunk-MTMVMFDV.js";
3
+ } from "../chunk-772NFOZC.js";
4
+ import "../chunk-HH4MB7GD.js";
5
5
  import "../chunk-RHC3DIN3.js";
6
6
  import "../chunk-EV25IJFC.js";
7
- import "../chunk-DKG7EU7X.js";
7
+ import "../chunk-LZDVZWUN.js";
8
8
  import "../chunk-KA53VAHS.js";
9
- import "../chunk-67PUZ2YF.js";
9
+ import "../chunk-3EERASOG.js";
10
10
  import "../chunk-6TTWMZXN.js";
11
11
  import "../chunk-KLI2E737.js";
12
12
  import "../chunk-VZP3KFTU.js";
@@ -6,15 +6,15 @@ import {
6
6
  solvePyraminx,
7
7
  solveSkewb,
8
8
  solveTwsearch
9
- } from "../chunk-ZUQFCYEB.js";
10
- import "../chunk-MTMVMFDV.js";
9
+ } from "../chunk-772NFOZC.js";
10
+ import "../chunk-HH4MB7GD.js";
11
11
  import "../chunk-RHC3DIN3.js";
12
12
  import "../chunk-EV25IJFC.js";
13
13
  import {
14
14
  random333State
15
- } from "../chunk-DKG7EU7X.js";
15
+ } from "../chunk-LZDVZWUN.js";
16
16
  import "../chunk-KA53VAHS.js";
17
- import "../chunk-67PUZ2YF.js";
17
+ import "../chunk-3EERASOG.js";
18
18
  import "../chunk-6TTWMZXN.js";
19
19
  import "../chunk-KLI2E737.js";
20
20
  import "../chunk-VZP3KFTU.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  cube2x2x2,
6
6
  puzzles
7
- } from "./chunk-67PUZ2YF.js";
7
+ } from "./chunk-3EERASOG.js";
8
8
  import "./chunk-6TTWMZXN.js";
9
9
  import {
10
10
  KPuzzle
@@ -1888,4 +1888,4 @@ export {
1888
1888
  sgsDataSkewbFixedCorner,
1889
1889
  skewbKPuzzleWithoutMOCached
1890
1890
  };
1891
- //# sourceMappingURL=search-dynamic-sgs-side-events-JMSGX7J4.js.map
1891
+ //# sourceMappingURL=search-dynamic-sgs-side-events-FJPVSSGY.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-UMKR43AG.js";
4
4
  import {
5
5
  puzzles
6
- } from "./chunk-67PUZ2YF.js";
6
+ } from "./chunk-3EERASOG.js";
7
7
  import "./chunk-6TTWMZXN.js";
8
8
  import "./chunk-KLI2E737.js";
9
9
  import {
@@ -1265,4 +1265,4 @@ export {
1265
1265
  getRandomRediCubeScramble,
1266
1266
  sgsDataFTO
1267
1267
  };
1268
- //# sourceMappingURL=search-dynamic-sgs-unofficial-A576WLSU.js.map
1268
+ //# sourceMappingURL=search-dynamic-sgs-unofficial-46HUMAUV.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  mustBeInsideWorker,
3
3
  random333Scramble
4
- } from "./chunk-DKG7EU7X.js";
5
- import "./chunk-67PUZ2YF.js";
4
+ } from "./chunk-LZDVZWUN.js";
5
+ import "./chunk-3EERASOG.js";
6
6
  import "./chunk-6TTWMZXN.js";
7
7
  import "./chunk-KLI2E737.js";
8
8
  import {
@@ -2921,4 +2921,4 @@ export {
2921
2921
  initialize,
2922
2922
  random444Scramble
2923
2923
  };
2924
- //# sourceMappingURL=search-dynamic-solve-4x4x4-4HMLSN4H.js.map
2924
+ //# sourceMappingURL=search-dynamic-solve-4x4x4-C4HESA2T.js.map
@@ -1802,7 +1802,7 @@ Vertex distance \${this.vertexdistance}\`}writeSchreierSims(g){let B=this.getOrb
1802
1802
  </g>
1803
1803
  </g>
1804
1804
  </svg>
1805
- \`});var Ks={};dg(Ks,{megaminxLLSVG:()=>SL});var xs=U(()=>{"use strict";Ms()});var Vr,Ys,bs=U(()=>{"use strict";de();jg();Ns();Vr=class extends Zg{constructor(){super({id:"megaminx",fullName:"Megaminx",inventionYear:1981});this.stickerings=jr;this.llSVG=kA(async()=>(await Promise.resolve().then(()=>(xs(),Ks))).megaminxLLSVG)}stickeringMask(e){return Gs(this,e)}},Ys=new Vr});var Xr,vs,Js=U(()=>{"use strict";de();jg();Xr=class extends Zg{constructor(){super({id:"pyraminx",fullName:"Pyraminx",inventedBy:["Uwe Meffert"]});this.svg=kA(async()=>(await Promise.resolve().then(()=>(le(),Qe))).pyraminxSVG)}},vs=new Xr});var Hs,qs=U(()=>{"use strict";lg();jg();Hs={id:"square1",fullName:"Square-1",inventedBy:["Karel Hr\\u0161el","Vojtech Kopsk\\xFD"],inventionYear:1990,kpuzzle:kA(async()=>new PA((await Promise.resolve().then(()=>(le(),Qe))).sq1HyperOrbitJSON)),svg:kA(async()=>(await Promise.resolve().then(()=>(le(),Qe))).sq1HyperOrbitSVG)}});var Ps,Ts=U(()=>{"use strict";lg();de();jg();Ps={id:"kilominx",fullName:"Kilominx",kpuzzle:kA(async()=>{let A=await WB("megaminx + chopasaurus"),g=JSON.parse(JSON.stringify(A.getKPuzzleDefinition(!0)));delete g.orbits.CENTERS,delete g.orbits.CENTERS2,delete g.startStateData.CENTERS,delete g.startStateData.CENTERS2;for(let t of Object.values(g.moves))delete t.CENTERS,delete t.CENTERS2;g.name="kilominx",delete g.experimentalPuzzleDescription;let e=await Promise.resolve().then(()=>(qI(),HI)),B=new e.ExperimentalPGNotation(A,A.getOrbitsDef(!0)),I=new PA(g,{experimentalPGNotation:{lookupMove:t=>t.toString()==="x2"||t.toString()==="x2'"?o.transformationData:B.lookupMove(t)}}),o=I.algToTransformation("Rv2 Fv Uv'");return g.moves.x2=o,I}),svg:kA(async()=>(await Promise.resolve().then(()=>(ot(),It))).kilominxSVG)}});var zs,Os=U(()=>{"use strict";lg();jg();zs={id:"redi_cube",fullName:"Redi Cube",inventedBy:["Oskar van Deventer"],inventionYear:2009,kpuzzle:kA(async()=>new PA((await Promise.resolve().then(()=>(ot(),It))).rediCubeJSON)),svg:async()=>(await Promise.resolve().then(()=>(ot(),It))).rediCubeSVG}});var kL,_s=U(()=>{"use strict";kL=\`<svg
1805
+ \`});var Ks={};dg(Ks,{megaminxLLSVG:()=>SL});var xs=U(()=>{"use strict";Ms()});var Vr,Ys,bs=U(()=>{"use strict";de();jg();Ns();Vr=class extends Zg{constructor(){super({id:"megaminx",fullName:"Megaminx",inventionYear:1981});this.stickerings=jr;this.llSVG=kA(async()=>(await Promise.resolve().then(()=>(xs(),Ks))).megaminxLLSVG)}stickeringMask(e){return Gs(this,e)}},Ys=new Vr});var Xr,vs,Js=U(()=>{"use strict";de();jg();Xr=class extends Zg{constructor(){super({id:"pyraminx",fullName:"Pyraminx",inventedBy:["Uwe Meffert"]});this.svg=kA(async()=>(await Promise.resolve().then(()=>(le(),Qe))).pyraminxSVG)}},vs=new Xr});var Hs,qs=U(()=>{"use strict";lg();jg();Hs={id:"square1",fullName:"Square-1",inventedBy:["Karel Hr\\u0161el","Vojtech Kopsk\\xFD"],inventionYear:1990,kpuzzle:kA(async()=>new PA((await Promise.resolve().then(()=>(le(),Qe))).sq1HyperOrbitJSON)),svg:kA(async()=>(await Promise.resolve().then(()=>(le(),Qe))).sq1HyperOrbitSVG)}});var Ps,Ts=U(()=>{"use strict";lg();de();jg();Ps={id:"kilominx",fullName:"Kilominx",kpuzzle:kA(async()=>{let A=await WB("megaminx + chopasaurus"),g=structuredClone(A.getKPuzzleDefinition(!0));delete g.orbits.CENTERS,delete g.orbits.CENTERS2,delete g.startStateData.CENTERS,delete g.startStateData.CENTERS2;for(let o of Object.values(g.moves))delete o.CENTERS,delete o.CENTERS2;g.name="kilominx";let e=await Promise.resolve().then(()=>(qI(),HI)),B=new e.ExperimentalPGNotation(A,A.getOrbitsDef(!0));return new PA(g,{experimentalPGNotation:{lookupMove:o=>B.lookupMove(o)}})}),svg:kA(async()=>(await Promise.resolve().then(()=>(ot(),It))).kilominxSVG)}});var zs,Os=U(()=>{"use strict";lg();jg();zs={id:"redi_cube",fullName:"Redi Cube",inventedBy:["Oskar van Deventer"],inventionYear:2009,kpuzzle:kA(async()=>new PA((await Promise.resolve().then(()=>(ot(),It))).rediCubeJSON)),svg:async()=>(await Promise.resolve().then(()=>(ot(),It))).rediCubeSVG}});var kL,_s=U(()=>{"use strict";kL=\`<svg
1806
1806
  height="256"
1807
1807
  viewBox="0 0 256 256"
1808
1808
  width="256"
@@ -4320,9 +4320,9 @@ Alg BR' B U BR' R BR R' U' BR B'
4320
4320
  Alg F' BL' BR R' BR BL BR' R BR' F
4321
4321
  Alg BR L' BL BR' BL' BR' L U BR U'
4322
4322
  Alg U BR' U' BR BL' BR BL BR'
4323
- \`)}var kh,hf=U(()=>{"use strict";Te();PI();kh=null});function Gt(A){if(A<2)return A;let g=1;for(let e=2;e<=A;e++)g*=e;return g}function wE(A,g){if(g<0||g>A)return 0;if(g===0||g===A)return 1;let e=1;for(let B=0;B<g;B++)e=e*(A-B)/(B+1)|0;return e}function Gh(A){A=A.slice();let g=A.length,e=Gt(g-1),B=0;for(;g>1;){g--;let I=A[0];B+=I*e;for(let o=0;o<g;o++){let t=A[o+1];A[o]=t-(t>I)}e/=g}return B}function Nh(A,g){let e=[],B=Gt(g-1);for(let I=0;I<g;I++)e[I]=A/B|0,A%=B,B/=g-1-I;for(let I=g-2;I>=0;I--)for(let o=I+1;o<g;o++)e[o]+=+(e[o]>=e[I]);return e}function yf(A){let g=A.length,e=0;for(let B=0;B<g-1;B++)for(let I=B;I<g;I++)A[B]>A[I]&&(e^=1);return e}function Mh(A,g){let e=[],B=Gt(g-1)/2,I=0;for(let o=0;o<g-1;o++)e[o]=A/B|0,A%=B,B/=g-1-o;e[g-1]=0;for(let o=g-2;o>=0;o--)for(let t=o+1;t<g;t++)e[t]>=e[o]?e[t]++:I^=1;return I===1&&([e[g-2],e[g-1]]=[e[g-1],e[g-2]]),e}function pf(A){return Gh(A)>>1}function Ff(A){let g=A.length,e=0;for(let t=0;t<g;t++)e+=+(A[t]===1);let B=g-e;if(B===0||e===0||g===1)return 0;let I=wE(g-1,e),o=0;for(let t=0;B>0&&e>0&&g>1;t++)g--,A[t]===0?I=I*--B/g:(o+=I,I=I*e--/g);return o}function Kh(A,g,e){let B=e-g,I=wE(e-1,g),o=[],t=e-1;for(let i=0;i<t;i++)e--,A<I?(o.push(0),I=I*--B/e):(o.push(1),A-=I,I=I*g--/e);return o.push(g),o}function mC(A,g){let e=[];for(let B=0;B<g.length;B++)e[B]=A[g[B]];return e}function dB(A,g){let e=[];for(let B=0;B<g;B++)e[B]=B;for(let B=0;B<A.length;B++)e[A[B]]=A[(B+1)%A.length];return e}function SB(A,g){let e=Array(g).fill(0);for(let B in A)e[B]=A[B];return e}function xh(A,g){let e=Array(8).fill(0);for(let B=0;B<8;B++)e[B]=(A[1][B]+g[1][B])%3;return[mC(A[0],g[0]),e]}function Oh(A){let g=["0","","'"];return A.map(([B,I])=>zh[B]+g[I]).join(" ")}function _h(){let A=Mh(Math.floor(yA(Gt(12))/2),12),g=Array(8);for(let e=0;e<8;e++)g[e]=yA(3);return[A,g]}function Wh(){return jh(_h())}function jh(A){let g=Vh(A),e=[mf(),df()],B=[Zh(),$h()],I=[Sf(),Ay()],o=[gy(),Xh()],t=By(g,e,B),i,r=new Set,n=+new Date;for(let l=0;l<25;l++){let{value:Q,done:f}=t.next(),c=A;for(let[N,K]of Q)for(let Y=0;Y<K;Y++)c=xh(c,Ut[N]);if(r.has(c.toString()))continue;r.add(c.toString());let R=pf(c[0].slice(0,8)),L=0;for(let N=0;N<4;N++)L+=c[1][N]*3**N;let p=[R,L],k=i?i.length-Q.length-1:999999,d=ey(p,I,o,k);if(d!==void 0&&((i===void 0||i.length>Q.length+d.length)&&(i=Q.concat(d)),new Date-n>300))break}return i}function Vh(A){let g=0;for(let o=0;o<4;o++)g+=A[0].indexOf(o+8)*12**o;let e=0;for(let o=0;o<4;o++)e+=A[1][o+4]*3**o;let B=A[0].map(o=>Math.max(-1,o-8)),I=Ff(B.map(o=>+(o>=0)))*2+yf(B.filter(o=>o>=0));return[g,e+81*I]}function wf(){if(HA.phase1cm)return HA.phase1cm;let A=[];for(let g=0;g<81;g++){A[g]=Array(8);let e=[g%3,Math.floor(g/3)%3,Math.floor(g/9)%3,Math.floor(g/27)];A[g][0]=A[g][1]=A[g][2]=A[g][3]=g;for(let B=0;B<4;B++)e[B]=(e[B]+2)%3,A[g][4+B]=e[0]+e[1]*3+e[2]*9+e[3]*27,e[B]=(e[B]+1)%3}return HA.phase1cm=A}function Xh(){if(HA.phase1cp)return HA.phase1cp;let A=Array(81);for(let g=0;g<81;g++){let e=[g%3,Math.floor(g/3)%3,Math.floor(g/9)%3,Math.floor(g/27)];A[g]=(e[0]!==0)+(e[1]!==0)+(e[2]!==0)+(e[3]!==0)}return HA.phase1cp=A}function mf(){if(HA.phase1em)return HA.phase1em;let A=[];for(let e=0;e<12;e++){A[e]=[];for(let B=0;B<8;B++)A[e][B]=Ut[B][0].indexOf(e)}let g=Array(12**4);for(let e=0;e<12**4;e++){g[e]=Array(8);for(let B=0;B<8;B++){let I=0;for(let o=0;o<4;o++)I+=A[Math.floor(e/12**o)%12][B]*12**o;g[e][B]=I}}return HA.phase1em=g}function Zh(){return HA.phase1ep?HA.phase1ep:HA.phase1ep=mE(mf(),[8+12*(9+12*(10+12*11))])}function df(){if(HA.phase1sm)return HA.phase1sm;let A=wE(12,4),g=[];for(let I=0;I<A;I++){g[I]=[];let o=Kh(I,4,12),t=[];for(let i=0,r=0;i<12;i++)o[i]===0?t[i]=-1:t[i]=r++;for(let i=0;i<8;i++){let r=mC(t,Ut[i][0]),n=mC(o,Ut[i][0]),l=yf(r.filter(Q=>Q>=0));g[I][i]=Ff(n)*2+l}}let e=wf(),B=[];for(let I=0;I<A;I++)for(let o=0;o<81;o++){let t=B[o+81*(2*I)]=[],i=B[o+81*(2*I+1)]=[];for(let r=0;r<8;r++)t[r]=e[o][r]+81*g[I][r],i[r]=e[o][r]+81*(g[I][r]^1)}return HA.phase1sm=B}function $h(){return HA.phase1sp?HA.phase1sp:HA.phase1sp=mE(df(),[0])}function Ay(){if(HA.phase2cm)return HA.phase2cm;let A=wf(),g=Array(81);for(let e=0;e<81;e++)g[e]=A[e].slice(4,8);return HA.phase2cm=g}function Sf(){if(HA.phase2em)return HA.phase2em;let A=8,g=Gt(A)/2,e=Array(g),B=[0,1,2,3,4,5,6,7];for(let I=0;I<g;I++){e[I]=Array(4);for(let t=0;t<4;t++){let i=mC(B,Ut[t][0].slice(0,8));e[I][t]=pf(i)}if(I===g-1)break;let o=0;do for(let t=A-2;t>=0;t--){if(B[t]>B[t+1])continue;let i=t+1;for(let r=i;r<A;r++)B[r]>B[t]&&(i=r);[B[t],B[i]]=[B[i],B[t]],o^=1;for(let r=0;t+1+r<A-1-r;r++,o^=1)[B[t+1+r],B[A-1-r]]=[B[A-1-r],B[t+1+r]];break}while(o!==0)}return HA.phase2em=e}function gy(){return HA.phase2ep?HA.phase2ep:HA.phase2ep=mE(Sf(),[0])}function mE(A,g){let e=A.length,B=A[0].length,I=Array(e).fill(-1),o=g.slice(),t=[],i=0;for(;o.length>0;){t.length=0;for(let r of o)if(I[r]===-1){I[r]=i;for(let n=0;n<B;n++){let l=A[r][n];for(;l!==r;)t.push(l),l=A[l][n]}}[o,t]=[t,o],i+=1}return I}function ey(A,g,e,B){B=B||999999;let I=A.length,o=0;for(let t=0;t<I;t++)o=Math.max(o,e[t][A[t]]);for(;o<=B;){let t=kf(A,g,e,o,-1);if(t!==void 0)return t;o++}}function kf(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0)return[];if(!(i===0&&B===1))for(let r=0;r<t;r++){if(r===I||r<I&&dC[r]===dC[I])continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=kf(n,g,e,B-1,r);if(Q!==void 0)return[[r,l]].concat(Q);for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}function*By(A,g,e){let B=A.length,I=0;for(let o=0;o<B;o++)I=Math.max(I,e[o][A[o]]);for(;;)yield*Uf(A,g,e,I,-1),I++}function*Uf(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0){yield[];return}if(!(i===0&&B===1))for(let r=0;r<t;r++){if(r===I||r<I&&dC[r]===dC[I])continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=Uf(n,g,e,B-1,r);for(;;){let{value:f,done:c}=Q.next();if(c)break;yield[[r,l]].concat(f)}for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}async function Gf(){return new J(Oh(Wh()))}var Yh,bh,vh,Jh,Hh,qh,Ph,Th,Z3,Ut,zh,dC,HA,Nf=U(()=>{"use strict";SA();Be();Yh=[dB([0,1,4],12),SB({0:2},8)],bh=[dB([1,2,5],12),SB({1:2},8)],vh=[dB([2,3,6],12),SB({2:2},8)],Jh=[dB([3,0,7],12),SB({3:2},8)],Hh=[dB([9,8,4],12),SB({4:2},8)],qh=[dB([10,9,5],12),SB({5:2},8)],Ph=[dB([11,10,6],12),SB({6:2},8)],Th=[dB([8,11,7],12),SB({7:2},8)],Z3=[Nh(0,12),Array(8).fill(0)],Ut=[Yh,bh,vh,Jh,Hh,qh,Ph,Th],zh=["UL","U","UR","F","L","B","R","D"],dC=[0,1,0,1,1,0,1,0];HA={}});var dE={};dg(dE,{getRandomRediCubeScramble:()=>Gf,sgsDataFTO:()=>uf});var SE=U(()=>{"use strict";hf();Nf()});function Kf(A){if(A<2)return A;let g=1;for(let e=2;e<=A;e++)g*=e;return g}function kC(A,g){if(g<0||g>A)return 0;if(g===0||g===A)return 1;let e=1;for(let B=0;B<g;B++)e=e*(A-B)/(B+1)|0;return e}function Iy(A){A=A.slice();let g=A.length,e=Kf(g-1),B=0;for(;g>1;){g--;let I=A[0];B+=I*e;for(let o=0;o<g;o++){let t=A[o+1];A[o]=t-(t>I)}e/=g}return B}function oy(A){let g=A.length,e=0;for(let B=0;B<g-1;B++)for(let I=B;I<g;I++)A[B]>A[I]&&(e^=1);return e}function ty(A){return Iy(A)>>1}function GE(A){let g=A.length,e=0;for(let t=0;t<g;t++)e+=+(A[t]===1);let B=g-e;if(B===0||e===0||g===1)return 0;let I=kC(g-1,e),o=0;for(let t=0;B>0&&e>0&&g>1;t++)g--,A[t]===0?I=I*--B/g:(o+=I,I=I*e--/g);return o}function ry(A,g,e){let B=e-g,I=kC(e-1,g),o=[],t=e-1;for(let i=0;i<t;i++)e--,A<I?(o.push(0),I=I*--B/e):(o.push(1),A-=I,I=I*g--/e);return o.push(g),o}function Ge(A,g){let e=[];for(let B=0;B<g.length;B++)e[B]=A[g[B]];return e}function NE(A,g){let e=Ge(A[0],g[0]),B=[],I=g[0].length;for(let o=0;o<I;o++)B[o]=(A[1][g[0][o]]+g[1][o])%3;return[e,B]}function yo(A,g){let e=[];for(let B=0;B<g;B++)e[B]=B;for(let B=0;B<A.length;B++)e[A[B]]=A[(B+1)%A.length];return e}function kB(A,g){let e=Array(g).fill(0);for(let B in A)e[B]=A[B];return e}function ay(){let A=[0];for(let e=1;e<20;e++){let B=yA(e+1);A[e]=A[B],A[B]=e}oy(A)===1&&([A[0],A[1]]=[A[1],A[0]]);let g=Array(20).fill(0);for(let e=0;e<19;e++)g[e]=yA(3),g[19]+=3-g[e];return g[19]%=3,[A,g]}function fy(A){let g=["0","","2","2'","'"];return A.map(([B,I])=>ly[B]+g[I]).join(" ")}function Dy(A,g){for(let[e,B]of g)for(let I=0;I<B;I++)A=NE(A,QI[e]);return A}function cy(){return wy(ay())}function Ly(A){let g=A[0];if(g.slice(15,20).every(o=>o<15))return[];if(g.slice(0,5).every(o=>o<15))return[[6,1]];let e=g.map(o=>o>=15),B=0,I;for(;I===void 0;)B++,I=vf(e,B,-1);return I.push([6,1]),I}function vf(A,g,e){if(g===0)return A.slice(0,5).some(B=>B)?void 0:[];for(let B=0;B<6;B++)if(B!==e)for(let I=1;I<5;I++){let o=Ge(A,SC[B][I][0]),t=vf(o,g-1,B);if(t!==void 0)return[[B,I]].concat(t)}}function Ry(A){let g=A[0].slice(0,15),e=A[1],I=243*GE(g.map(t=>+(t>=15)));for(let t=0,i=0;t<15;t++)g[t]<15||(I+=e[t]*Math.pow(3,i),i++);let o=0;for(let t=0;t<5;t++)o+=g.indexOf(15+t)*Math.pow(15,t);return[I,o]}function uy(A){let g=[UC(),GC()],e=[my(),Sy()];return Jf(Ry(A),g,e).concat([[6,1]])}function hy(A){let g=[5,6,7,8,14],e=A[0].slice(0,15),B=A[1],o=243*GE(e.map(i=>+(g.indexOf(i)!==-1)));for(let i=0,r=0;i<15;i++)g.indexOf(e[i])!==-1&&(o+=B[i]*Math.pow(3,r),r++);let t=0;for(let i=0;i<5;i++)t+=e.indexOf(g[i])*Math.pow(15,i);return[o,t]}function yy(A){let g=[UC(),GC()],e=[dy(),ky()];return Jf(hy(A),g,e)}function py(A){let g=A[0].slice(0,14),e=A[1],B=0,I=[],o=0;for(let t of[0,1,2,3,4,9,10,11,12,13])t!==13&&(B+=e[t]*Math.pow(3,o)),I[o]=g[t]<5?g[t]:g[t]-4,o++;return[B,ty(I)]}function Fy(A){return Ky(py(A))}function wy(A){let g=[];for(let e of[Ly,uy,yy,Fy]){let B=e(A);A=Dy(A,B),g=g.concat(B)}return g}function UC(){if(mA.phase23om)return mA.phase23om;let A=kC(15,5),g=[1,3,9,27,81,243],e=Array(kC(15,5)*g[5]);mA.phase23om=e;for(let B=0;B<A;B++){let I=ry(B,5,15).concat(Array(5).fill(0)),o=[];for(let t=0;t<6;t++){let i=Ge(I,QI[t][0]).slice(0,15);o[t]=GE(i)}for(let t=0;t<g[5];t++){e[t+243*B]=[];let i=[];for(let r=0,n=0;r<20;r++)I[r]===1?(i[r]=(t/g[n]|0)%3,n++):i[r]=99;for(let r=0;r<6;r++){let n=QI[r],l=[];for(let c=0;c<15;c++)l[c]=i[n[0][c]]+n[1][c];let Q=l.filter(c=>c<10),f=0;for(let c=0;c<5;c++)f+=Q[c]%3*g[c];e[t+243*B][r]=f+243*o[r]}}}return e}function my(){if(mA.phase2op)return mA.phase2op;let A=UC();return mA.phase2op=po(A,[243*3002])}function dy(){if(mA.phase3op)return mA.phase3op;let A=UC();return mA.phase3op=po(A,[243*246])}function GC(){if(mA.phase23pm)return mA.phase23pm;let A=[1,15,225,Math.pow(15,3),Math.pow(15,4),Math.pow(15,5)],g=Array(A[5]),e=Array(15);for(let I=0;I<15;I++){e[I]=Array(6);for(let o=0;o<6;o++)e[I][o]=QI[o][0].indexOf(I)}let B=[0,0,0,0,0];for(let I=0;I<A[5];I++){g[I]=Array(6);for(let o=0;o<6;o++){let t=0;for(let i=0;i<5;i++)t+=e[B[i]][o]*A[i];g[I][o]=t}B[0]++;for(let o=0;o<4;o++)B[o]===15&&(B[o]=0,B[o+1]++)}return mA.phase23pm=g}function Sy(){if(mA.phase2pp)return mA.phase2pp;let A=GC();return mA.phase2pp=po(A,[213090])}function ky(){if(mA.phase3pp)return mA.phase3pp;let A=GC();return mA.phase3pp=po(A,[737420])}function ME(){if(mA.phase4om)return mA.phase4om;let A=[1,3,9,27,81,243,729,2187,6561,19683,59049],g=Array(A[9]);for(let e=0;e<A[9];e++){let B=Array(14).fill(0);for(let I=0;I<9;I++){let o=I<5?I:I+4;B[o]=(e/A[I]|0)%3,B[13]-=B[o]}B[13]=(B[13]+999)%3,g[e]=[];for(let I=0;I<3;I++){let o=QI[I],t=[0,1,2,3,4,9,10,11,12,13].map(r=>B[o[0][r]]+o[1][r]),i=0;for(let r=0;r<9;r++)i+=t[r]%3*A[r];g[e][I]=i}}return mA.phase4om=g}function KE(){if(mA.phase4pm)return mA.phase4pm;let A=Kf(10)/2,g=10,e=[0,1,2,3,4,-1,-1,-1,-1,5,6,7,8,9],B=[0,1,2,3,4,9,10,11,12,13],I=[Ge(e,Ge(xf[0],B)),Ge(e,Ge(Yf[0],B)),Ge(e,Ge(bf[0],B))],o=Array(A),t=Array(10);for(let i=0;i<A;i++){Cy(i,t),o[i]=[];for(let r=0;r<3;r++){let n=Ge(t,I[r]);o[i][r]=iy(n)}}return mA.phase4pm=o}function Uy(){if(mA.phase4op)return mA.phase4op;let A=ME();return mA.phase4op=po(A,[0])}function Gy(){if(mA.phase4pp)return mA.phase4pp;let A=KE();return mA.phase4pp=po(A,[0])}function Ny(A){if(mA.phase4np_list&&mA.phase4np_list.threshold===A)return mA.phase4np_list;let g=[ME(),KE()],e=Math.pow(3,9),B=[0];I(A,[0,0],-1);function I(i,r,n){if(B.push(r[0]+e*r[1]),i===0)return;let l=[];for(let Q=0;Q<3;Q++)if(Q!==n){l[0]=r[0],l[1]=r[1];for(let f=1;f<5;f++)l[0]=g[0][l[0]][Q],l[1]=g[1][l[1]][Q],I(i-1,l,Q)}}B.sort((i,r)=>i-r);let o=[],t=-1;for(let i of B)i!==t&&o.push(t=i);return o.threshold=A,mA.phase4np_list=o}function My(A,g){let e=0,B=A.length-1;for(;B-e>1;){let I=e+B>>1;g>A[I]?e=I+1:B=I}return g===A[e]||g===A[B]}function po(A,g){let e=A.length,B=A[0].length,I=Array(e).fill(-1);for(let i of g)I[i]=0;let o=0,t=!1;for(;!t;){t=!0;for(let i=0;i<e;i++)if(I[i]===o)for(let r=0;r<B;r++){let n=A[i][r];for(;n!==i;)I[n]===-1&&(t=!1,I[n]=o+1),n=A[n][r]}o++}return I}function Jf(A,g,e){let B=A.length,I=0;for(let o=0;o<B;o++)I=Math.max(I,e[o][A[o]]);for(;;){let o=Hf(A,g,e,I,-1);if(o!==void 0)return o;I++}}function Hf(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0||i===0)return[];for(let r=0;r<t;r++){if(r===I)continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=Hf(n,g,e,B-1,r);if(Q!==void 0)return[[r,l]].concat(Q);for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}function Ky(A){let g=ME(),e=KE(),B=Uy(),I=Gy(),o=Ny(kE),t=Math.max(B[A[0]],I[A[1]]);for(;;){let i=qf(A,t,-1,g,e,B,I,o);if(i!==void 0)return i;t++}}function qf(A,g,e,B,I,o,t,i){let r=Math.max(o[A[0]],t[A[1]]);if(!(r>g)&&(r<=kE&&!My(i,A[0]+19683*A[1])&&(r=kE+1),!(r>g))){if(g===0||r===0)return[];for(let n=0;n<3;n++){if(n===e)continue;let l=A.slice();for(let Q=1;Q<5;Q++){l[0]=B[l[0]][n],l[1]=I[l[1]][n];let f=qf(l,g-1,n,B,I,o,t,i);if(f!==void 0)return[[n,Q]].concat(f)}}}}function xy(){return new J(fy(cy()))}var kE,iy,Cy,xf,Yf,bf,ny,Ey,Qy,UE,QN,QI,ly,sy,SC,mA,Pf=U(()=>{"use strict";SA();Be();kE=7;[iy,Cy]=(()=>{let A=new Int8Array(10240),g=new Int8Array(1024*10);for(let I=0;I<1024;I++)for(let o=0,t=0;o<10;o++)(I>>>o&1)!==0&&(A[o<<10|I]=t,g[t<<10|I]=o,t++);function e(I){let o=1023,t=181440,i=0;for(let r=0;r<8;r++){let n=I[r];i+=A[o|n<<10]*t,o&=~(1<<n),t/=9-r}return i}function B(I,o){let t=1023,i=181440,r=0;for(let n=0;n<8;n++){let l=I/i|0;I-=l*i,r^=l&1;let Q=g[t|l<<10];o[n]=Q,t&=~(1<<Q),i/=9-n}return o[8]=g[t|r<<10],o[9]=g[t|(r^1)<<10],o}return[e,B]})();xf=[yo([0,1,2,3,4],20),kB({},20)],Yf=[yo([4,3,11,12,13],20),kB({4:2,3:1,11:1,12:1,13:1},20)],bf=[yo([3,2,9,10,11],20),kB({3:2,2:1,9:1,10:1,11:1},20)],ny=[yo([2,1,7,8,9],20),kB({2:2,1:1,7:1,8:1,9:1},20)],Ey=[yo([1,0,5,6,7],20),kB({1:2,0:1,5:1,6:1,7:1},20)],Qy=[yo([0,4,13,14,5],20),kB({0:2,4:1,13:1,14:1,5:1},20)],UE=[[15,16,17,18,19,10,9,8,7,6,5,14,13,12,11,0,1,2,3,4],kB({},20)],QN=[[1,2,3,4,0,7,8,9,10,11,12,13,14,5,6,19,15,16,17,18],kB({},20)],QI=[xf,Yf,bf,ny,Ey,Qy,UE],ly=["U","R","F","L","BL","BR","x2"],sy=NE(UE,UE),SC=[];for(let A=0;A<QI.length;A++){SC[A]=[sy];for(let g=1;g<5;g++)SC[A][g]=NE(SC[A][g-1],QI[A])}mA={}});var Tf={};dg(Tf,{getRandomKilominxScramble:()=>xy});var zf=U(()=>{"use strict";Pf()});function Nt(A){if(A<2)return A;let g=1;for(let e=2;e<=A;e++)g*=e;return g}function sI(A){let g=Array(A);for(let e=0;e<A;e++)g[e]=e;return g}function Yy(A){A=A.slice();let g=A.length,e=Nt(g-1),B=0;for(;g>1;){g--;let I=A[0];B+=I*e;for(let o=0;o<g;o++){let t=A[o+1];A[o]=t-(t>I)}e/=g}return B}function NC(A,g){let e=[],B=Nt(g-1)/2,I=0;for(let o=0;o<g-1;o++)e[o]=A/B|0,A%=B,B/=g-1-o;e[g-1]=0;for(let o=g-2;o>=0;o--)for(let t=o+1;t<g;t++)e[t]>=e[o]?e[t]++:I^=1;return I===1&&([e[g-2],e[g-1]]=[e[g-1],e[g-2]]),e}function jf(A){return Yy(A)>>1}function lI(A,g){let e=[];for(let B=0;B<g.length;B++)e[B]=A[g[B]];return e}function YE(A){let g=[];for(let e=0;e<A.length;e++)g[A[e]]=e;return g}function Mt(A,g){let e=[];for(let B=0;B<g;B++)e[B]=B;for(let B=0;B<A.length;B++)e[A[B]]=A[(B+1)%A.length];return e}function UB(A,g){return A.length===0?sI(g):A.map(e=>Mt(e,g)).reduce(lI)}function by(A,g){let e=Array(4);for(let t=0;t<4;t++)e[t]=(A.co[t]+g.co[t])%3;let B=lI(A.mp,g.mp),I=lI(A.wp,g.wp),o=lI(A.cp,g.cp);return{co:e,mp:B,wp:I,cp:o}}function Vf(A,g){return A>=4&&g>=4?!0:A<4&&g<4?A===g:(A^g)===4}function Wy(A){let g=["0","","'"];return A.map(([B,I])=>_y[B]+g[I]).join(" ")}function jy(){let A=Array(4);for(let I=0;I<4;I++)A[I]=yA(3);let g=NC(yA(Nt(6)/2),6);for(let I=0,o=0;I<6;I++){let t=I===5?o:yA(2);o^=t,g[I]+=t*6,g[I+6]=(g[I]+6)%12}let e=NC(yA(Nt(12)/2),12),B=NC(yA(Nt(4)/2),4);return{co:A,mp:g,wp:e,cp:B}}function Vy(){return Zy(jy(yA))}function Xy(A=!0,g=!1){let e=Wy(Vy());if(!A)return e;let B=["u","l","r","b"],I=["0","","'"];if(!g){for(let Q=0;Q<4;Q++){let f=yA(3);f!==0&&(e+=\` \${B[Q]}\${I[f]}\`)}return e.trim()}let o=[],t=[],i=[];for(let Q=0;Q<4;Q++)o[Q]=yA(3),t[Q]=yA(3),i[Q]=(o[Q]-t[Q]+3)%3;let r=Q=>Q.filter(f=>f!==0).length;for(;!(r(t)>=1&&r(i)>=1&&r(t)+r(i)>=4);)for(let Q=0;Q<4;Q++)t[Q]=yA(3),i[Q]=(o[Q]-t[Q]+3)%3;let n=t.map((Q,f)=>Q!==0?\`\${B[f]}\${I[Q]} \`:"").join(""),l=i.map((Q,f)=>Q!==0?\` \${B[f]}\${I[Q]}\`:"").join("");return n+e+l}function Zy(A){let g=Ap(A),e=[gD(),eD()],B=[tp(),ip()],I=Bp(g),o,t=new Set,i=performance.now();for(let r=0;r<22;r++){let{value:n,done:l}=I.next(),Q=A;for(let[p,k]of n)for(let d=0;d<k;d++)Q=by(Q,Fo[p]);let f=JSON.stringify(Q);if(t.has(f))continue;t.add(f);let c=Ip(Q),R=o?o.length-n.length-1:999999,L=Cp(c,e,B,R).next().value;if(L!==void 0&&((o===void 0||o.length>n.length+L.length)&&(o=n.concat(L)),performance.now()-i>300))break}return o}function $y(A){return A[3^A.indexOf(3)]}function Ap(A){let g=lI(YE(A.mp),A.wp),e=(A.co.reduce((B,I)=>B+I)-$y(A.cp)+3)%3;return[0,1,2,3,4,5].map(B=>B+6*g.indexOf(B)+72*g.indexOf(B+6)+864*e)}function*Bp(A){let g=0,e=AD(),B=op();for(;;)yield*Zf(...A,e,B,g,-1),g++}function*Zf(A,g,e,B,I,o,t,i,r,n){let l=aI,Q=gB[A]+gB[g]+gB[e]+gB[B]+gB[I]+gB[o],f=Math.max(i[A%864+g*864],i[e%864+g*864],i[I%864+g*864],i[A%864+B*864],i[e%864+B*864],i[I%864+B*864],i[A%864+o*864],i[e%864+o*864],i[I%864+o*864],i[A%864+e*864],i[A%864+I*864],i[e%864+I*864],i[g%864+B*864],i[g%864+o*864],i[B%864+o*864],vE[Q]);if(!(f>r)){if(r===0){yield[];return}if(!(f===0&&r===1))for(let c=0;c<l;c++){if(c===n||c<n&&Vf(c,n))continue;let R=A,L=g,p=e,k=B,d=I,N=o;for(let K=1;K<=2;K++){R=t[R][c],L=t[L][c],p=t[p][c],k=t[k][c],d=t[d][c],N=t[N][c];let Y=Zf(R,L,p,k,d,N,t,i,r-1,c);for(;;){let{value:O,done:QA}=Y.next();if(QA)break;yield[[c,K]].concat(O)}}}}}function Ip(A){let g=A.mp,e=jf(g.slice(0,6).map(t=>t%6)),B=g.slice(0,5).map((t,i)=>(t>=6)*2**i).reduce((t,i)=>t+i),I=A.co.map((t,i)=>t*3**i).reduce((t,i)=>t+i),o=A.cp.indexOf(0);return[e+360*o,B+32*I]}function $f(){if(Bg.phase1pm)return Bg.phase1pm;let A=Array(6*12*12).fill().map(()=>Array(aI).fill(-1));for(let g=0;g<6;g++)for(let e=0;e<12;e++)for(let B=0;B<12;B++){if(e===B)continue;let I=g+6*e+72*B;for(let o=0;o<aI;o++){let t=Xf[o][g],i=bE[o][e],r=bE[o][B];t<6?A[I][o]=t+6*i+72*r:A[I][o]=t-6+6*r+72*i}}return Bg.phase1pm=A}function AD(){if(Bg.phase1pcm)return Bg.phase1pcm;let A=$f(),g=Array(A.length*3).fill().map(()=>Array(aI).fill(-1));for(let e=0;e<A.length;e++)for(let B=0;B<aI;B++){let I=A[e][B];g[e][B]=I+6*12*12*xE[B],g[e+6*12*12][B]=I+6*12*12*((xE[B]+1)%3),g[e+2*6*12*12][B]=I+6*12*12*((xE[B]+2)%3)}return Bg.phase1pcm=g}function op(){if(Bg.phase1p2cp)return Bg.phase1p2cp;let A=$f(),g=AD(),e=new Int8Array((6*12*12)**2*3);e.fill(-1);let B=[0,1,2,3,4,5].map(o=>o+6*o+72*(o+6));for(let o=0;o<6;o++)for(let t=0;t<6;t++)o!==t&&(e[B[o]+864*B[t]]=0);let I=0;for(;;){let o=!1;for(let t=0;t<e.length;t++){if(e[t]!==I)continue;let i=t%864,r=Math.floor(t/864);for(let n=0;n<aI;n++){let l=i,Q=r;for(let f=1;f<=2;f++){l=A[l][n],Q=g[Q][n];let c=l+864*Q;e[c]===-1&&(o=!0,e[c]=I+1)}}}if(!o)break;I++}return Bg.phase1p2cp=e}function gD(){if(Bg.phase2pm)return Bg.phase2pm;let A=Array(1440).fill().map(()=>Array(MC));for(let g=0;g<360;g++){let e=NC(g,6);for(let B=0;B<6;B++)e[B+6]=e[B]+6;for(let B=0;B<MC;B++){let I=lI(e,Fo[B].mp),o=jf(I.slice(0,6).map(t=>t%6));for(let t=0;t<4;t++){let i=Fo[B].cp[t];A[g+360*i][B]=o+360*t}}}return Bg.phase2pm=A}function eD(){if(Bg.phase2om)return Bg.phase2om;let A=Array(32*81).fill().map(()=>Array(MC));for(let g=0;g<32;g++){let e=[0,1,2,3,4].map(I=>g>>I&1);e[5]=e.reduce((I,o)=>I^o);let B=[];for(let I=0;I<6;I++)B[I]=I+6*e[I],B[I+6]=I+6*(e[I]^1);for(let I=0;I<81;I++){let o=[0,1,2,3].map(t=>Math.floor(I/3**t)%3);for(let t=0;t<MC;t++){let r=lI(B,Fo[t].mp).slice(0,5).map(f=>+(f>=6)),n=0;for(let f=0;f<5;f++)n+=r[f]<<f;let l=o.map((f,c)=>(f+Fo[t].co[c])%3),Q=0;for(let f=0;f<4;f++)Q+=l[f]*3**f;A[g+32*I][t]=n+32*Q}}}return Bg.phase2om=A}function tp(){return Bg.phase2pp?Bg.phase2pp:Bg.phase2pp=BD(gD(),[0])}function ip(){return Bg.phase2op?Bg.phase2op:Bg.phase2op=BD(eD(),[0])}function BD(A,g){let e=A.length,B=A[0].length,I=Array(e).fill(-1),o=g.slice(),t=[],i=0;for(;o.length>0;){t.length=0;for(let r of o)if(I[r]===-1){I[r]=i;for(let n=0;n<B;n++){let l=A[r][n];for(;l!==r;)t.push(l),l=A[l][n]}}[o,t]=[t,o],i+=1}return I}function*Cp(A,g,e,B){let I=A.length,o=0;for(let t=0;t<I;t++)o=Math.max(o,e[t][A[t]]);for(;o<=B;)yield*ID(A,g,e,o,-1),o++}function*ID(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0){yield[];return}if(!(i===0&&B===1))for(let r=0;r<t;r++){if(r===I||r<I&&Vf(r,I))continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=ID(n,g,e,B-1,r);for(;;){let{value:f,done:c}=Q.next();if(c)break;yield[[r,l]].concat(f)}for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}async function rp(){return Xy(!1)}var uN,hN,yN,vy,Jy,Hy,qy,Py,Ty,zy,Oy,Fo,_y,aI,MC,gp,Xf,ep,bE,xE,Wf,vE,gB,Bg,oD=U(()=>{"use strict";Be();[uN,hN]=(()=>{let A=new Int8Array(49152),g=new Int8Array(4096*12);for(let I=0;I<4096;I++)for(let o=0,t=0;o<12;o++)(I>>>o&1)!==0&&(A[o<<12|I]=t,g[t<<12|I]=o,t++);function e(I){let o=4095,t=19958400,i=0;for(let r=0;r<10;r++){let n=I[r];i+=A[o|n<<12]*t,o&=~(1<<n),t/=11-r}return i}function B(I,o){let t=4095,i=19958400,r=0;for(let n=0;n<10;n++){let l=I/i|0;I-=l*i,r^=l&1;let Q=g[t|l<<12];o[n]=Q,t&=~(1<<Q),i/=11-n}return o[10]=g[t|r<<12],o[11]=g[t|(r^1)<<12],o}return[e,B]})();yN={co:[0,0,0,0],mp:sI(12),wp:sI(12),cp:[0,1,2,3]},vy={co:[2,0,0,0],mp:sI(12),wp:Mt([1,9,11],12),cp:[0,1,2,3]},Jy={co:[0,2,0,0],mp:sI(12),wp:Mt([0,7,2],12),cp:[0,1,2,3]},Hy={co:[0,0,2,0],mp:sI(12),wp:Mt([3,6,10],12),cp:[0,1,2,3]},qy={co:[0,0,0,2],mp:sI(12),wp:Mt([4,8,5],12),cp:[0,1,2,3]},Py={co:[2,0,0,0],mp:UB([[1,9,11],[7,3,5]],12),wp:UB([[1,9,11],[7,3,5]],12),cp:[0,2,3,1]},Ty={co:[0,2,0,0],mp:UB([[0,7,2],[6,1,8]],12),wp:UB([[0,7,2],[6,1,8]],12),cp:[3,1,0,2]},zy={co:[0,0,2,0],mp:UB([[3,6,10],[9,0,4]],12),wp:UB([[3,6,10],[9,0,4]],12),cp:[1,3,2,0]},Oy={co:[0,0,0,2],mp:UB([[4,8,5],[10,2,11]],12),wp:UB([[4,8,5],[10,2,11]],12),cp:[2,0,1,3]},Fo=[Py,Ty,zy,Oy,vy,Jy,Hy,qy],_y=["u","l","r","b","U","L","R","B"],aI=8,MC=4;gp=[],Xf=[],ep=[],bE=[];for(let A=0;A<aI;A++){let g=Fo[A];gp[A]=g.mp,Xf[A]=YE(g.mp),ep[A]=g.wp,bE[A]=YE(g.wp)}xE=[0,0,0,0,2,2,2,2],Wf=[[14,-1,-1,11,11,10,9,8,8,7,7,6,4,5,5,3,4,4,2,3,4,3,-1,-1,0],[13,-1,-1,11,10,10,9,8,8,7,7,6,4,5,5,3,4,4,2,3,3,1,-1,-1,6]],vE=new Int8Array(55);for(let A=0;A<25;A++)vE[A]=Wf[0][A],vE[A+30]=Wf[1][A];gB=new Int8Array(6*12*12*3);for(let A=0;A<6;A++)for(let g=0;g<12;g++)for(let e=0;e<12;e++){let B=A+6*g+72*e,I=2;g===A?I++:g===(A+6)%12&&I--,e===(A+6)%12?I++:e===A&&I--,gB[B]=I,gB[B+6*12*12]=gB[B+2*6*12*12]=I+5}Bg={}});var tD={};dg(tD,{randomMasterTetraminxScrambleString:()=>rp});var iD=U(()=>{"use strict";oD()});function Lp(A,g){A.ul=g.ul,A.ur=g.ur,A.dl=g.dl,A.dr=g.dr,A.ml=g.ml}function cD(A,g){var e;g<<=2,g>24?(g=48-g,e=A.ul,A.ul=(~~A.ul>>g|A.ur<<24-g)&16777215,A.ur=(~~A.ur>>g|e<<24-g)&16777215):g>0?(e=A.ul,A.ul=(A.ul<<g|~~A.ur>>24-g)&16777215,A.ur=(A.ur<<g|~~e>>24-g)&16777215):g===0?(e=A.ur,A.ur=A.dl,A.dl=e,A.ml=1-A.ml):g>=-24?(g=-g,e=A.dl,A.dl=(A.dl<<g|~~A.dr>>24-g)&16777215,A.dr=(A.dr<<g|~~e>>24-g)&16777215):g<-24&&(g=48+g,e=A.dl,A.dl=(~~A.dl>>g|A.dr<<24-g)&16777215,A.dr=(~~A.dr>>g|e<<24-g)&16777215)}function Rp(A){var g,e,B,I,o;for(B=0,A.arr[0]=Ne(A,0),I=1;I<24;++I)Ne(A,I)!==A.arr[B]&&(A.arr[++B]=Ne(A,I));for(o=0,g=0;g<16;++g)for(e=g+1;e<16;++e)A.arr[g]>A.arr[e]&&(o^=1);return o}function up(A){var g,e,B,I;return I=A.ur&1118481,I|=~~I>>3,I|=~~I>>6,I=I&15|~~I>>12&48,B=A.ul&1118481,B|=~~B>>3,B|=~~B>>6,B=B&15|~~B>>12&48,e=A.dr&1118481,e|=~~e>>3,e|=~~e>>6,e=e&15|~~e>>12&48,g=A.dl&1118481,g|=~~g>>3,g|=~~g>>6,g=g&15|~~g>>12&48,Kt(Rp(A)<<24|B<<18|I<<12|g<<6|e)}function hp(A,g){var e,B;for(e=0;e<8;++e)A.prm[e]=~~(~~Ne(A,e*3+1)>>1<<24)>>24;for(g.cornperm=vt(A.prm),g.topEdgeFirst=Ne(A,0)===Ne(A,1),e=g.topEdgeFirst?2:0,B=0;B<4;e+=3,++B)A.prm[B]=~~(~~Ne(A,e)>>1<<24)>>24;for(g.botEdgeFirst=Ne(A,12)===Ne(A,13),e=g.botEdgeFirst?14:12;B<8;e+=3,++B)A.prm[B]=~~(~~Ne(A,e)>>1<<24)>>24;g.edgeperm=vt(A.prm),g.ml=A.ml}function Ne(A,g){var e;return g<6?e=~~A.ul>>(5-g<<2):g<12?e=~~A.ur>>(11-g<<2):g<18?e=~~A.dl>>(17-g<<2):e=~~A.dr>>(23-g<<2),~~((e&15)<<24)>>24}function qE(A,g,e){g<6?(A.ul&=~(15<<(5-g<<2)),A.ul|=e<<(5-g<<2)):g<12?(A.ur&=~(15<<(11-g<<2)),A.ur|=e<<(11-g<<2)):g<18?(A.dl&=~(15<<(17-g<<2)),A.dl|=e<<(17-g<<2)):(A.dr&=~(15<<(23-g<<2)),A.dr|=e<<(23-g<<2))}function _E(){this.arr=[],this.prm=[]}function yp(){var A,g,e,B,I,o,t,i,r;for(A=new _E,e=wo[yA(3678)],I=19088743<<1|286331153,B=19088743<<1,t=o=8,g=0;g<24;g++)(e>>g&1)===0?(i=yA(o)<<2,qE(A,23-g,B>>i&15),r=(1<<i)-1,B=(B&r)+(B>>4&~r),--o):(i=yA(t)<<2,qE(A,23-g,I>>i&15),qE(A,22-g,I>>i&15),r=(1<<i)-1,I=(I&r)+(I>>4&~r),--t,++g);return A.ml=yA(2),A}function pp(){}function Fp(A){var g,e,B,I,o,t;for(Lp(A.Search_d,A.Search_c),B=0;B<A.Search_length1;++B)cD(A.Search_d,A.Search_move[B]);for(hp(A.Search_d,A.Search_sq),e=A.Search_sq.edgeperm,g=A.Search_sq.cornperm,o=A.Search_sq.ml,t=Math.max(Ag[A.Search_sq.edgeperm<<1|o],Ag[A.Search_sq.cornperm<<1|o]),B=t;B<A.Search_maxlen2;++B)if(xC(A,e,g,A.Search_sq.topEdgeFirst,A.Search_sq.botEdgeFirst,o,B,A.Search_length1,0)){for(I=0;I<B;++I)cD(A.Search_d,A.Search_move[A.Search_length1+I]);return A.Search_sol_string=wp(A,B+A.Search_length1),!0}return!1}function wp(A,g){for(var e="",B=0,I=0,o=g-1;o>=0;o--){var t=A.Search_move[o];t>0?(t=12-t,B=t>6?t-12:t):t<0?(t=12+t,I=t>6?t-12:t):(B===0&&I===0?e+=" / ":e+=\`(\${B}, \${I}) / \`,B=I=0)}return(B!==0||I!==0)&&(e+=\`(\${B}, \${I})\`),e}function KC(A,g,e,B,I,o){var t,i,r;if(e===0&&B<4)return B===0&&Fp(A);if(o!==0&&(r=YC[g],i=hg[r],i<B&&(A.Search_move[I]=0,KC(A,r,i,B-1,I+1,0))))return!0;if(r=g,o<=0){for(t=0;t+=bt[r],r=~~t>>4,t&=15,!(t>=12||(i=hg[r],i>B));)if(i<B&&(A.Search_move[I]=t,KC(A,r,i,B-1,I+1,1)))return!0}if(r=g,o<=1){for(t=0;t+=Yt[r],r=~~t>>4,t&=15,!(t>=6||(i=hg[r],i>B));)if(i<B&&(A.Search_move[I]=-t,KC(A,r,i,B-1,I+1,2)))return!0}return!1}function xC(A,g,e,B,I,o,t,i,r){var n,l,Q,f,c,R,L;if(t===0&&!B&&I||r!==0&&B===I&&(Q=Jt[g],l=Jt[e],Ag[Q<<1|1-o]<t&&Ag[l<<1|1-o]<t&&(A.Search_move[i]=0,xC(A,Q,l,B,I,1-o,t-1,i+1,0))))return!0;if(r<=0)for(L=!B,Q=L?cI[g]:g,l=L?e:cI[e],f=L?1:2,c=Ag[Q<<1|o],R=Ag[l<<1|o];f<12&&c<=t&&c<=t;){if(c<t&&R<t&&(A.Search_move[i]=f,xC(A,Q,l,L,I,o,t-1,i+1,1)))return!0;L=!L,L?(Q=cI[Q],c=Ag[Q<<1|o],f+=1):(l=cI[l],R=Ag[l<<1|o],f+=2)}if(r<=1)for(n=!I,Q=n?DI[g]:g,l=n?e:DI[e],f=n?1:2,c=Ag[Q<<1|o],R=Ag[l<<1|o];f<(t>3?6:12)&&c<=t&&c<=t;){if(c<t&&R<t&&(A.Search_move[i]=-f,xC(A,Q,l,B,n,o,t-1,i+1,2)))return!0;n=!n,n?(Q=DI[Q],c=Ag[Q<<1|o],f+=1):(l=DI[l],R=Ag[l<<1|o],f+=2)}return!1}function mp(A,g){var e;for(A.Search_c=g,e=up(g),A.Search_length1=hg[e];A.Search_length1<100&&(A.Search_maxlen2=Math.min(31-A.Search_length1,17),!KC(A,e,hg[e],A.Search_length1,0,-1));++A.Search_length1);return A.Search_sol_string}function uD(){this.Search_move=[],this.Search_d=new _E,this.Search_sq=new yD}function dp(){}function Sp(){LD||(LD=!0,xt=[0,3,6,12,15,24,27,30,48,51,54,60,63],wo=[],hg=[],bt=[],Yt=[],YC=[],Gp())}function kp(A){var g,e;g=0,e=0;do(A.bottom&2048)===0?(g+=1,A.bottom=A.bottom<<1):(g+=2,A.bottom=A.bottom<<2^12291),e=1-e;while((LI(A.bottom&63)&1)!==0);return(LI(A.bottom)&2)===0&&(A.Shape_parity^=e),g}function PE(A){var g;return g=FD(wo,A.top<<12|A.bottom)<<1|A.Shape_parity,g}function TE(A,g){A.Shape_parity=g&1,A.top=wo[~~g>>1],A.bottom=A.top&4095,A.top>>=12}function Up(A){var g,e;g=0,e=0;do(A.top&2048)===0?(g+=1,A.top=A.top<<1):(g+=2,A.top=A.top<<2^12291),e=1-e;while((LI(A.top&63)&1)!==0);return(LI(A.top)&2)===0&&(A.Shape_parity^=e),g}function hD(){}function Kt(A){var g;return g=FD(wo,A&16777215)<<1|~~A>>24,g}function Gp(){var A,g,e,B,I,o,t,i,r,n,l,Q,f,c,R,L;for(A=0,t=0;t<28561;++t)o=xt[t%13],e=xt[~~(t/13)%13],Q=xt[~~(~~(t/13)/13)%13],l=xt[~~(~~(~~(t/13)/13)/13)],f=l<<18|Q<<12|e<<6|o,LI(f)===16&&(wo[A++]=f);for(n=new hD,t=0;t<7356;++t)TE(n,t),bt[t]=Up(n),bt[t]|=PE(n)<<4,TE(n,t),Yt[t]=kp(n),Yt[t]|=PE(n)<<4,TE(n,t),L=n.top&63,c=LI(L),R=LI(n.bottom&4032),n.Shape_parity^=1&~~(c&R)>>1,n.top=n.top&4032|~~n.bottom>>6&63,n.bottom=n.bottom&63|L<<6,YC[t]=PE(n);for(t=0;t<7536;++t)hg[t]=-1;for(hg[Kt(14378715)]=0,hg[Kt(31157686)]=0,hg[Kt(23967451)]=0,hg[Kt(7191990)]=0,B=4,I=0,g=-1;B!==I;)for(I=B,++g,t=0;t<7536;++t)if(hg[t]===g){r=0,i=t;do i=bt[i],r+=i&15,i>>=4,hg[i]===-1&&(++B,hg[i]=g+1);while(r!==12);r=0,i=t;do i=Yt[i],r+=i&15,i>>=4,hg[i]===-1&&(++B,hg[i]=g+1);while(r!==12);i=YC[t],hg[i]===-1&&(++B,hg[i]=g+1)}}function Np(){}function Mp(){if(!RD){RD=!0,Ag=[],Jt=[],cI=[],DI=[],pD=[1,1,2,6,24,120,720,5040],fI=[];for(var A=0;A<12;++A)fI[A]=[];Kp()}}function yD(){}function vt(A){var g,e,B,I;for(e=0,I=1985229328,g=0;g<7;++g)B=A[g]<<2,e=(8-g)*e+(~~I>>B&7),I-=286331152<<B;return e&65535}function Kp(){var A,g,e,B,I,o,t,i,r,n,l,Q,f;for(I=0;I<12;++I)for(fI[I][0]=1,fI[I][I]=1,r=1;r<I;++r)fI[I][r]=fI[I-1][r-1]+fI[I-1][r];for(Q=[],I=0;I<40320;++I)zE(Q,I),f=Q[2],Q[2]=Q[4],Q[4]=f,f=Q[3],Q[3]=Q[5],Q[5]=f,Jt[I]=vt(Q),zE(Q,I),f=Q[0],Q[0]=Q[1],Q[1]=Q[2],Q[2]=Q[3],Q[3]=f,cI[I]=vt(Q),zE(Q,I),f=Q[4],Q[4]=Q[5],Q[5]=Q[6],Q[6]=Q[7],Q[7]=f,DI[I]=vt(Q);for(I=0;I<80640;++I)Ag[I]=-1;for(Ag[0]=0,g=0,e=1;e<80640;){i=g>=11,B=i?-1:g,A=i?g:-1,++g;A:for(I=0;I<80640;++I)if(Ag[I]===B){if(o=~~I>>1,l=I&1,t=Jt[o]<<1|1-l,Ag[t]===A&&(++e,Ag[i?I:t]=~~(g<<24)>>24,i))continue A;for(t=o,n=0;n<4;++n)if(t=cI[t],Ag[t<<1|l]===A&&(++e,Ag[i?I:t<<1|l]=~~(g<<24)>>24,i))continue A;for(n=0;n<4;++n)if(t=DI[t],Ag[t<<1|l]===A&&(++e,Ag[i?I:t<<1|l]=~~(g<<24)>>24,i))continue A}}}function zE(A,g){var e,B,I,o,t;for(t=1985229328,e=0;e<7;++e)I=pD[7-e],o=~~(g/I),g-=o*I,o<<=2,A[e]=~~((~~t>>o&7)<<24)>>24,B=(1<<o)-1,t=(t&B)+(~~t>>4&~B);A[7]=~~(t<<24)>>24}function xp(){}function LI(A){return A-=~~A>>1&1431655765,A=(~~A>>2&858993459)+(A&858993459),A=(~~A>>4)+A&252645135,A+=~~A>>8,A+=~~A>>16,A&63}function FD(A,g){var e,B,I,o;for(B=0,e=A.length-1;B<=e;)if(I=B+(~~(e-B)>>1),o=A[I],o<g)B=I+1;else if(o>g)e=I-1;else return I;return-B-1}function Hp(){return Jp().scramble_string}var ig,LD,Yt,wo,hg,bt,YC,xt,RD,DI,fI,Ag,cI,Jt,pD,OE,Yp,bp,vp,Jp,wD=U(()=>{"use strict";Be();ig=_E.prototype=pp.prototype;ig.dl=10062778;ig.dr=14536702;ig.ml=0;ig.ul=70195;ig.ur=4544119;ig=uD.prototype=dp.prototype;ig.Search_c=null;ig.Search_length1=0;ig.Search_maxlen2=0;ig.Search_sol_string=null;LD=!1;ig=hD.prototype=Np.prototype;ig.bottom=0;ig.Shape_parity=0;ig.top=0;RD=!1;ig=yD.prototype=xp.prototype;ig.botEdgeFirst=!1;ig.cornperm=0;ig.edgeperm=0;ig.ml=0;ig.topEdgeFirst=!1;OE=!1,Yp=function(A,g,e){OE||(Sp(),Mp()),e&&e("Done initializing Square-1."),OE=!0,A?.()},bp=function(){return OE||Yp(),yp()},vp=function(A){var g=new uD;return mp(g,A)},Jp=function(){var A=bp(),g=vp(A);return{state:A,scramble_string:g}}});var mD={};dg(mD,{getRandomSquare1ScrambleString:()=>Hp});var dD=U(()=>{"use strict";wD()});var EQ=Symbol("Comlink.proxy"),wc=Symbol("Comlink.endpoint"),mc=Symbol("Comlink.releaseProxy"),VC=Symbol("Comlink.thrown"),QQ=A=>typeof A=="object"&&A!==null||typeof A=="function",dc={canHandle:A=>QQ(A)&&A[EQ],serialize(A){let{port1:g,port2:e}=new MessageChannel;return ko(A,g),[e,[e]]},deserialize(A){return A.start(),Uc(A)}},Sc={canHandle:A=>QQ(A)&&VC in A,serialize({value:A}){let g;return A instanceof Error?g={isError:!0,value:{message:A.message,name:A.name,stack:A.stack}}:g={isError:!1,value:A},[g,[]]},deserialize(A){throw A.isError?Object.assign(new Error(A.value.message),A.value):A.value}},lQ=new Map([["proxy",dc],["throw",Sc]]);function ko(A,g=self){g.addEventListener("message",function e(B){if(!B||!B.data)return;let{id:I,type:o,path:t}=Object.assign({path:[]},B.data),i=(B.data.argumentList||[]).map(MB),r;try{let n=t.slice(0,-1).reduce((Q,f)=>Q[f],A),l=t.reduce((Q,f)=>Q[f],A);switch(o){case"GET":r=l;break;case"SET":n[t.slice(-1)[0]]=MB(B.data.value),r=!0;break;case"APPLY":r=l.apply(n,i);break;case"CONSTRUCT":{let Q=new l(...i);r=Mc(Q)}break;case"ENDPOINT":{let{port1:Q,port2:f}=new MessageChannel;ko(A,f),r=Nc(Q,[Q])}break;case"RELEASE":r=void 0;break;default:return}}catch(n){r={value:n,[VC]:0}}Promise.resolve(r).catch(n=>({value:n,[VC]:0})).then(n=>{let[l,Q]=ZC(n);g.postMessage(Object.assign(Object.assign({},l),{id:I}),Q),o==="RELEASE"&&(g.removeEventListener("message",e),sQ(g))})}),g.start&&g.start()}function kc(A){return A.constructor.name==="MessagePort"}function sQ(A){kc(A)&&A.close()}function Uc(A,g){return XC(A,[],g)}function Wt(A){if(A)throw new Error("Proxy has been released and is not useable")}function XC(A,g=[],e=function(){}){let B=!1,I=new Proxy(e,{get(o,t){if(Wt(B),t===mc)return()=>uI(A,{type:"RELEASE",path:g.map(i=>i.toString())}).then(()=>{sQ(A),B=!0});if(t==="then"){if(g.length===0)return{then:()=>I};let i=uI(A,{type:"GET",path:g.map(r=>r.toString())}).then(MB);return i.then.bind(i)}return XC(A,[...g,t])},set(o,t,i){Wt(B);let[r,n]=ZC(i);return uI(A,{type:"SET",path:[...g,t].map(l=>l.toString()),value:r},n).then(MB)},apply(o,t,i){Wt(B);let r=g[g.length-1];if(r===wc)return uI(A,{type:"ENDPOINT"}).then(MB);if(r==="bind")return XC(A,g.slice(0,-1));let[n,l]=nQ(i);return uI(A,{type:"APPLY",path:g.map(Q=>Q.toString()),argumentList:n},l).then(MB)},construct(o,t){Wt(B);let[i,r]=nQ(t);return uI(A,{type:"CONSTRUCT",path:g.map(n=>n.toString()),argumentList:i},r).then(MB)}});return I}function Gc(A){return Array.prototype.concat.apply([],A)}function nQ(A){let g=A.map(ZC);return[g.map(e=>e[0]),Gc(g.map(e=>e[1]))]}var aQ=new WeakMap;function Nc(A,g){return aQ.set(A,g),A}function Mc(A){return Object.assign(A,{[EQ]:!0})}function ZC(A){for(let[g,e]of lQ)if(e.canHandle(A)){let[B,I]=e.serialize(A);return[{type:"HANDLER",name:g,value:B},I]}return[{type:"RAW",value:A},aQ.get(A)||[]]}function MB(A){switch(A.type){case"HANDLER":return lQ.get(A.name).deserialize(A.value);case"RAW":return A.value}}function uI(A,g,e){return new Promise(B=>{let I=Kc();A.addEventListener("message",function o(t){!t.data||!t.data.id||t.data.id!==I||(A.removeEventListener("message",o),B(t.data))}),A.start&&A.start(),A.postMessage(Object.assign({id:I},g),e)})}function Kc(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function xc(A){let g=new WeakMap;return{postMessage:A.postMessage.bind(A),addEventListener:(e,B)=>{let I=o=>{"handleEvent"in B?B.handleEvent({data:o}):B({data:o})};A.on("message",I),g.set(B,I)},removeEventListener:(e,B)=>{let I=g.get(B);!I||(A.off("message",I),g.delete(B))},nodeWorker:A,terminate:()=>{A.terminate()}}}var fQ=xc;var Yc=typeof globalThis.Worker>"u"&&typeof globalThis.WorkerNavigator>"u",bc="node:w-orker-_threa-ds",vc=()=>bc.replace(/-/g,"");async function Jc(){let{parentPort:A}=await import(vc()).catch();return fQ(A)}function DQ(A){Yc?(async()=>ko(A,await Jc()))():ko(A)}lg();Te();ee();SA();lg();Te();Be();ee();SA();SA();et();var KL={["OBTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:1,amountFactor:0},["Inner"]:{constantFactor:2,amountFactor:0}},["RBTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:1,amountFactor:0},["Inner"]:{constantFactor:1,amountFactor:0}},["OBQTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:0,amountFactor:1},["Inner"]:{constantFactor:0,amountFactor:2}},["RBQTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:0,amountFactor:1},["Inner"]:{constantFactor:0,amountFactor:1}},["ETM"]:{["Rotation"]:{constantFactor:1,amountFactor:0},["Outer"]:{constantFactor:1,amountFactor:0},["Inner"]:{constantFactor:1,amountFactor:0}}};var tt=class extends JB{constructor(e){super();this.metric=e}traverseAlg(e){let B=0;for(let I of e.childAlgNodes())B+=this.traverseAlgNode(I);return B}traverseGrouping(e){let B=e.alg;return this.traverseAlg(B)*Math.abs(e.amount)}traverseMove(e){return this.metric(e)}traverseCommutator(e){return 2*(this.traverseAlg(e.A)+this.traverseAlg(e.B))}traverseConjugate(e){return 2*this.traverseAlg(e.A)+this.traverseAlg(e.B)}traversePause(e){return 0}traverseNewline(e){return 0}traverseLineComment(e){return 0}};function oa(A){return"A"<=A&&A<="Z"}function xL(A){let g=A.family;return oa(g[0])&&g[g.length-1]==="v"||g==="x"||g==="y"||g==="z"||g==="T"?0:1}function YL(A){return 1}function bL(A){let g=A.family;return oa(g[0])&&g[g.length-1]==="v"||g==="x"||g==="y"||g==="z"||g==="T"?0:Math.abs(A.amount)}var $r=re(tt,[xL]),vL=re(tt,[YL]),JL=re(tt,[bL]);SA();SA();var An=class extends JB{traverseAlg(g){let e=0;for(let B of g.childAlgNodes())e+=this.traverseAlgNode(B);return e}traverseGrouping(g){return this.traverseAlg(g.alg)*Math.abs(g.amount)}traverseMove(g){return 1}traverseCommutator(g){return 2*(this.traverseAlg(g.A)+this.traverseAlg(g.B))}traverseConjugate(g){return 2*this.traverseAlg(g.A)+this.traverseAlg(g.B)}traversePause(g){return 1}traverseNewline(g){return 0}traverseLineComment(g){return 0}},HL=re(An);Be();var qL=2,PL=!0,TL=!1;function zL(A,g){let e=[];return g.forEach(function(B){let I=new h(B);if(I.amount!==1)throw new Error("SGS cannot handle def moves with an amount other than 1 yet.");let o=A.identityTransformation();for(let t=1;o=o.applyMove(I),!o.isIdentityTransformation();t++)e.push({move:I.modified({amount:t}),transformation:o})}),e}var se=class{constructor(g,e,B){this.kpuzzle=g;this.sgs=e;this.searchMoves=zL(this.kpuzzle,B??Object.keys(this.kpuzzle.definition.moves))}async solve(g,e=qL,B){let I=g.experimentalToTransformation();if(!I)throw new Error("distinguishable pieces are not supported in tremble solver yt");let o=null,t=1e6,i=(r,n,l)=>{if(n===0){let Q=this.sgsPhaseSolve(r,t);if(!Q)return;let f=l.concat(Q).experimentalSimplify({cancel:{puzzleSpecificModWrap:"canonical-centered"},puzzleSpecificSimplifyOptions:{quantumMoveOrder:B}}),c=$r(f);(o===null||c<t)&&(TL&&(console.log(\`New best (\${c} moves): \${f.toString()}\`),console.log(\`Tremble moves are: \${l.toString()}\`)),o=f,t=c);return}for(let Q of this.searchMoves)i(r.applyTransformation(Q.transformation),n-1,l.concat([Q.move]))};for(let r=0;r<=e;r++)i(I,r,new J);if(o===null)throw new Error("SGS search failed.");return o}sgsPhaseSolve(g,e){let B=new Wg,I=g;for(let o of this.sgs.ordering){let t=o.pieceOrdering,i="",r=I.invert();for(let l=0;l<t.length;l++){let Q=t[l],f=Q.orbitName,c=Q.permutationIdx;i+=\` \${r.transformationData[f].permutation[c]} \${r.transformationData[f].orientation[c]}\`}let n=o.lookup[i];if(!n)throw new Error("Missing algorithm in sgs or esgs?");if(B.experimentalPushAlg(n.alg),B.experimentalNumAlgNodes()>=e)return null;if(I=I.applyTransformation(n.transformation),PL)for(let l=0;l<t.length;l++){let Q=t[l],f=Q.orbitName,c=Q.permutationIdx;if(I.transformationData[f].permutation[c]!==c||I.transformationData[f].orientation[c]!==0)throw new Error("bad SGS :-(")}}return B.toAlg()}};function yi(A,g){let e=A.identityTransformation();for(let B of g.ordering){let I=ze(Object.values(B.lookup));e=e.applyTransformation(I.transformation)}return e.toKState()}Vg();var Kg=XA(()=>Promise.resolve().then(()=>(aa(),sa)));lg();Vg();var nn=XA(async()=>Promise.resolve().then(()=>(ya(),ha))),Cn,pa;function rn(A,g){if(typeof g!="number"||!Number.isInteger(g)||g<0)throw new Error(\`Invalid \${A}: \${g}\`)}async function TI(A,g,e){let{setArg:B,setKPuzzleDefString:I,serializeDefToTws:o,solveState:t,serializeScrambleState:i}=await nn,r=new PA(A);B("--startprunedepth 5");let n="";if(e){if(e.moveSubset){if(n=e?.moveSubset?.join(","),n.includes(" "))throw new Error("A move contains a space\\u203D");if(n.includes("-"))throw new Error("A move contains a dash");B(\`--moves \${n}\`)}let{minDepth:Q,maxDepth:f}=e;typeof Q<"u"?(rn("minDepth",Q),typeof f<"u"?rn("maxDepth",f):f=1e6,B("--randomstart"),B(\`--mindepth \${Q}\`),B(\`--maxdepth \${f}\`)):typeof f<"u"&&(rn("maxDepth",f),B("--mindepth 0"),B(\`--maxdepth \${f}\`))}let l=o(r,e);if(Cn){if(Cn!==l)throw new Error("Attempted to solve two puzzles in the same worker using \`twsearch\`. This is not currently supported!")}else Cn=l,await I(l);if(typeof pa<"u"&&n!==pa)throw new Error("Attempted to solve two different move subsets in the same worker using \`twsearch\`. This is not currently supported!");return await t(i("SearchState",g))}et();var Fa=null;async function sR(){return Fa||(Fa=(async()=>{let A=await(await Kg).cachedData222();return new se(await sg["2x2x2"].kpuzzle(),A,"URFLBD".split(""))})())}async function da(){await sR()}async function Sa(A,g=11){return VA(),await TI((await Pe.kpuzzle()).definition,A.stateData,{moveSubset:"UFLR".split(""),maxDepth:g})}async function aR(A,g=11){VA();let{normalizedState:e,normalizationAlg:B}=Tr(A),I=await TI((await Pe.kpuzzle()).definition,e.stateData,{moveSubset:"UFLR".split(""),maxDepth:g});return B.concat(I)}async function fR(A,g){try{return(await aR(A,g-1)).log(),!0}catch(e){if(e instanceof(await nn).NoSolutionError)return!1;throw e}}function DR(A){let g;for(let e of A.childAlgNodes()){let B=e.as(h);if(!B)throw new Error("Unexpected solution with a non-move node!");let{family:I}=B;if(g&&(g==="L"&&I==="R"||g==="R"&&I==="L"))return!0;g=I}return!1}async function wa(A){return VA(),TI((await Pe.kpuzzle()).definition,A.stateData,{moveSubset:"UFLR".split(""),minDepth:11})}function cR(A,g,e,B){Ba(e.stateData[g].pieces);let I=A.definition.orbits[g],o=e.stateData[g].orientation,t=0;for(let i=0;i<I.numPieces;i++){let r=yA(I.numOrientations);o[i]=r,t+=r}B&&"orientationSum"in B&&(o[0]=((o[0]+B.orientationSum-t)%I.numOrientations+I.numOrientations)%I.numOrientations)}async function ma(){let A=await sg["2x2x2"].kpuzzle(),g=new YA(A,JSON.parse(JSON.stringify(A.startState().stateData)));return cR(A,"CORNERS",g,{orientationSum:0}),g}async function ka(){let A=await ma();for(;await fR(A,4);)console.info("Filtered out a 2x2x2 state!"),A=await ma();let g=A.experimentalToTransformation().invert().toKState(),e=await wa(g);for(;DR(e);)e=await wa(g);return e}xn();wi();Vg();var CE=XA(()=>Promise.resolve().then(()=>(K2(),M2)));var G1=[[null,"x","x2","x'","z","z'"],[null,"y","y2","y'"]];async function x2(){return(await CE).initialize()}async function rE(){return(await CE).random444Scramble()}async function Y2(){return zI(await rE(),G1)}wi();SA();Be();function N1(A){switch(A){case 5:return 60;case 6:return 80;default:return 100}}var M1=[["U","D"],["L","R"],["F","B"]],b2=new Map;function K1(A){let g=b2.get(A);if(g)return g;let e=[];for(let B of M1){let I=[];e.push(I);for(let o of B){I.push(new T(o)),A>3&&I.push(new T(\`\${o}w\`));for(let t=3;t<=A/2;t++)I.push(new T(\`\${o}w\`,t))}}return b2.set(A,e),e}async function Ze(A){let g=K1(A),e=N1(A),B=new Wg,I=0,o=new Set;for(;B.experimentalNumAlgNodes()<e;){let t=yA(3);t!==I&&o.clear(),I=t;let i=ze(g[I]),r=i.toString();o.has(r)||(o.add(r),B.push(new h(i,ze([1,2,-1]))))}return B.toAlg()}var x1=[[null,"3Rw","3Rw2","3Rw'","3Fw","3Fw'"],[null,"3Dw","3Dw2","3Dw'"]];async function v2(){return zI(await Ze(5),x1)}SA();Te();Vg();ee();Vg();var Rf=XA(()=>Promise.resolve().then(()=>(Lf(),cf)));var CN=XA(()=>Promise.resolve().then(()=>(SE(),dE)));async function Mf(){return VA(),new J(await(await Rf).randomFTOScrambleString())}ee();Vg();var Of=XA(()=>Promise.resolve().then(()=>(zf(),Tf)));async function _f(){return VA(),(await Of).getRandomKilominxScramble()}SA();ee();Vg();var CD=XA(()=>Promise.resolve().then(()=>(iD(),tD)));async function rD(){return VA(),new J(await(await CD).randomMasterTetraminxScrambleString())}lg();ee();var np=2,nD=null;async function Ep(){return nD||(nD=(async()=>{let A=await(await Kg).cachedSGSDataMegaminx();return new se(await(await Kg).cachedMegaminxKPuzzleWithoutMO(),A,["U","R","F","L","BR","BL","FR","FL","DR","DL","B","D"])})())}async function ED(A){VA();let g=await Ep(),e=JSON.parse(JSON.stringify(A.stateData));e.CENTERS.orientation=new Array(12).fill(0);let B=new YA(await(await Kg).cachedMegaminxKPuzzleWithoutMO(),e);return await g.solve(B,np,()=>5)}Te();ee();var Qp=3,QD=null;async function lp(){return QD||(QD=(async()=>{let A=await(await Kg).sgsDataPyraminx();return new se(await sg.pyraminx.kpuzzle(),A,"RLUB".split(""))})())}async function JE(A){return VA(),await(await lp()).solve(A,Qp,()=>3)}async function sp(){return VA(),yi(await sg.pyraminx.kpuzzle(),await(await Kg).sgsDataPyraminxFixedOrientation())}async function lD(){return JE(await sp())}ee();Vg();var sD=XA(()=>Promise.resolve().then(()=>(SE(),dE)));async function aD(){return VA(),(await sD).getRandomRediCubeScramble()}lg();ee();var ap=3,fD=null;async function fp(){return fD||(fD=(async()=>{let A=await(await Kg).sgsDataSkewb();return new se(await(await Kg).skewbKPuzzleWithoutMOCached(),A,"RLUB".split(""))})())}async function Dp(A){return new YA(await(await Kg).skewbKPuzzleWithoutMOCached(),{CORNERS:A.stateData.CORNERS,CENTERS:{pieces:A.stateData.CENTERS.pieces,orientation:new Array(6).fill(0)}})}async function HE(A){return VA(),await(await fp()).solve(await Dp(A),ap,B=>B.family==="y"?4:3)}async function cp(){return yi(await(await Kg).skewbKPuzzleWithoutMOCached(),await(await Kg).sgsDataSkewbFixedCorner())}async function DD(){return HE(await cp())}SA();Vg();var SD=XA(()=>Promise.resolve().then(()=>(dD(),mD)));async function kD(){return J.fromString(await(await SD).getRandomSquare1ScrambleString())}var qp=1e3;Aa(!0);var ND=!0;function Pp(A){ND=A}function UD(){return(typeof performance>"u"?Date:performance).now()}async function Cg(A,g,e){if(!ND)return g();let B=UD(),I=g();I?.then&&await I;let o=UD();return console.warn(\`\${A}\${e?.isPrefetch?" (prefetched)":""}: \${Math.round(o-B)}ms\`),I}var WE=new Map,jE=null;async function GD(A,g){switch(A){case"222":return Cg("random222Scramble",ka,{isPrefetch:g?.isPrefetch});case"333":case"333oh":case"333ft":return Cg("random333Scramble",Bo,{isPrefetch:g?.isPrefetch});case"333fm":return Cg("random333FewestMovesScramble",p0);case"333bf":case"333mb":return Cg("random333OrientedScramble",y0);case"444":return Cg("random444Scramble",rE,{isPrefetch:g?.isPrefetch});case"444bf":return Cg("random444OrientedScramble",Y2);case"555":return Cg("bigCubeScramble(5)",Ze.bind(Ze,5));case"555bf":return Cg("oriented555RandomMoves",v2);case"666":return Cg("bigCubeScramble(6)",Ze.bind(Ze,6));case"777":return Cg("bigCubeScramble(7)",Ze.bind(Ze,7));case"skewb":return Cg("randomSkewbFixedCornerScramble",DD);case"pyram":return Cg("randomPyraminxScrambleFixedOrientation",lD);case"sq1":return Cg("getRandomSquare1Scramble",kD,{isPrefetch:g?.isPrefetch});case"fto":return Cg("randomFTOScramble",Mf,{isPrefetch:g?.isPrefetch});case"master_tetraminx":return Cg("randomMasterTetraminxScramble",rD);case"kilominx":return Cg("randomKilominxScramble",_f,{isPrefetch:g?.isPrefetch});case"redi_cube":return Cg("randomRediCubeScramble",aD,{isPrefetch:g?.isPrefetch});default:throw new Error(\`unsupported event: \${A}\`)}}var VE="auto",XE={initialize:async A=>{switch(A){case"222":return Cg("preInitialize222",da);case"333":case"333oh":case"333ft":return Cg("initialize333",h0);case"444":return Cg("initialize444",x2);default:throw new Error(\`unsupported event: \${A}\`)}},setScramblePrefetchLevel(A){VE=A},randomScrambleForEvent:async A=>{let g=WE.get(A);return g?WE.delete(A):g=GD(A),VE!=="none"&&g.then(()=>{jE&&clearTimeout(jE),jE=setTimeout(()=>{WE.set(A,GD(A,{isPrefetch:!0}))},VE==="immediate"?0:qp)}),g},randomScrambleStringForEvent:async A=>(await XE.randomScrambleForEvent(A)).toString(),solve333ToString:async A=>{let g=new YA(await sg["3x3x3"].kpuzzle(),A);return(await Kn(g)).toString()},solve222ToString:async A=>{let g=new YA(await sg["2x2x2"].kpuzzle(),A);return(await Sa(g)).toString()},solveSkewbToString:async A=>{let g=new YA(await sg.skewb.kpuzzle(),A);return(await HE(g)).toString()},solvePyraminxToString:async A=>{let g=new YA(await sg.pyraminx.kpuzzle(),A);return(await JE(g)).toString()},solveMegaminxToString:async A=>{let g=new YA(await sg.megaminx.kpuzzle(),A);return(await ED(g)).toString()},setDebugMeasurePerf:async A=>{Pp(A)},solveTwsearchToString:async(A,g,e)=>(await TI(A,g,e)).toString()};DQ(XE);
4323
+ \`)}var kh,hf=U(()=>{"use strict";Te();PI();kh=null});function Gt(A){if(A<2)return A;let g=1;for(let e=2;e<=A;e++)g*=e;return g}function wE(A,g){if(g<0||g>A)return 0;if(g===0||g===A)return 1;let e=1;for(let B=0;B<g;B++)e=e*(A-B)/(B+1)|0;return e}function Gh(A){A=A.slice();let g=A.length,e=Gt(g-1),B=0;for(;g>1;){g--;let I=A[0];B+=I*e;for(let o=0;o<g;o++){let t=A[o+1];A[o]=t-(t>I)}e/=g}return B}function Nh(A,g){let e=[],B=Gt(g-1);for(let I=0;I<g;I++)e[I]=A/B|0,A%=B,B/=g-1-I;for(let I=g-2;I>=0;I--)for(let o=I+1;o<g;o++)e[o]+=+(e[o]>=e[I]);return e}function yf(A){let g=A.length,e=0;for(let B=0;B<g-1;B++)for(let I=B;I<g;I++)A[B]>A[I]&&(e^=1);return e}function Mh(A,g){let e=[],B=Gt(g-1)/2,I=0;for(let o=0;o<g-1;o++)e[o]=A/B|0,A%=B,B/=g-1-o;e[g-1]=0;for(let o=g-2;o>=0;o--)for(let t=o+1;t<g;t++)e[t]>=e[o]?e[t]++:I^=1;return I===1&&([e[g-2],e[g-1]]=[e[g-1],e[g-2]]),e}function pf(A){return Gh(A)>>1}function Ff(A){let g=A.length,e=0;for(let t=0;t<g;t++)e+=+(A[t]===1);let B=g-e;if(B===0||e===0||g===1)return 0;let I=wE(g-1,e),o=0;for(let t=0;B>0&&e>0&&g>1;t++)g--,A[t]===0?I=I*--B/g:(o+=I,I=I*e--/g);return o}function Kh(A,g,e){let B=e-g,I=wE(e-1,g),o=[],t=e-1;for(let i=0;i<t;i++)e--,A<I?(o.push(0),I=I*--B/e):(o.push(1),A-=I,I=I*g--/e);return o.push(g),o}function mC(A,g){let e=[];for(let B=0;B<g.length;B++)e[B]=A[g[B]];return e}function dB(A,g){let e=[];for(let B=0;B<g;B++)e[B]=B;for(let B=0;B<A.length;B++)e[A[B]]=A[(B+1)%A.length];return e}function SB(A,g){let e=Array(g).fill(0);for(let B in A)e[B]=A[B];return e}function xh(A,g){let e=Array(8).fill(0);for(let B=0;B<8;B++)e[B]=(A[1][B]+g[1][B])%3;return[mC(A[0],g[0]),e]}function Oh(A){let g=["0","","'"];return A.map(([B,I])=>zh[B]+g[I]).join(" ")}function _h(){let A=Mh(Math.floor(yA(Gt(12))/2),12),g=Array(8);for(let e=0;e<8;e++)g[e]=yA(3);return[A,g]}function Wh(){return jh(_h())}function jh(A){let g=Vh(A),e=[mf(),df()],B=[Zh(),$h()],I=[Sf(),Ay()],o=[gy(),Xh()],t=By(g,e,B),i,r=new Set,n=+new Date;for(let l=0;l<25;l++){let{value:Q,done:f}=t.next(),c=A;for(let[N,K]of Q)for(let Y=0;Y<K;Y++)c=xh(c,Ut[N]);if(r.has(c.toString()))continue;r.add(c.toString());let R=pf(c[0].slice(0,8)),L=0;for(let N=0;N<4;N++)L+=c[1][N]*3**N;let p=[R,L],k=i?i.length-Q.length-1:999999,d=ey(p,I,o,k);if(d!==void 0&&((i===void 0||i.length>Q.length+d.length)&&(i=Q.concat(d)),new Date-n>300))break}return i}function Vh(A){let g=0;for(let o=0;o<4;o++)g+=A[0].indexOf(o+8)*12**o;let e=0;for(let o=0;o<4;o++)e+=A[1][o+4]*3**o;let B=A[0].map(o=>Math.max(-1,o-8)),I=Ff(B.map(o=>+(o>=0)))*2+yf(B.filter(o=>o>=0));return[g,e+81*I]}function wf(){if(HA.phase1cm)return HA.phase1cm;let A=[];for(let g=0;g<81;g++){A[g]=Array(8);let e=[g%3,Math.floor(g/3)%3,Math.floor(g/9)%3,Math.floor(g/27)];A[g][0]=A[g][1]=A[g][2]=A[g][3]=g;for(let B=0;B<4;B++)e[B]=(e[B]+2)%3,A[g][4+B]=e[0]+e[1]*3+e[2]*9+e[3]*27,e[B]=(e[B]+1)%3}return HA.phase1cm=A}function Xh(){if(HA.phase1cp)return HA.phase1cp;let A=Array(81);for(let g=0;g<81;g++){let e=[g%3,Math.floor(g/3)%3,Math.floor(g/9)%3,Math.floor(g/27)];A[g]=(e[0]!==0)+(e[1]!==0)+(e[2]!==0)+(e[3]!==0)}return HA.phase1cp=A}function mf(){if(HA.phase1em)return HA.phase1em;let A=[];for(let e=0;e<12;e++){A[e]=[];for(let B=0;B<8;B++)A[e][B]=Ut[B][0].indexOf(e)}let g=Array(12**4);for(let e=0;e<12**4;e++){g[e]=Array(8);for(let B=0;B<8;B++){let I=0;for(let o=0;o<4;o++)I+=A[Math.floor(e/12**o)%12][B]*12**o;g[e][B]=I}}return HA.phase1em=g}function Zh(){return HA.phase1ep?HA.phase1ep:HA.phase1ep=mE(mf(),[8+12*(9+12*(10+12*11))])}function df(){if(HA.phase1sm)return HA.phase1sm;let A=wE(12,4),g=[];for(let I=0;I<A;I++){g[I]=[];let o=Kh(I,4,12),t=[];for(let i=0,r=0;i<12;i++)o[i]===0?t[i]=-1:t[i]=r++;for(let i=0;i<8;i++){let r=mC(t,Ut[i][0]),n=mC(o,Ut[i][0]),l=yf(r.filter(Q=>Q>=0));g[I][i]=Ff(n)*2+l}}let e=wf(),B=[];for(let I=0;I<A;I++)for(let o=0;o<81;o++){let t=B[o+81*(2*I)]=[],i=B[o+81*(2*I+1)]=[];for(let r=0;r<8;r++)t[r]=e[o][r]+81*g[I][r],i[r]=e[o][r]+81*(g[I][r]^1)}return HA.phase1sm=B}function $h(){return HA.phase1sp?HA.phase1sp:HA.phase1sp=mE(df(),[0])}function Ay(){if(HA.phase2cm)return HA.phase2cm;let A=wf(),g=Array(81);for(let e=0;e<81;e++)g[e]=A[e].slice(4,8);return HA.phase2cm=g}function Sf(){if(HA.phase2em)return HA.phase2em;let A=8,g=Gt(A)/2,e=Array(g),B=[0,1,2,3,4,5,6,7];for(let I=0;I<g;I++){e[I]=Array(4);for(let t=0;t<4;t++){let i=mC(B,Ut[t][0].slice(0,8));e[I][t]=pf(i)}if(I===g-1)break;let o=0;do for(let t=A-2;t>=0;t--){if(B[t]>B[t+1])continue;let i=t+1;for(let r=i;r<A;r++)B[r]>B[t]&&(i=r);[B[t],B[i]]=[B[i],B[t]],o^=1;for(let r=0;t+1+r<A-1-r;r++,o^=1)[B[t+1+r],B[A-1-r]]=[B[A-1-r],B[t+1+r]];break}while(o!==0)}return HA.phase2em=e}function gy(){return HA.phase2ep?HA.phase2ep:HA.phase2ep=mE(Sf(),[0])}function mE(A,g){let e=A.length,B=A[0].length,I=Array(e).fill(-1),o=g.slice(),t=[],i=0;for(;o.length>0;){t.length=0;for(let r of o)if(I[r]===-1){I[r]=i;for(let n=0;n<B;n++){let l=A[r][n];for(;l!==r;)t.push(l),l=A[l][n]}}[o,t]=[t,o],i+=1}return I}function ey(A,g,e,B){B=B||999999;let I=A.length,o=0;for(let t=0;t<I;t++)o=Math.max(o,e[t][A[t]]);for(;o<=B;){let t=kf(A,g,e,o,-1);if(t!==void 0)return t;o++}}function kf(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0)return[];if(!(i===0&&B===1))for(let r=0;r<t;r++){if(r===I||r<I&&dC[r]===dC[I])continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=kf(n,g,e,B-1,r);if(Q!==void 0)return[[r,l]].concat(Q);for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}function*By(A,g,e){let B=A.length,I=0;for(let o=0;o<B;o++)I=Math.max(I,e[o][A[o]]);for(;;)yield*Uf(A,g,e,I,-1),I++}function*Uf(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0){yield[];return}if(!(i===0&&B===1))for(let r=0;r<t;r++){if(r===I||r<I&&dC[r]===dC[I])continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=Uf(n,g,e,B-1,r);for(;;){let{value:f,done:c}=Q.next();if(c)break;yield[[r,l]].concat(f)}for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}async function Gf(){return new J(Oh(Wh()))}var Yh,bh,vh,Jh,Hh,qh,Ph,Th,Z3,Ut,zh,dC,HA,Nf=U(()=>{"use strict";SA();Be();Yh=[dB([0,1,4],12),SB({0:2},8)],bh=[dB([1,2,5],12),SB({1:2},8)],vh=[dB([2,3,6],12),SB({2:2},8)],Jh=[dB([3,0,7],12),SB({3:2},8)],Hh=[dB([9,8,4],12),SB({4:2},8)],qh=[dB([10,9,5],12),SB({5:2},8)],Ph=[dB([11,10,6],12),SB({6:2},8)],Th=[dB([8,11,7],12),SB({7:2},8)],Z3=[Nh(0,12),Array(8).fill(0)],Ut=[Yh,bh,vh,Jh,Hh,qh,Ph,Th],zh=["UL","U","UR","F","L","B","R","D"],dC=[0,1,0,1,1,0,1,0];HA={}});var dE={};dg(dE,{getRandomRediCubeScramble:()=>Gf,sgsDataFTO:()=>uf});var SE=U(()=>{"use strict";hf();Nf()});function Kf(A){if(A<2)return A;let g=1;for(let e=2;e<=A;e++)g*=e;return g}function kC(A,g){if(g<0||g>A)return 0;if(g===0||g===A)return 1;let e=1;for(let B=0;B<g;B++)e=e*(A-B)/(B+1)|0;return e}function Iy(A){A=A.slice();let g=A.length,e=Kf(g-1),B=0;for(;g>1;){g--;let I=A[0];B+=I*e;for(let o=0;o<g;o++){let t=A[o+1];A[o]=t-(t>I)}e/=g}return B}function oy(A){let g=A.length,e=0;for(let B=0;B<g-1;B++)for(let I=B;I<g;I++)A[B]>A[I]&&(e^=1);return e}function ty(A){return Iy(A)>>1}function GE(A){let g=A.length,e=0;for(let t=0;t<g;t++)e+=+(A[t]===1);let B=g-e;if(B===0||e===0||g===1)return 0;let I=kC(g-1,e),o=0;for(let t=0;B>0&&e>0&&g>1;t++)g--,A[t]===0?I=I*--B/g:(o+=I,I=I*e--/g);return o}function ry(A,g,e){let B=e-g,I=kC(e-1,g),o=[],t=e-1;for(let i=0;i<t;i++)e--,A<I?(o.push(0),I=I*--B/e):(o.push(1),A-=I,I=I*g--/e);return o.push(g),o}function Ge(A,g){let e=[];for(let B=0;B<g.length;B++)e[B]=A[g[B]];return e}function NE(A,g){let e=Ge(A[0],g[0]),B=[],I=g[0].length;for(let o=0;o<I;o++)B[o]=(A[1][g[0][o]]+g[1][o])%3;return[e,B]}function yo(A,g){let e=[];for(let B=0;B<g;B++)e[B]=B;for(let B=0;B<A.length;B++)e[A[B]]=A[(B+1)%A.length];return e}function kB(A,g){let e=Array(g).fill(0);for(let B in A)e[B]=A[B];return e}function ay(){let A=[0];for(let e=1;e<20;e++){let B=yA(e+1);A[e]=A[B],A[B]=e}oy(A)===1&&([A[0],A[1]]=[A[1],A[0]]);let g=Array(20).fill(0);for(let e=0;e<19;e++)g[e]=yA(3),g[19]+=3-g[e];return g[19]%=3,[A,g]}function fy(A){let g=["0","","2","2'","'"];return A.map(([B,I])=>ly[B]+g[I]).join(" ")}function Dy(A,g){for(let[e,B]of g)for(let I=0;I<B;I++)A=NE(A,QI[e]);return A}function cy(){return wy(ay())}function Ly(A){let g=A[0];if(g.slice(15,20).every(o=>o<15))return[];if(g.slice(0,5).every(o=>o<15))return[[6,1]];let e=g.map(o=>o>=15),B=0,I;for(;I===void 0;)B++,I=vf(e,B,-1);return I.push([6,1]),I}function vf(A,g,e){if(g===0)return A.slice(0,5).some(B=>B)?void 0:[];for(let B=0;B<6;B++)if(B!==e)for(let I=1;I<5;I++){let o=Ge(A,SC[B][I][0]),t=vf(o,g-1,B);if(t!==void 0)return[[B,I]].concat(t)}}function Ry(A){let g=A[0].slice(0,15),e=A[1],I=243*GE(g.map(t=>+(t>=15)));for(let t=0,i=0;t<15;t++)g[t]<15||(I+=e[t]*Math.pow(3,i),i++);let o=0;for(let t=0;t<5;t++)o+=g.indexOf(15+t)*Math.pow(15,t);return[I,o]}function uy(A){let g=[UC(),GC()],e=[my(),Sy()];return Jf(Ry(A),g,e).concat([[6,1]])}function hy(A){let g=[5,6,7,8,14],e=A[0].slice(0,15),B=A[1],o=243*GE(e.map(i=>+(g.indexOf(i)!==-1)));for(let i=0,r=0;i<15;i++)g.indexOf(e[i])!==-1&&(o+=B[i]*Math.pow(3,r),r++);let t=0;for(let i=0;i<5;i++)t+=e.indexOf(g[i])*Math.pow(15,i);return[o,t]}function yy(A){let g=[UC(),GC()],e=[dy(),ky()];return Jf(hy(A),g,e)}function py(A){let g=A[0].slice(0,14),e=A[1],B=0,I=[],o=0;for(let t of[0,1,2,3,4,9,10,11,12,13])t!==13&&(B+=e[t]*Math.pow(3,o)),I[o]=g[t]<5?g[t]:g[t]-4,o++;return[B,ty(I)]}function Fy(A){return Ky(py(A))}function wy(A){let g=[];for(let e of[Ly,uy,yy,Fy]){let B=e(A);A=Dy(A,B),g=g.concat(B)}return g}function UC(){if(mA.phase23om)return mA.phase23om;let A=kC(15,5),g=[1,3,9,27,81,243],e=Array(kC(15,5)*g[5]);mA.phase23om=e;for(let B=0;B<A;B++){let I=ry(B,5,15).concat(Array(5).fill(0)),o=[];for(let t=0;t<6;t++){let i=Ge(I,QI[t][0]).slice(0,15);o[t]=GE(i)}for(let t=0;t<g[5];t++){e[t+243*B]=[];let i=[];for(let r=0,n=0;r<20;r++)I[r]===1?(i[r]=(t/g[n]|0)%3,n++):i[r]=99;for(let r=0;r<6;r++){let n=QI[r],l=[];for(let c=0;c<15;c++)l[c]=i[n[0][c]]+n[1][c];let Q=l.filter(c=>c<10),f=0;for(let c=0;c<5;c++)f+=Q[c]%3*g[c];e[t+243*B][r]=f+243*o[r]}}}return e}function my(){if(mA.phase2op)return mA.phase2op;let A=UC();return mA.phase2op=po(A,[243*3002])}function dy(){if(mA.phase3op)return mA.phase3op;let A=UC();return mA.phase3op=po(A,[243*246])}function GC(){if(mA.phase23pm)return mA.phase23pm;let A=[1,15,225,Math.pow(15,3),Math.pow(15,4),Math.pow(15,5)],g=Array(A[5]),e=Array(15);for(let I=0;I<15;I++){e[I]=Array(6);for(let o=0;o<6;o++)e[I][o]=QI[o][0].indexOf(I)}let B=[0,0,0,0,0];for(let I=0;I<A[5];I++){g[I]=Array(6);for(let o=0;o<6;o++){let t=0;for(let i=0;i<5;i++)t+=e[B[i]][o]*A[i];g[I][o]=t}B[0]++;for(let o=0;o<4;o++)B[o]===15&&(B[o]=0,B[o+1]++)}return mA.phase23pm=g}function Sy(){if(mA.phase2pp)return mA.phase2pp;let A=GC();return mA.phase2pp=po(A,[213090])}function ky(){if(mA.phase3pp)return mA.phase3pp;let A=GC();return mA.phase3pp=po(A,[737420])}function ME(){if(mA.phase4om)return mA.phase4om;let A=[1,3,9,27,81,243,729,2187,6561,19683,59049],g=Array(A[9]);for(let e=0;e<A[9];e++){let B=Array(14).fill(0);for(let I=0;I<9;I++){let o=I<5?I:I+4;B[o]=(e/A[I]|0)%3,B[13]-=B[o]}B[13]=(B[13]+999)%3,g[e]=[];for(let I=0;I<3;I++){let o=QI[I],t=[0,1,2,3,4,9,10,11,12,13].map(r=>B[o[0][r]]+o[1][r]),i=0;for(let r=0;r<9;r++)i+=t[r]%3*A[r];g[e][I]=i}}return mA.phase4om=g}function KE(){if(mA.phase4pm)return mA.phase4pm;let A=Kf(10)/2,g=10,e=[0,1,2,3,4,-1,-1,-1,-1,5,6,7,8,9],B=[0,1,2,3,4,9,10,11,12,13],I=[Ge(e,Ge(xf[0],B)),Ge(e,Ge(Yf[0],B)),Ge(e,Ge(bf[0],B))],o=Array(A),t=Array(10);for(let i=0;i<A;i++){Cy(i,t),o[i]=[];for(let r=0;r<3;r++){let n=Ge(t,I[r]);o[i][r]=iy(n)}}return mA.phase4pm=o}function Uy(){if(mA.phase4op)return mA.phase4op;let A=ME();return mA.phase4op=po(A,[0])}function Gy(){if(mA.phase4pp)return mA.phase4pp;let A=KE();return mA.phase4pp=po(A,[0])}function Ny(A){if(mA.phase4np_list&&mA.phase4np_list.threshold===A)return mA.phase4np_list;let g=[ME(),KE()],e=Math.pow(3,9),B=[0];I(A,[0,0],-1);function I(i,r,n){if(B.push(r[0]+e*r[1]),i===0)return;let l=[];for(let Q=0;Q<3;Q++)if(Q!==n){l[0]=r[0],l[1]=r[1];for(let f=1;f<5;f++)l[0]=g[0][l[0]][Q],l[1]=g[1][l[1]][Q],I(i-1,l,Q)}}B.sort((i,r)=>i-r);let o=[],t=-1;for(let i of B)i!==t&&o.push(t=i);return o.threshold=A,mA.phase4np_list=o}function My(A,g){let e=0,B=A.length-1;for(;B-e>1;){let I=e+B>>1;g>A[I]?e=I+1:B=I}return g===A[e]||g===A[B]}function po(A,g){let e=A.length,B=A[0].length,I=Array(e).fill(-1);for(let i of g)I[i]=0;let o=0,t=!1;for(;!t;){t=!0;for(let i=0;i<e;i++)if(I[i]===o)for(let r=0;r<B;r++){let n=A[i][r];for(;n!==i;)I[n]===-1&&(t=!1,I[n]=o+1),n=A[n][r]}o++}return I}function Jf(A,g,e){let B=A.length,I=0;for(let o=0;o<B;o++)I=Math.max(I,e[o][A[o]]);for(;;){let o=Hf(A,g,e,I,-1);if(o!==void 0)return o;I++}}function Hf(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0||i===0)return[];for(let r=0;r<t;r++){if(r===I)continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=Hf(n,g,e,B-1,r);if(Q!==void 0)return[[r,l]].concat(Q);for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}function Ky(A){let g=ME(),e=KE(),B=Uy(),I=Gy(),o=Ny(kE),t=Math.max(B[A[0]],I[A[1]]);for(;;){let i=qf(A,t,-1,g,e,B,I,o);if(i!==void 0)return i;t++}}function qf(A,g,e,B,I,o,t,i){let r=Math.max(o[A[0]],t[A[1]]);if(!(r>g)&&(r<=kE&&!My(i,A[0]+19683*A[1])&&(r=kE+1),!(r>g))){if(g===0||r===0)return[];for(let n=0;n<3;n++){if(n===e)continue;let l=A.slice();for(let Q=1;Q<5;Q++){l[0]=B[l[0]][n],l[1]=I[l[1]][n];let f=qf(l,g-1,n,B,I,o,t,i);if(f!==void 0)return[[n,Q]].concat(f)}}}}function xy(){return new J(fy(cy()))}var kE,iy,Cy,xf,Yf,bf,ny,Ey,Qy,UE,QN,QI,ly,sy,SC,mA,Pf=U(()=>{"use strict";SA();Be();kE=7;[iy,Cy]=(()=>{let A=new Int8Array(10240),g=new Int8Array(1024*10);for(let I=0;I<1024;I++)for(let o=0,t=0;o<10;o++)(I>>>o&1)!==0&&(A[o<<10|I]=t,g[t<<10|I]=o,t++);function e(I){let o=1023,t=181440,i=0;for(let r=0;r<8;r++){let n=I[r];i+=A[o|n<<10]*t,o&=~(1<<n),t/=9-r}return i}function B(I,o){let t=1023,i=181440,r=0;for(let n=0;n<8;n++){let l=I/i|0;I-=l*i,r^=l&1;let Q=g[t|l<<10];o[n]=Q,t&=~(1<<Q),i/=9-n}return o[8]=g[t|r<<10],o[9]=g[t|(r^1)<<10],o}return[e,B]})();xf=[yo([0,1,2,3,4],20),kB({},20)],Yf=[yo([4,3,11,12,13],20),kB({4:2,3:1,11:1,12:1,13:1},20)],bf=[yo([3,2,9,10,11],20),kB({3:2,2:1,9:1,10:1,11:1},20)],ny=[yo([2,1,7,8,9],20),kB({2:2,1:1,7:1,8:1,9:1},20)],Ey=[yo([1,0,5,6,7],20),kB({1:2,0:1,5:1,6:1,7:1},20)],Qy=[yo([0,4,13,14,5],20),kB({0:2,4:1,13:1,14:1,5:1},20)],UE=[[15,16,17,18,19,10,9,8,7,6,5,14,13,12,11,0,1,2,3,4],kB({},20)],QN=[[1,2,3,4,0,7,8,9,10,11,12,13,14,5,6,19,15,16,17,18],kB({},20)],QI=[xf,Yf,bf,ny,Ey,Qy,UE],ly=["U","R","F","L","BL","BR","x2"],sy=NE(UE,UE),SC=[];for(let A=0;A<QI.length;A++){SC[A]=[sy];for(let g=1;g<5;g++)SC[A][g]=NE(SC[A][g-1],QI[A])}mA={}});var Tf={};dg(Tf,{getRandomKilominxScramble:()=>xy});var zf=U(()=>{"use strict";Pf()});function Nt(A){if(A<2)return A;let g=1;for(let e=2;e<=A;e++)g*=e;return g}function sI(A){let g=Array(A);for(let e=0;e<A;e++)g[e]=e;return g}function Yy(A){A=A.slice();let g=A.length,e=Nt(g-1),B=0;for(;g>1;){g--;let I=A[0];B+=I*e;for(let o=0;o<g;o++){let t=A[o+1];A[o]=t-(t>I)}e/=g}return B}function NC(A,g){let e=[],B=Nt(g-1)/2,I=0;for(let o=0;o<g-1;o++)e[o]=A/B|0,A%=B,B/=g-1-o;e[g-1]=0;for(let o=g-2;o>=0;o--)for(let t=o+1;t<g;t++)e[t]>=e[o]?e[t]++:I^=1;return I===1&&([e[g-2],e[g-1]]=[e[g-1],e[g-2]]),e}function jf(A){return Yy(A)>>1}function lI(A,g){let e=[];for(let B=0;B<g.length;B++)e[B]=A[g[B]];return e}function YE(A){let g=[];for(let e=0;e<A.length;e++)g[A[e]]=e;return g}function Mt(A,g){let e=[];for(let B=0;B<g;B++)e[B]=B;for(let B=0;B<A.length;B++)e[A[B]]=A[(B+1)%A.length];return e}function UB(A,g){return A.length===0?sI(g):A.map(e=>Mt(e,g)).reduce(lI)}function by(A,g){let e=Array(4);for(let t=0;t<4;t++)e[t]=(A.co[t]+g.co[t])%3;let B=lI(A.mp,g.mp),I=lI(A.wp,g.wp),o=lI(A.cp,g.cp);return{co:e,mp:B,wp:I,cp:o}}function Vf(A,g){return A>=4&&g>=4?!0:A<4&&g<4?A===g:(A^g)===4}function Wy(A){let g=["0","","'"];return A.map(([B,I])=>_y[B]+g[I]).join(" ")}function jy(){let A=Array(4);for(let I=0;I<4;I++)A[I]=yA(3);let g=NC(yA(Nt(6)/2),6);for(let I=0,o=0;I<6;I++){let t=I===5?o:yA(2);o^=t,g[I]+=t*6,g[I+6]=(g[I]+6)%12}let e=NC(yA(Nt(12)/2),12),B=NC(yA(Nt(4)/2),4);return{co:A,mp:g,wp:e,cp:B}}function Vy(){return Zy(jy(yA))}function Xy(A=!0,g=!1){let e=Wy(Vy());if(!A)return e;let B=["u","l","r","b"],I=["0","","'"];if(!g){for(let Q=0;Q<4;Q++){let f=yA(3);f!==0&&(e+=\` \${B[Q]}\${I[f]}\`)}return e.trim()}let o=[],t=[],i=[];for(let Q=0;Q<4;Q++)o[Q]=yA(3),t[Q]=yA(3),i[Q]=(o[Q]-t[Q]+3)%3;let r=Q=>Q.filter(f=>f!==0).length;for(;!(r(t)>=1&&r(i)>=1&&r(t)+r(i)>=4);)for(let Q=0;Q<4;Q++)t[Q]=yA(3),i[Q]=(o[Q]-t[Q]+3)%3;let n=t.map((Q,f)=>Q!==0?\`\${B[f]}\${I[Q]} \`:"").join(""),l=i.map((Q,f)=>Q!==0?\` \${B[f]}\${I[Q]}\`:"").join("");return n+e+l}function Zy(A){let g=Ap(A),e=[gD(),eD()],B=[tp(),ip()],I=Bp(g),o,t=new Set,i=performance.now();for(let r=0;r<22;r++){let{value:n,done:l}=I.next(),Q=A;for(let[p,k]of n)for(let d=0;d<k;d++)Q=by(Q,Fo[p]);let f=JSON.stringify(Q);if(t.has(f))continue;t.add(f);let c=Ip(Q),R=o?o.length-n.length-1:999999,L=Cp(c,e,B,R).next().value;if(L!==void 0&&((o===void 0||o.length>n.length+L.length)&&(o=n.concat(L)),performance.now()-i>300))break}return o}function $y(A){return A[3^A.indexOf(3)]}function Ap(A){let g=lI(YE(A.mp),A.wp),e=(A.co.reduce((B,I)=>B+I)-$y(A.cp)+3)%3;return[0,1,2,3,4,5].map(B=>B+6*g.indexOf(B)+72*g.indexOf(B+6)+864*e)}function*Bp(A){let g=0,e=AD(),B=op();for(;;)yield*Zf(...A,e,B,g,-1),g++}function*Zf(A,g,e,B,I,o,t,i,r,n){let l=aI,Q=gB[A]+gB[g]+gB[e]+gB[B]+gB[I]+gB[o],f=Math.max(i[A%864+g*864],i[e%864+g*864],i[I%864+g*864],i[A%864+B*864],i[e%864+B*864],i[I%864+B*864],i[A%864+o*864],i[e%864+o*864],i[I%864+o*864],i[A%864+e*864],i[A%864+I*864],i[e%864+I*864],i[g%864+B*864],i[g%864+o*864],i[B%864+o*864],vE[Q]);if(!(f>r)){if(r===0){yield[];return}if(!(f===0&&r===1))for(let c=0;c<l;c++){if(c===n||c<n&&Vf(c,n))continue;let R=A,L=g,p=e,k=B,d=I,N=o;for(let K=1;K<=2;K++){R=t[R][c],L=t[L][c],p=t[p][c],k=t[k][c],d=t[d][c],N=t[N][c];let Y=Zf(R,L,p,k,d,N,t,i,r-1,c);for(;;){let{value:O,done:QA}=Y.next();if(QA)break;yield[[c,K]].concat(O)}}}}}function Ip(A){let g=A.mp,e=jf(g.slice(0,6).map(t=>t%6)),B=g.slice(0,5).map((t,i)=>(t>=6)*2**i).reduce((t,i)=>t+i),I=A.co.map((t,i)=>t*3**i).reduce((t,i)=>t+i),o=A.cp.indexOf(0);return[e+360*o,B+32*I]}function $f(){if(Bg.phase1pm)return Bg.phase1pm;let A=Array(6*12*12).fill().map(()=>Array(aI).fill(-1));for(let g=0;g<6;g++)for(let e=0;e<12;e++)for(let B=0;B<12;B++){if(e===B)continue;let I=g+6*e+72*B;for(let o=0;o<aI;o++){let t=Xf[o][g],i=bE[o][e],r=bE[o][B];t<6?A[I][o]=t+6*i+72*r:A[I][o]=t-6+6*r+72*i}}return Bg.phase1pm=A}function AD(){if(Bg.phase1pcm)return Bg.phase1pcm;let A=$f(),g=Array(A.length*3).fill().map(()=>Array(aI).fill(-1));for(let e=0;e<A.length;e++)for(let B=0;B<aI;B++){let I=A[e][B];g[e][B]=I+6*12*12*xE[B],g[e+6*12*12][B]=I+6*12*12*((xE[B]+1)%3),g[e+2*6*12*12][B]=I+6*12*12*((xE[B]+2)%3)}return Bg.phase1pcm=g}function op(){if(Bg.phase1p2cp)return Bg.phase1p2cp;let A=$f(),g=AD(),e=new Int8Array((6*12*12)**2*3);e.fill(-1);let B=[0,1,2,3,4,5].map(o=>o+6*o+72*(o+6));for(let o=0;o<6;o++)for(let t=0;t<6;t++)o!==t&&(e[B[o]+864*B[t]]=0);let I=0;for(;;){let o=!1;for(let t=0;t<e.length;t++){if(e[t]!==I)continue;let i=t%864,r=Math.floor(t/864);for(let n=0;n<aI;n++){let l=i,Q=r;for(let f=1;f<=2;f++){l=A[l][n],Q=g[Q][n];let c=l+864*Q;e[c]===-1&&(o=!0,e[c]=I+1)}}}if(!o)break;I++}return Bg.phase1p2cp=e}function gD(){if(Bg.phase2pm)return Bg.phase2pm;let A=Array(1440).fill().map(()=>Array(MC));for(let g=0;g<360;g++){let e=NC(g,6);for(let B=0;B<6;B++)e[B+6]=e[B]+6;for(let B=0;B<MC;B++){let I=lI(e,Fo[B].mp),o=jf(I.slice(0,6).map(t=>t%6));for(let t=0;t<4;t++){let i=Fo[B].cp[t];A[g+360*i][B]=o+360*t}}}return Bg.phase2pm=A}function eD(){if(Bg.phase2om)return Bg.phase2om;let A=Array(32*81).fill().map(()=>Array(MC));for(let g=0;g<32;g++){let e=[0,1,2,3,4].map(I=>g>>I&1);e[5]=e.reduce((I,o)=>I^o);let B=[];for(let I=0;I<6;I++)B[I]=I+6*e[I],B[I+6]=I+6*(e[I]^1);for(let I=0;I<81;I++){let o=[0,1,2,3].map(t=>Math.floor(I/3**t)%3);for(let t=0;t<MC;t++){let r=lI(B,Fo[t].mp).slice(0,5).map(f=>+(f>=6)),n=0;for(let f=0;f<5;f++)n+=r[f]<<f;let l=o.map((f,c)=>(f+Fo[t].co[c])%3),Q=0;for(let f=0;f<4;f++)Q+=l[f]*3**f;A[g+32*I][t]=n+32*Q}}}return Bg.phase2om=A}function tp(){return Bg.phase2pp?Bg.phase2pp:Bg.phase2pp=BD(gD(),[0])}function ip(){return Bg.phase2op?Bg.phase2op:Bg.phase2op=BD(eD(),[0])}function BD(A,g){let e=A.length,B=A[0].length,I=Array(e).fill(-1),o=g.slice(),t=[],i=0;for(;o.length>0;){t.length=0;for(let r of o)if(I[r]===-1){I[r]=i;for(let n=0;n<B;n++){let l=A[r][n];for(;l!==r;)t.push(l),l=A[l][n]}}[o,t]=[t,o],i+=1}return I}function*Cp(A,g,e,B){let I=A.length,o=0;for(let t=0;t<I;t++)o=Math.max(o,e[t][A[t]]);for(;o<=B;)yield*ID(A,g,e,o,-1),o++}function*ID(A,g,e,B,I){let o=A.length,t=g[0][0].length,i=0;for(let r=0;r<o;r++)i=Math.max(i,e[r][A[r]]);if(!(i>B)){if(B===0){yield[];return}if(!(i===0&&B===1))for(let r=0;r<t;r++){if(r===I||r<I&&Vf(r,I))continue;let n=A.slice();for(let Q=0;Q<o;Q++)n[Q]=g[Q][A[Q]][r];let l=1;for(;A.some((Q,f)=>A[f]!==n[f]);){let Q=ID(n,g,e,B-1,r);for(;;){let{value:f,done:c}=Q.next();if(c)break;yield[[r,l]].concat(f)}for(let f=0;f<o;f++)n[f]=g[f][n[f]][r];l++}}}}async function rp(){return Xy(!1)}var uN,hN,yN,vy,Jy,Hy,qy,Py,Ty,zy,Oy,Fo,_y,aI,MC,gp,Xf,ep,bE,xE,Wf,vE,gB,Bg,oD=U(()=>{"use strict";Be();[uN,hN]=(()=>{let A=new Int8Array(49152),g=new Int8Array(4096*12);for(let I=0;I<4096;I++)for(let o=0,t=0;o<12;o++)(I>>>o&1)!==0&&(A[o<<12|I]=t,g[t<<12|I]=o,t++);function e(I){let o=4095,t=19958400,i=0;for(let r=0;r<10;r++){let n=I[r];i+=A[o|n<<12]*t,o&=~(1<<n),t/=11-r}return i}function B(I,o){let t=4095,i=19958400,r=0;for(let n=0;n<10;n++){let l=I/i|0;I-=l*i,r^=l&1;let Q=g[t|l<<12];o[n]=Q,t&=~(1<<Q),i/=11-n}return o[10]=g[t|r<<12],o[11]=g[t|(r^1)<<12],o}return[e,B]})();yN={co:[0,0,0,0],mp:sI(12),wp:sI(12),cp:[0,1,2,3]},vy={co:[2,0,0,0],mp:sI(12),wp:Mt([1,9,11],12),cp:[0,1,2,3]},Jy={co:[0,2,0,0],mp:sI(12),wp:Mt([0,7,2],12),cp:[0,1,2,3]},Hy={co:[0,0,2,0],mp:sI(12),wp:Mt([3,6,10],12),cp:[0,1,2,3]},qy={co:[0,0,0,2],mp:sI(12),wp:Mt([4,8,5],12),cp:[0,1,2,3]},Py={co:[2,0,0,0],mp:UB([[1,9,11],[7,3,5]],12),wp:UB([[1,9,11],[7,3,5]],12),cp:[0,2,3,1]},Ty={co:[0,2,0,0],mp:UB([[0,7,2],[6,1,8]],12),wp:UB([[0,7,2],[6,1,8]],12),cp:[3,1,0,2]},zy={co:[0,0,2,0],mp:UB([[3,6,10],[9,0,4]],12),wp:UB([[3,6,10],[9,0,4]],12),cp:[1,3,2,0]},Oy={co:[0,0,0,2],mp:UB([[4,8,5],[10,2,11]],12),wp:UB([[4,8,5],[10,2,11]],12),cp:[2,0,1,3]},Fo=[Py,Ty,zy,Oy,vy,Jy,Hy,qy],_y=["u","l","r","b","U","L","R","B"],aI=8,MC=4;gp=[],Xf=[],ep=[],bE=[];for(let A=0;A<aI;A++){let g=Fo[A];gp[A]=g.mp,Xf[A]=YE(g.mp),ep[A]=g.wp,bE[A]=YE(g.wp)}xE=[0,0,0,0,2,2,2,2],Wf=[[14,-1,-1,11,11,10,9,8,8,7,7,6,4,5,5,3,4,4,2,3,4,3,-1,-1,0],[13,-1,-1,11,10,10,9,8,8,7,7,6,4,5,5,3,4,4,2,3,3,1,-1,-1,6]],vE=new Int8Array(55);for(let A=0;A<25;A++)vE[A]=Wf[0][A],vE[A+30]=Wf[1][A];gB=new Int8Array(6*12*12*3);for(let A=0;A<6;A++)for(let g=0;g<12;g++)for(let e=0;e<12;e++){let B=A+6*g+72*e,I=2;g===A?I++:g===(A+6)%12&&I--,e===(A+6)%12?I++:e===A&&I--,gB[B]=I,gB[B+6*12*12]=gB[B+2*6*12*12]=I+5}Bg={}});var tD={};dg(tD,{randomMasterTetraminxScrambleString:()=>rp});var iD=U(()=>{"use strict";oD()});function Lp(A,g){A.ul=g.ul,A.ur=g.ur,A.dl=g.dl,A.dr=g.dr,A.ml=g.ml}function cD(A,g){var e;g<<=2,g>24?(g=48-g,e=A.ul,A.ul=(~~A.ul>>g|A.ur<<24-g)&16777215,A.ur=(~~A.ur>>g|e<<24-g)&16777215):g>0?(e=A.ul,A.ul=(A.ul<<g|~~A.ur>>24-g)&16777215,A.ur=(A.ur<<g|~~e>>24-g)&16777215):g===0?(e=A.ur,A.ur=A.dl,A.dl=e,A.ml=1-A.ml):g>=-24?(g=-g,e=A.dl,A.dl=(A.dl<<g|~~A.dr>>24-g)&16777215,A.dr=(A.dr<<g|~~e>>24-g)&16777215):g<-24&&(g=48+g,e=A.dl,A.dl=(~~A.dl>>g|A.dr<<24-g)&16777215,A.dr=(~~A.dr>>g|e<<24-g)&16777215)}function Rp(A){var g,e,B,I,o;for(B=0,A.arr[0]=Ne(A,0),I=1;I<24;++I)Ne(A,I)!==A.arr[B]&&(A.arr[++B]=Ne(A,I));for(o=0,g=0;g<16;++g)for(e=g+1;e<16;++e)A.arr[g]>A.arr[e]&&(o^=1);return o}function up(A){var g,e,B,I;return I=A.ur&1118481,I|=~~I>>3,I|=~~I>>6,I=I&15|~~I>>12&48,B=A.ul&1118481,B|=~~B>>3,B|=~~B>>6,B=B&15|~~B>>12&48,e=A.dr&1118481,e|=~~e>>3,e|=~~e>>6,e=e&15|~~e>>12&48,g=A.dl&1118481,g|=~~g>>3,g|=~~g>>6,g=g&15|~~g>>12&48,Kt(Rp(A)<<24|B<<18|I<<12|g<<6|e)}function hp(A,g){var e,B;for(e=0;e<8;++e)A.prm[e]=~~(~~Ne(A,e*3+1)>>1<<24)>>24;for(g.cornperm=vt(A.prm),g.topEdgeFirst=Ne(A,0)===Ne(A,1),e=g.topEdgeFirst?2:0,B=0;B<4;e+=3,++B)A.prm[B]=~~(~~Ne(A,e)>>1<<24)>>24;for(g.botEdgeFirst=Ne(A,12)===Ne(A,13),e=g.botEdgeFirst?14:12;B<8;e+=3,++B)A.prm[B]=~~(~~Ne(A,e)>>1<<24)>>24;g.edgeperm=vt(A.prm),g.ml=A.ml}function Ne(A,g){var e;return g<6?e=~~A.ul>>(5-g<<2):g<12?e=~~A.ur>>(11-g<<2):g<18?e=~~A.dl>>(17-g<<2):e=~~A.dr>>(23-g<<2),~~((e&15)<<24)>>24}function qE(A,g,e){g<6?(A.ul&=~(15<<(5-g<<2)),A.ul|=e<<(5-g<<2)):g<12?(A.ur&=~(15<<(11-g<<2)),A.ur|=e<<(11-g<<2)):g<18?(A.dl&=~(15<<(17-g<<2)),A.dl|=e<<(17-g<<2)):(A.dr&=~(15<<(23-g<<2)),A.dr|=e<<(23-g<<2))}function _E(){this.arr=[],this.prm=[]}function yp(){var A,g,e,B,I,o,t,i,r;for(A=new _E,e=wo[yA(3678)],I=19088743<<1|286331153,B=19088743<<1,t=o=8,g=0;g<24;g++)(e>>g&1)===0?(i=yA(o)<<2,qE(A,23-g,B>>i&15),r=(1<<i)-1,B=(B&r)+(B>>4&~r),--o):(i=yA(t)<<2,qE(A,23-g,I>>i&15),qE(A,22-g,I>>i&15),r=(1<<i)-1,I=(I&r)+(I>>4&~r),--t,++g);return A.ml=yA(2),A}function pp(){}function Fp(A){var g,e,B,I,o,t;for(Lp(A.Search_d,A.Search_c),B=0;B<A.Search_length1;++B)cD(A.Search_d,A.Search_move[B]);for(hp(A.Search_d,A.Search_sq),e=A.Search_sq.edgeperm,g=A.Search_sq.cornperm,o=A.Search_sq.ml,t=Math.max(Ag[A.Search_sq.edgeperm<<1|o],Ag[A.Search_sq.cornperm<<1|o]),B=t;B<A.Search_maxlen2;++B)if(xC(A,e,g,A.Search_sq.topEdgeFirst,A.Search_sq.botEdgeFirst,o,B,A.Search_length1,0)){for(I=0;I<B;++I)cD(A.Search_d,A.Search_move[A.Search_length1+I]);return A.Search_sol_string=wp(A,B+A.Search_length1),!0}return!1}function wp(A,g){for(var e="",B=0,I=0,o=g-1;o>=0;o--){var t=A.Search_move[o];t>0?(t=12-t,B=t>6?t-12:t):t<0?(t=12+t,I=t>6?t-12:t):(B===0&&I===0?e+=" / ":e+=\`(\${B}, \${I}) / \`,B=I=0)}return(B!==0||I!==0)&&(e+=\`(\${B}, \${I})\`),e}function KC(A,g,e,B,I,o){var t,i,r;if(e===0&&B<4)return B===0&&Fp(A);if(o!==0&&(r=YC[g],i=hg[r],i<B&&(A.Search_move[I]=0,KC(A,r,i,B-1,I+1,0))))return!0;if(r=g,o<=0){for(t=0;t+=bt[r],r=~~t>>4,t&=15,!(t>=12||(i=hg[r],i>B));)if(i<B&&(A.Search_move[I]=t,KC(A,r,i,B-1,I+1,1)))return!0}if(r=g,o<=1){for(t=0;t+=Yt[r],r=~~t>>4,t&=15,!(t>=6||(i=hg[r],i>B));)if(i<B&&(A.Search_move[I]=-t,KC(A,r,i,B-1,I+1,2)))return!0}return!1}function xC(A,g,e,B,I,o,t,i,r){var n,l,Q,f,c,R,L;if(t===0&&!B&&I||r!==0&&B===I&&(Q=Jt[g],l=Jt[e],Ag[Q<<1|1-o]<t&&Ag[l<<1|1-o]<t&&(A.Search_move[i]=0,xC(A,Q,l,B,I,1-o,t-1,i+1,0))))return!0;if(r<=0)for(L=!B,Q=L?cI[g]:g,l=L?e:cI[e],f=L?1:2,c=Ag[Q<<1|o],R=Ag[l<<1|o];f<12&&c<=t&&c<=t;){if(c<t&&R<t&&(A.Search_move[i]=f,xC(A,Q,l,L,I,o,t-1,i+1,1)))return!0;L=!L,L?(Q=cI[Q],c=Ag[Q<<1|o],f+=1):(l=cI[l],R=Ag[l<<1|o],f+=2)}if(r<=1)for(n=!I,Q=n?DI[g]:g,l=n?e:DI[e],f=n?1:2,c=Ag[Q<<1|o],R=Ag[l<<1|o];f<(t>3?6:12)&&c<=t&&c<=t;){if(c<t&&R<t&&(A.Search_move[i]=-f,xC(A,Q,l,B,n,o,t-1,i+1,2)))return!0;n=!n,n?(Q=DI[Q],c=Ag[Q<<1|o],f+=1):(l=DI[l],R=Ag[l<<1|o],f+=2)}return!1}function mp(A,g){var e;for(A.Search_c=g,e=up(g),A.Search_length1=hg[e];A.Search_length1<100&&(A.Search_maxlen2=Math.min(31-A.Search_length1,17),!KC(A,e,hg[e],A.Search_length1,0,-1));++A.Search_length1);return A.Search_sol_string}function uD(){this.Search_move=[],this.Search_d=new _E,this.Search_sq=new yD}function dp(){}function Sp(){LD||(LD=!0,xt=[0,3,6,12,15,24,27,30,48,51,54,60,63],wo=[],hg=[],bt=[],Yt=[],YC=[],Gp())}function kp(A){var g,e;g=0,e=0;do(A.bottom&2048)===0?(g+=1,A.bottom=A.bottom<<1):(g+=2,A.bottom=A.bottom<<2^12291),e=1-e;while((LI(A.bottom&63)&1)!==0);return(LI(A.bottom)&2)===0&&(A.Shape_parity^=e),g}function PE(A){var g;return g=FD(wo,A.top<<12|A.bottom)<<1|A.Shape_parity,g}function TE(A,g){A.Shape_parity=g&1,A.top=wo[~~g>>1],A.bottom=A.top&4095,A.top>>=12}function Up(A){var g,e;g=0,e=0;do(A.top&2048)===0?(g+=1,A.top=A.top<<1):(g+=2,A.top=A.top<<2^12291),e=1-e;while((LI(A.top&63)&1)!==0);return(LI(A.top)&2)===0&&(A.Shape_parity^=e),g}function hD(){}function Kt(A){var g;return g=FD(wo,A&16777215)<<1|~~A>>24,g}function Gp(){var A,g,e,B,I,o,t,i,r,n,l,Q,f,c,R,L;for(A=0,t=0;t<28561;++t)o=xt[t%13],e=xt[~~(t/13)%13],Q=xt[~~(~~(t/13)/13)%13],l=xt[~~(~~(~~(t/13)/13)/13)],f=l<<18|Q<<12|e<<6|o,LI(f)===16&&(wo[A++]=f);for(n=new hD,t=0;t<7356;++t)TE(n,t),bt[t]=Up(n),bt[t]|=PE(n)<<4,TE(n,t),Yt[t]=kp(n),Yt[t]|=PE(n)<<4,TE(n,t),L=n.top&63,c=LI(L),R=LI(n.bottom&4032),n.Shape_parity^=1&~~(c&R)>>1,n.top=n.top&4032|~~n.bottom>>6&63,n.bottom=n.bottom&63|L<<6,YC[t]=PE(n);for(t=0;t<7536;++t)hg[t]=-1;for(hg[Kt(14378715)]=0,hg[Kt(31157686)]=0,hg[Kt(23967451)]=0,hg[Kt(7191990)]=0,B=4,I=0,g=-1;B!==I;)for(I=B,++g,t=0;t<7536;++t)if(hg[t]===g){r=0,i=t;do i=bt[i],r+=i&15,i>>=4,hg[i]===-1&&(++B,hg[i]=g+1);while(r!==12);r=0,i=t;do i=Yt[i],r+=i&15,i>>=4,hg[i]===-1&&(++B,hg[i]=g+1);while(r!==12);i=YC[t],hg[i]===-1&&(++B,hg[i]=g+1)}}function Np(){}function Mp(){if(!RD){RD=!0,Ag=[],Jt=[],cI=[],DI=[],pD=[1,1,2,6,24,120,720,5040],fI=[];for(var A=0;A<12;++A)fI[A]=[];Kp()}}function yD(){}function vt(A){var g,e,B,I;for(e=0,I=1985229328,g=0;g<7;++g)B=A[g]<<2,e=(8-g)*e+(~~I>>B&7),I-=286331152<<B;return e&65535}function Kp(){var A,g,e,B,I,o,t,i,r,n,l,Q,f;for(I=0;I<12;++I)for(fI[I][0]=1,fI[I][I]=1,r=1;r<I;++r)fI[I][r]=fI[I-1][r-1]+fI[I-1][r];for(Q=[],I=0;I<40320;++I)zE(Q,I),f=Q[2],Q[2]=Q[4],Q[4]=f,f=Q[3],Q[3]=Q[5],Q[5]=f,Jt[I]=vt(Q),zE(Q,I),f=Q[0],Q[0]=Q[1],Q[1]=Q[2],Q[2]=Q[3],Q[3]=f,cI[I]=vt(Q),zE(Q,I),f=Q[4],Q[4]=Q[5],Q[5]=Q[6],Q[6]=Q[7],Q[7]=f,DI[I]=vt(Q);for(I=0;I<80640;++I)Ag[I]=-1;for(Ag[0]=0,g=0,e=1;e<80640;){i=g>=11,B=i?-1:g,A=i?g:-1,++g;A:for(I=0;I<80640;++I)if(Ag[I]===B){if(o=~~I>>1,l=I&1,t=Jt[o]<<1|1-l,Ag[t]===A&&(++e,Ag[i?I:t]=~~(g<<24)>>24,i))continue A;for(t=o,n=0;n<4;++n)if(t=cI[t],Ag[t<<1|l]===A&&(++e,Ag[i?I:t<<1|l]=~~(g<<24)>>24,i))continue A;for(n=0;n<4;++n)if(t=DI[t],Ag[t<<1|l]===A&&(++e,Ag[i?I:t<<1|l]=~~(g<<24)>>24,i))continue A}}}function zE(A,g){var e,B,I,o,t;for(t=1985229328,e=0;e<7;++e)I=pD[7-e],o=~~(g/I),g-=o*I,o<<=2,A[e]=~~((~~t>>o&7)<<24)>>24,B=(1<<o)-1,t=(t&B)+(~~t>>4&~B);A[7]=~~(t<<24)>>24}function xp(){}function LI(A){return A-=~~A>>1&1431655765,A=(~~A>>2&858993459)+(A&858993459),A=(~~A>>4)+A&252645135,A+=~~A>>8,A+=~~A>>16,A&63}function FD(A,g){var e,B,I,o;for(B=0,e=A.length-1;B<=e;)if(I=B+(~~(e-B)>>1),o=A[I],o<g)B=I+1;else if(o>g)e=I-1;else return I;return-B-1}function Hp(){return Jp().scramble_string}var ig,LD,Yt,wo,hg,bt,YC,xt,RD,DI,fI,Ag,cI,Jt,pD,OE,Yp,bp,vp,Jp,wD=U(()=>{"use strict";Be();ig=_E.prototype=pp.prototype;ig.dl=10062778;ig.dr=14536702;ig.ml=0;ig.ul=70195;ig.ur=4544119;ig=uD.prototype=dp.prototype;ig.Search_c=null;ig.Search_length1=0;ig.Search_maxlen2=0;ig.Search_sol_string=null;LD=!1;ig=hD.prototype=Np.prototype;ig.bottom=0;ig.Shape_parity=0;ig.top=0;RD=!1;ig=yD.prototype=xp.prototype;ig.botEdgeFirst=!1;ig.cornperm=0;ig.edgeperm=0;ig.ml=0;ig.topEdgeFirst=!1;OE=!1,Yp=function(A,g,e){OE||(Sp(),Mp()),e&&e("Done initializing Square-1."),OE=!0,A?.()},bp=function(){return OE||Yp(),yp()},vp=function(A){var g=new uD;return mp(g,A)},Jp=function(){var A=bp(),g=vp(A);return{state:A,scramble_string:g}}});var mD={};dg(mD,{getRandomSquare1ScrambleString:()=>Hp});var dD=U(()=>{"use strict";wD()});var EQ=Symbol("Comlink.proxy"),wc=Symbol("Comlink.endpoint"),mc=Symbol("Comlink.releaseProxy"),VC=Symbol("Comlink.thrown"),QQ=A=>typeof A=="object"&&A!==null||typeof A=="function",dc={canHandle:A=>QQ(A)&&A[EQ],serialize(A){let{port1:g,port2:e}=new MessageChannel;return ko(A,g),[e,[e]]},deserialize(A){return A.start(),Uc(A)}},Sc={canHandle:A=>QQ(A)&&VC in A,serialize({value:A}){let g;return A instanceof Error?g={isError:!0,value:{message:A.message,name:A.name,stack:A.stack}}:g={isError:!1,value:A},[g,[]]},deserialize(A){throw A.isError?Object.assign(new Error(A.value.message),A.value):A.value}},lQ=new Map([["proxy",dc],["throw",Sc]]);function ko(A,g=self){g.addEventListener("message",function e(B){if(!B||!B.data)return;let{id:I,type:o,path:t}=Object.assign({path:[]},B.data),i=(B.data.argumentList||[]).map(MB),r;try{let n=t.slice(0,-1).reduce((Q,f)=>Q[f],A),l=t.reduce((Q,f)=>Q[f],A);switch(o){case"GET":r=l;break;case"SET":n[t.slice(-1)[0]]=MB(B.data.value),r=!0;break;case"APPLY":r=l.apply(n,i);break;case"CONSTRUCT":{let Q=new l(...i);r=Mc(Q)}break;case"ENDPOINT":{let{port1:Q,port2:f}=new MessageChannel;ko(A,f),r=Nc(Q,[Q])}break;case"RELEASE":r=void 0;break;default:return}}catch(n){r={value:n,[VC]:0}}Promise.resolve(r).catch(n=>({value:n,[VC]:0})).then(n=>{let[l,Q]=ZC(n);g.postMessage(Object.assign(Object.assign({},l),{id:I}),Q),o==="RELEASE"&&(g.removeEventListener("message",e),sQ(g))})}),g.start&&g.start()}function kc(A){return A.constructor.name==="MessagePort"}function sQ(A){kc(A)&&A.close()}function Uc(A,g){return XC(A,[],g)}function Wt(A){if(A)throw new Error("Proxy has been released and is not useable")}function XC(A,g=[],e=function(){}){let B=!1,I=new Proxy(e,{get(o,t){if(Wt(B),t===mc)return()=>uI(A,{type:"RELEASE",path:g.map(i=>i.toString())}).then(()=>{sQ(A),B=!0});if(t==="then"){if(g.length===0)return{then:()=>I};let i=uI(A,{type:"GET",path:g.map(r=>r.toString())}).then(MB);return i.then.bind(i)}return XC(A,[...g,t])},set(o,t,i){Wt(B);let[r,n]=ZC(i);return uI(A,{type:"SET",path:[...g,t].map(l=>l.toString()),value:r},n).then(MB)},apply(o,t,i){Wt(B);let r=g[g.length-1];if(r===wc)return uI(A,{type:"ENDPOINT"}).then(MB);if(r==="bind")return XC(A,g.slice(0,-1));let[n,l]=nQ(i);return uI(A,{type:"APPLY",path:g.map(Q=>Q.toString()),argumentList:n},l).then(MB)},construct(o,t){Wt(B);let[i,r]=nQ(t);return uI(A,{type:"CONSTRUCT",path:g.map(n=>n.toString()),argumentList:i},r).then(MB)}});return I}function Gc(A){return Array.prototype.concat.apply([],A)}function nQ(A){let g=A.map(ZC);return[g.map(e=>e[0]),Gc(g.map(e=>e[1]))]}var aQ=new WeakMap;function Nc(A,g){return aQ.set(A,g),A}function Mc(A){return Object.assign(A,{[EQ]:!0})}function ZC(A){for(let[g,e]of lQ)if(e.canHandle(A)){let[B,I]=e.serialize(A);return[{type:"HANDLER",name:g,value:B},I]}return[{type:"RAW",value:A},aQ.get(A)||[]]}function MB(A){switch(A.type){case"HANDLER":return lQ.get(A.name).deserialize(A.value);case"RAW":return A.value}}function uI(A,g,e){return new Promise(B=>{let I=Kc();A.addEventListener("message",function o(t){!t.data||!t.data.id||t.data.id!==I||(A.removeEventListener("message",o),B(t.data))}),A.start&&A.start(),A.postMessage(Object.assign({id:I},g),e)})}function Kc(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}function xc(A){let g=new WeakMap;return{postMessage:A.postMessage.bind(A),addEventListener:(e,B)=>{let I=o=>{"handleEvent"in B?B.handleEvent({data:o}):B({data:o})};A.on("message",I),g.set(B,I)},removeEventListener:(e,B)=>{let I=g.get(B);!I||(A.off("message",I),g.delete(B))},nodeWorker:A,terminate:()=>{A.terminate()}}}var fQ=xc;var Yc=typeof globalThis.Worker>"u"&&typeof globalThis.WorkerNavigator>"u",bc="node:w-orker-_threa-ds",vc=()=>bc.replace(/-/g,"");async function Jc(){let{parentPort:A}=await import(vc()).catch();return fQ(A)}function DQ(A){Yc?(async()=>ko(A,await Jc()))():ko(A)}lg();Te();ee();SA();lg();Te();Be();ee();SA();SA();et();var KL={["OBTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:1,amountFactor:0},["Inner"]:{constantFactor:2,amountFactor:0}},["RBTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:1,amountFactor:0},["Inner"]:{constantFactor:1,amountFactor:0}},["OBQTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:0,amountFactor:1},["Inner"]:{constantFactor:0,amountFactor:2}},["RBQTM"]:{["Rotation"]:{constantFactor:0,amountFactor:0},["Outer"]:{constantFactor:0,amountFactor:1},["Inner"]:{constantFactor:0,amountFactor:1}},["ETM"]:{["Rotation"]:{constantFactor:1,amountFactor:0},["Outer"]:{constantFactor:1,amountFactor:0},["Inner"]:{constantFactor:1,amountFactor:0}}};var tt=class extends JB{constructor(e){super();this.metric=e}traverseAlg(e){let B=0;for(let I of e.childAlgNodes())B+=this.traverseAlgNode(I);return B}traverseGrouping(e){let B=e.alg;return this.traverseAlg(B)*Math.abs(e.amount)}traverseMove(e){return this.metric(e)}traverseCommutator(e){return 2*(this.traverseAlg(e.A)+this.traverseAlg(e.B))}traverseConjugate(e){return 2*this.traverseAlg(e.A)+this.traverseAlg(e.B)}traversePause(e){return 0}traverseNewline(e){return 0}traverseLineComment(e){return 0}};function oa(A){return"A"<=A&&A<="Z"}function xL(A){let g=A.family;return oa(g[0])&&g[g.length-1]==="v"||g==="x"||g==="y"||g==="z"||g==="T"?0:1}function YL(A){return 1}function bL(A){let g=A.family;return oa(g[0])&&g[g.length-1]==="v"||g==="x"||g==="y"||g==="z"||g==="T"?0:Math.abs(A.amount)}var $r=re(tt,[xL]),vL=re(tt,[YL]),JL=re(tt,[bL]);SA();SA();var An=class extends JB{traverseAlg(g){let e=0;for(let B of g.childAlgNodes())e+=this.traverseAlgNode(B);return e}traverseGrouping(g){return this.traverseAlg(g.alg)*Math.abs(g.amount)}traverseMove(g){return 1}traverseCommutator(g){return 2*(this.traverseAlg(g.A)+this.traverseAlg(g.B))}traverseConjugate(g){return 2*this.traverseAlg(g.A)+this.traverseAlg(g.B)}traversePause(g){return 1}traverseNewline(g){return 0}traverseLineComment(g){return 0}},HL=re(An);Be();var qL=2,PL=!0,TL=!1;function zL(A,g){let e=[];return g.forEach(function(B){let I=new h(B);if(I.amount!==1)throw new Error("SGS cannot handle def moves with an amount other than 1 yet.");let o=A.identityTransformation();for(let t=1;o=o.applyMove(I),!o.isIdentityTransformation();t++)e.push({move:I.modified({amount:t}),transformation:o})}),e}var se=class{constructor(g,e,B){this.kpuzzle=g;this.sgs=e;this.searchMoves=zL(this.kpuzzle,B??Object.keys(this.kpuzzle.definition.moves))}async solve(g,e=qL,B){let I=g.experimentalToTransformation();if(!I)throw new Error("distinguishable pieces are not supported in tremble solver yt");let o=null,t=1e6,i=(r,n,l)=>{if(n===0){let Q=this.sgsPhaseSolve(r,t);if(!Q)return;let f=l.concat(Q).experimentalSimplify({cancel:{puzzleSpecificModWrap:"canonical-centered"},puzzleSpecificSimplifyOptions:{quantumMoveOrder:B}}),c=$r(f);(o===null||c<t)&&(TL&&(console.log(\`New best (\${c} moves): \${f.toString()}\`),console.log(\`Tremble moves are: \${l.toString()}\`)),o=f,t=c);return}for(let Q of this.searchMoves)i(r.applyTransformation(Q.transformation),n-1,l.concat([Q.move]))};for(let r=0;r<=e;r++)i(I,r,new J);if(o===null)throw new Error("SGS search failed.");return o}sgsPhaseSolve(g,e){let B=new Wg,I=g;for(let o of this.sgs.ordering){let t=o.pieceOrdering,i="",r=I.invert();for(let l=0;l<t.length;l++){let Q=t[l],f=Q.orbitName,c=Q.permutationIdx;i+=\` \${r.transformationData[f].permutation[c]} \${r.transformationData[f].orientation[c]}\`}let n=o.lookup[i];if(!n)throw new Error("Missing algorithm in sgs or esgs?");if(B.experimentalPushAlg(n.alg),B.experimentalNumAlgNodes()>=e)return null;if(I=I.applyTransformation(n.transformation),PL)for(let l=0;l<t.length;l++){let Q=t[l],f=Q.orbitName,c=Q.permutationIdx;if(I.transformationData[f].permutation[c]!==c||I.transformationData[f].orientation[c]!==0)throw new Error("bad SGS :-(")}}return B.toAlg()}};function yi(A,g){let e=A.identityTransformation();for(let B of g.ordering){let I=ze(Object.values(B.lookup));e=e.applyTransformation(I.transformation)}return e.toKState()}Vg();var Kg=XA(()=>Promise.resolve().then(()=>(aa(),sa)));lg();Vg();var nn=XA(async()=>Promise.resolve().then(()=>(ya(),ha))),Cn,pa;function rn(A,g){if(typeof g!="number"||!Number.isInteger(g)||g<0)throw new Error(\`Invalid \${A}: \${g}\`)}async function TI(A,g,e){let{setArg:B,setKPuzzleDefString:I,serializeDefToTws:o,solveState:t,serializeScrambleState:i}=await nn,r=new PA(A);B("--startprunedepth 5");let n="";if(e){if(e.moveSubset){if(n=e?.moveSubset?.join(","),n.includes(" "))throw new Error("A move contains a space\\u203D");if(n.includes("-"))throw new Error("A move contains a dash");B(\`--moves \${n}\`)}let{minDepth:Q,maxDepth:f}=e;typeof Q<"u"?(rn("minDepth",Q),typeof f<"u"?rn("maxDepth",f):f=1e6,B("--randomstart"),B(\`--mindepth \${Q}\`),B(\`--maxdepth \${f}\`)):typeof f<"u"&&(rn("maxDepth",f),B("--mindepth 0"),B(\`--maxdepth \${f}\`))}let l=o(r,e);if(Cn){if(Cn!==l)throw new Error("Attempted to solve two puzzles in the same worker using \`twsearch\`. This is not currently supported!")}else Cn=l,await I(l);if(typeof pa<"u"&&n!==pa)throw new Error("Attempted to solve two different move subsets in the same worker using \`twsearch\`. This is not currently supported!");return await t(i("SearchState",g))}et();var Fa=null;async function sR(){return Fa||(Fa=(async()=>{let A=await(await Kg).cachedData222();return new se(await sg["2x2x2"].kpuzzle(),A,"URFLBD".split(""))})())}async function da(){await sR()}async function Sa(A,g=11){return VA(),await TI((await Pe.kpuzzle()).definition,A.stateData,{moveSubset:"UFLR".split(""),maxDepth:g})}async function aR(A,g=11){VA();let{normalizedState:e,normalizationAlg:B}=Tr(A),I=await TI((await Pe.kpuzzle()).definition,e.stateData,{moveSubset:"UFLR".split(""),maxDepth:g});return B.concat(I)}async function fR(A,g){try{return(await aR(A,g-1)).log(),!0}catch(e){if(e instanceof(await nn).NoSolutionError)return!1;throw e}}function DR(A){let g;for(let e of A.childAlgNodes()){let B=e.as(h);if(!B)throw new Error("Unexpected solution with a non-move node!");let{family:I}=B;if(g&&(g==="L"&&I==="R"||g==="R"&&I==="L"))return!0;g=I}return!1}async function wa(A){return VA(),TI((await Pe.kpuzzle()).definition,A.stateData,{moveSubset:"UFLR".split(""),minDepth:11})}function cR(A,g,e,B){Ba(e.stateData[g].pieces);let I=A.definition.orbits[g],o=e.stateData[g].orientation,t=0;for(let i=0;i<I.numPieces;i++){let r=yA(I.numOrientations);o[i]=r,t+=r}B&&"orientationSum"in B&&(o[0]=((o[0]+B.orientationSum-t)%I.numOrientations+I.numOrientations)%I.numOrientations)}async function ma(){let A=await sg["2x2x2"].kpuzzle(),g=new YA(A,structuredClone(A.startState().stateData));return cR(A,"CORNERS",g,{orientationSum:0}),g}async function ka(){let A=await ma();for(;await fR(A,4);)console.info("Filtered out a 2x2x2 state!"),A=await ma();let g=A.experimentalToTransformation().invert().toKState(),e=await wa(g);for(;DR(e);)e=await wa(g);return e}xn();wi();Vg();var CE=XA(()=>Promise.resolve().then(()=>(K2(),M2)));var G1=[[null,"x","x2","x'","z","z'"],[null,"y","y2","y'"]];async function x2(){return(await CE).initialize()}async function rE(){return(await CE).random444Scramble()}async function Y2(){return zI(await rE(),G1)}wi();SA();Be();function N1(A){switch(A){case 5:return 60;case 6:return 80;default:return 100}}var M1=[["U","D"],["L","R"],["F","B"]],b2=new Map;function K1(A){let g=b2.get(A);if(g)return g;let e=[];for(let B of M1){let I=[];e.push(I);for(let o of B){I.push(new T(o)),A>3&&I.push(new T(\`\${o}w\`));for(let t=3;t<=A/2;t++)I.push(new T(\`\${o}w\`,t))}}return b2.set(A,e),e}async function Ze(A){let g=K1(A),e=N1(A),B=new Wg,I=0,o=new Set;for(;B.experimentalNumAlgNodes()<e;){let t=yA(3);t!==I&&o.clear(),I=t;let i=ze(g[I]),r=i.toString();o.has(r)||(o.add(r),B.push(new h(i,ze([1,2,-1]))))}return B.toAlg()}var x1=[[null,"3Rw","3Rw2","3Rw'","3Fw","3Fw'"],[null,"3Dw","3Dw2","3Dw'"]];async function v2(){return zI(await Ze(5),x1)}SA();Te();Vg();ee();Vg();var Rf=XA(()=>Promise.resolve().then(()=>(Lf(),cf)));var CN=XA(()=>Promise.resolve().then(()=>(SE(),dE)));async function Mf(){return VA(),new J(await(await Rf).randomFTOScrambleString())}ee();Vg();var Of=XA(()=>Promise.resolve().then(()=>(zf(),Tf)));async function _f(){return VA(),(await Of).getRandomKilominxScramble()}SA();ee();Vg();var CD=XA(()=>Promise.resolve().then(()=>(iD(),tD)));async function rD(){return VA(),new J(await(await CD).randomMasterTetraminxScrambleString())}lg();ee();var np=2,nD=null;async function Ep(){return nD||(nD=(async()=>{let A=await(await Kg).cachedSGSDataMegaminx();return new se(await(await Kg).cachedMegaminxKPuzzleWithoutMO(),A,["U","R","F","L","BR","BL","FR","FL","DR","DL","B","D"])})())}async function ED(A){VA();let g=await Ep(),e=structuredClone(A.stateData);e.CENTERS.orientation=new Array(12).fill(0);let B=new YA(await(await Kg).cachedMegaminxKPuzzleWithoutMO(),e);return await g.solve(B,np,()=>5)}Te();ee();var Qp=3,QD=null;async function lp(){return QD||(QD=(async()=>{let A=await(await Kg).sgsDataPyraminx();return new se(await sg.pyraminx.kpuzzle(),A,"RLUB".split(""))})())}async function JE(A){return VA(),await(await lp()).solve(A,Qp,()=>3)}async function sp(){return VA(),yi(await sg.pyraminx.kpuzzle(),await(await Kg).sgsDataPyraminxFixedOrientation())}async function lD(){return JE(await sp())}ee();Vg();var sD=XA(()=>Promise.resolve().then(()=>(SE(),dE)));async function aD(){return VA(),(await sD).getRandomRediCubeScramble()}lg();ee();var ap=3,fD=null;async function fp(){return fD||(fD=(async()=>{let A=await(await Kg).sgsDataSkewb();return new se(await(await Kg).skewbKPuzzleWithoutMOCached(),A,"RLUB".split(""))})())}async function Dp(A){return new YA(await(await Kg).skewbKPuzzleWithoutMOCached(),{CORNERS:A.stateData.CORNERS,CENTERS:{pieces:A.stateData.CENTERS.pieces,orientation:new Array(6).fill(0)}})}async function HE(A){return VA(),await(await fp()).solve(await Dp(A),ap,B=>B.family==="y"?4:3)}async function cp(){return yi(await(await Kg).skewbKPuzzleWithoutMOCached(),await(await Kg).sgsDataSkewbFixedCorner())}async function DD(){return HE(await cp())}SA();Vg();var SD=XA(()=>Promise.resolve().then(()=>(dD(),mD)));async function kD(){return J.fromString(await(await SD).getRandomSquare1ScrambleString())}var qp=1e3;Aa(!0);var ND=!0;function Pp(A){ND=A}function UD(){return(typeof performance>"u"?Date:performance).now()}async function Cg(A,g,e){if(!ND)return g();let B=UD(),I=g();I?.then&&await I;let o=UD();return console.warn(\`\${A}\${e?.isPrefetch?" (prefetched)":""}: \${Math.round(o-B)}ms\`),I}var WE=new Map,jE=null;async function GD(A,g){switch(A){case"222":return Cg("random222Scramble",ka,{isPrefetch:g?.isPrefetch});case"333":case"333oh":case"333ft":return Cg("random333Scramble",Bo,{isPrefetch:g?.isPrefetch});case"333fm":return Cg("random333FewestMovesScramble",p0);case"333bf":case"333mb":return Cg("random333OrientedScramble",y0);case"444":return Cg("random444Scramble",rE,{isPrefetch:g?.isPrefetch});case"444bf":return Cg("random444OrientedScramble",Y2);case"555":return Cg("bigCubeScramble(5)",Ze.bind(Ze,5));case"555bf":return Cg("oriented555RandomMoves",v2);case"666":return Cg("bigCubeScramble(6)",Ze.bind(Ze,6));case"777":return Cg("bigCubeScramble(7)",Ze.bind(Ze,7));case"skewb":return Cg("randomSkewbFixedCornerScramble",DD);case"pyram":return Cg("randomPyraminxScrambleFixedOrientation",lD);case"sq1":return Cg("getRandomSquare1Scramble",kD,{isPrefetch:g?.isPrefetch});case"fto":return Cg("randomFTOScramble",Mf,{isPrefetch:g?.isPrefetch});case"master_tetraminx":return Cg("randomMasterTetraminxScramble",rD);case"kilominx":return Cg("randomKilominxScramble",_f,{isPrefetch:g?.isPrefetch});case"redi_cube":return Cg("randomRediCubeScramble",aD,{isPrefetch:g?.isPrefetch});default:throw new Error(\`unsupported event: \${A}\`)}}var VE="auto",XE={initialize:async A=>{switch(A){case"222":return Cg("preInitialize222",da);case"333":case"333oh":case"333ft":return Cg("initialize333",h0);case"444":return Cg("initialize444",x2);default:throw new Error(\`unsupported event: \${A}\`)}},setScramblePrefetchLevel(A){VE=A},randomScrambleForEvent:async A=>{let g=WE.get(A);return g?WE.delete(A):g=GD(A),VE!=="none"&&g.then(()=>{jE&&clearTimeout(jE),jE=setTimeout(()=>{WE.set(A,GD(A,{isPrefetch:!0}))},VE==="immediate"?0:qp)}),g},randomScrambleStringForEvent:async A=>(await XE.randomScrambleForEvent(A)).toString(),solve333ToString:async A=>{let g=new YA(await sg["3x3x3"].kpuzzle(),A);return(await Kn(g)).toString()},solve222ToString:async A=>{let g=new YA(await sg["2x2x2"].kpuzzle(),A);return(await Sa(g)).toString()},solveSkewbToString:async A=>{let g=new YA(await sg.skewb.kpuzzle(),A);return(await HE(g)).toString()},solvePyraminxToString:async A=>{let g=new YA(await sg.pyraminx.kpuzzle(),A);return(await JE(g)).toString()},solveMegaminxToString:async A=>{let g=new YA(await sg.megaminx.kpuzzle(),A);return(await ED(g)).toString()},setDebugMeasurePerf:async A=>{Pp(A)},solveTwsearchToString:async(A,g,e)=>(await TI(A,g,e)).toString()};DQ(XE);
4324
4324
  `;
4325
4325
  export {
4326
4326
  workerSource
4327
4327
  };
4328
- //# sourceMappingURL=search-worker-inside-generated-string-BOQDJKWH.js.map
4328
+ //# sourceMappingURL=search-worker-inside-generated-string-NG26QUL3.js.map